初识Servlet(二)🚓

440 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情

初识Servlet(二)

写在前面👀

今天主要讲讲Servlet的执行流程和生命周期

一、执行流程

上回书说到,我们并没有创建ServletDemo1类的对象,也没有调用对象中的service方法,为什么在控制台就打印了hello servlet!这句话呢?

1️⃣大致讲解

a.根据路径找Servlet实现类

  • 浏览器发出http://localhost:8080/tomcat/demo1请求,从请求中可以解析出三部分内容,分别是localhost:8080tomcatdemo1
    • 根据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.匹配优先级
  • 精确匹配 > 目录匹配> 扩展名匹配 > /* > /

写在后面🍻

感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗