一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情。
初识Servlet(二)
写在前面👀
今天主要讲讲Servlet的执行流程和生命周期
一、执行流程
上回书说到,我们并没有创建ServletDemo1类的对象,也没有调用对象中的service方法,为什么在控制台就打印了
hello servlet!这句话呢?
1️⃣大致讲解
a.根据路径找Servlet实现类
- 浏览器发出
http://localhost:8080/tomcat/demo1请求,从请求中可以解析出三部分内容,分别是localhost:8080、tomcat、demo1- 根据
localhost:8080可以找到要访问的Tomcat Web服务器 - 根据
tomcat可以找到部署在Tomcat服务器上的tomcat项目 - 根据
demo1可以找到要访问的是项目中的哪个Servlet类,根据**@WebServlet**后面的访问路径进行匹配
- 根据
b.创建对象,调用方法
- 找到ServletDemo1这个类后,Tomcat Web服务器就会为ServletDemo1这个类创建一个对象,然后调用对象中的service方法
- ServletDemo1实现了Servlet接口,类中重写了service方法供Tomcat Web服务器进行调用
- service方法中有ServletRequest和ServletResponse两个参数,ServletRequest封装的是请求数据,ServletResponse封装的是响应数据,后期我们可以通过这两个参数实现前后端的数据交互
2️⃣总结
Servlet接口由我们实现并重写其方法,Servlet对象由web服务器创建,Servlet方法由web服务器调用
二、生命周期
生命周期: 对象的生命周期指一个对象从被创建到被销毁的整个过程
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:加载和实例化、初始化、请求处理、服务终止
1️⃣加载和实例化
- 默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
2️⃣初始化
- 在Servlet实例化之后,容器将调用Servlet的
init( )方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
3️⃣请求处理
- 每次请求Servlet时,Servlet容器都会调用Servlet的
service( )方法对请求进行处理
4️⃣服务终止
- 当需要释放内存或者容器关闭时,容器就会调用Servlet实例的
destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
三、访问路径配置
1️⃣web.xml文件配置
Servlet3.0版本前只支持XML配置文件的配置方法
- 在webapp下的WEB-INF目录下有一个web.xml文件,文件配置如下👇
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--
Servlet 全类名
-->
<servlet>
<!-- servlet的名称,名字任意-->
<servlet-name>servletDemo2</servlet-name>
<!--servlet类全限定名-->
<servlet-class>com.bighorn.web.ServletDemo2</servlet-class>
</servlet>
<!--
Servlet 访问路径
-->
<servlet-mapping>
<!-- servlet的名称,要和上面的名称一致-->
<servlet-name>servletDemo2</servlet-name>
<!-- servlet的访问路径-->
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
2️⃣@WebServlet注解配置
Servlet3.0版本后支持注解配置访问路径,相比较xml而言,更加便捷。
- 一个Servlet,可以配置多个urlPattern
@WebServlet(urlPatterns = {"/demo1","/demo2"})
urlPattern配置规则
a.精确匹配
- 配置路径👇
@WebServlet(urlPatterns = "/user/login")
- 访问路径👇
localhost:8080/tomcat/user/select
b.目录匹配
- 配置路径👇
@WebServlet(urlPatterns = "/user/*")
- 访问路径👇
localhost:8080/tomcat/user/a
localhost:8080/tomcat/user/b
localhost:8080/tomcat/user/c
c.扩展名匹配
不能以
/开始,必须以*开始
- 配置路径👇
@WebServlet(urlPatterns = "*.jsp")
- 访问路径👇
localhost:8080/tomcat/a.jsp
localhost:8080/tomcat/b.jsp
localhost:8080/tomcat/c.jsp
d.任意匹配
- 配置路径👇
@WebServlet("/")
@WebServlet("/*")
- 访问路径👇
可以匹配任意请求 URL
e.匹配优先级
- 精确匹配 > 目录匹配> 扩展名匹配 > /* > /
写在后面🍻
感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗