使用案例:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
导了包之后,右键new创建文件,就有servlet选项。
定义servlet实现类,重写service方法,加上注解,配置访问路径:
@WebServlet("/servlet")
public class ServletDemo1 implements Servlet {
public void service(){}
}
启动Tomcat,直接访问:
http://localhost/servlet
Servlet的创建和调用
由web服务器创建,Servlet方法由web服务器调用。
Servlet方法
初始化方法init(),在Servlet被创建时执行,只执行一次;
service方法,每次Servlet被访问,都会调用该方法处理请求;
销毁方法destroy(),当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁;
getServletConfig()获取ServletConfig对象;
getServletInfo()获取Servlet信息。
Servlet 生命周期
概念:
对象的生命周期指一个对象从被创建到被销毁的整个过程。
Servlet 生命周期的4个阶段
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
加载和实例化:
默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
初始化:
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次。
请求处理:
每次请求时,容器都调用service()方法处理。
服务终止:
当需要释放内存或者容器关闭时,容器调用destroy()方法,然后容器会释放这个Servlet实例,该实例随后被垃圾收集器所回收。
Servlet 体系结构
HttpServlet->GenericServlet->Servlet
我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet,HttpServlet对进来的请求进行了逻辑判断,并在不同请求下调用了不同的do方法。
Servlet urlPattern配置
查看注解可知,urlPattern是个集合,所以可以放多个路径,这样,匹配路径的请求进来时都会被访问到。
urlPattern 配置规则
精确匹配
目录匹配
扩展名匹配
任意匹配
/ 和 /* 区别:
当我们的项目中的Servlet配置了“/”,会覆盖掉tomcat中的DefaultServlet,当其他的 url-pattern都匹配不上时都会走这个Servlet。但我们一般都不会这么配置,因为这样我们的静态资源就访问不到了。
当我们的项目中配置了“/*”,意味着匹配任意访问路径。
优先级:
一般我们都不用考虑,只是做个记录,作用范围越小的优先级一般越高。
精确路径 > 目录路径 > 扩展名路径 > /* > /