# Servlet

# 执行原理 :

  1. 当服务器接收到客户端浏览器的请求后,会解析请求 url 路径,获取访问的 servlet 的子资源路径
  2. 查找 web, xml, 是否有对应的标签体内容
  3. 如果有,则在找到对应的全类名
  4. tomcat 会将字节码文件加载进内存,并且创建其对象
  5. 调用其方法

# Servlet 中的生命周期方法 :

  1. 被创建:执行 init 方法,只执行一次

    • 默认情况下,第一次被访问时,Servlet 被创建

    • 可以配置执行 Servlet 的创建时机 (zai标签下配置)

      ① 第一次被访问时,创建

      1
      <load-on-startup>负数</load-on-startup>

      ② 在服务器启动时,创建

      1
      <load-on-startup>0或正数</load-on-startup>

    Servlet 的 init 方法,只执行一次,说明一个 Servlet 在内存中只存在一个对象,Servlet 是单例的

    • 多个用户同时访问时,可能存在线程安全问题
    • 解决:尽量不要在 Servlet 中定义成员变量,即使定义了成员变量,也不要修改值
  2. 提供服务:执行 Service 方法,执行多次

    • 每次访问 Servlet 时,Service 方法都会被调用一次
  3. 被销毁:执行 destroy 方法,只执行一次

    • Servlet 被销毁时执行,服务器关闭时,Servlet 被销毁
    • 只有服务器被正常关闭时,才会执行 destroy 方法
    • destroy 方法在 Servlet 被销毁之前执行,一般用于释放资源

# Servlet3.0

好处 :

  • 支持注解配置,可以不需要 web.xml 了

步骤 :

  1. 创建 Java EE 项目,选择 Servlet 的版本 3.0 以上,可以不创建 web.xml
  2. 定义一个类,实现 Servlet 接口
  3. 复写方法
  4. 在类上使用 @WebServlet 注解,进行配置
    • @WebServlet ("资源路径")

# IDEA 与 tomcat 的相关配置

  1. IDEA 会为每一个 tomcat 部署的项目单独建立一份配置文件
    • 查看控制台的 log : Using CATALINA_BASE: "C:\Users\realWong\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\546f5570-6005-4ee7-8a04-e1450b52bc6a"
  2. 工作空间项目和 tomcat 部署的 web 项目
    • tomcat 真正访问的是 "tomcat 部署的 web 项目". "tomcat 部署的 web 项目" 对应着 "工作空间项目" 的 web 目录下的所有资源
    • WEB-INF 目录的资源不能被浏览器直接访问

# Servlet 的体系结构

Servlet —— 接口

​ |

GenericServlet ——- 抽象类

​ |

HttpServlet ——–抽象类

  • GenericServlet : 将 Servlet 接口中其他的方法做了默认空实现,只将 service () 方法作为抽象
    • 将来定义 Servlet 类时,可以继承 GenericServlet, 实现 Service () 方法即可
  • HttpServlet : 对 http 协议的一种封装,简化操作
    • 定义类继承 HttpServlet
    • 复写 doGet/doPost 方法

# Servlet 相关配置

  1. urlpartten : Servlet 的访问路径

    一个 Servlet 可以定义多个访问路径 : @WebServlet ({"/d4", "/dd4", "/ddd4"})

  2. 路径定义规则 :

    • /xxx
      • /xxx/xxx 多层
    • *.do
更新于 阅读次数