# Servlet
# 执行原理 :
- 当服务器接收到客户端浏览器的请求后,会解析请求 url 路径,获取访问的 servlet 的子资源路径
- 查找 web, xml, 是否有对应的
标签体内容 - 如果有,则在找到对应的
全类名 - tomcat 会将字节码文件加载进内存,并且创建其对象
- 调用其方法
# Servlet 中的生命周期方法 :
被创建:执行 init 方法,只执行一次
默认情况下,第一次被访问时,Servlet 被创建
可以配置执行 Servlet 的创建时机 (zai
标签下配置) ① 第一次被访问时,创建
1
<load-on-startup>负数</load-on-startup>
② 在服务器启动时,创建
1
<load-on-startup>0或正数</load-on-startup>
Servlet 的 init 方法,只执行一次,说明一个 Servlet 在内存中只存在一个对象,Servlet 是单例的
- 多个用户同时访问时,可能存在线程安全问题
- 解决:尽量不要在 Servlet 中定义成员变量,即使定义了成员变量,也不要修改值
提供服务:执行 Service 方法,执行多次
- 每次访问 Servlet 时,Service 方法都会被调用一次
被销毁:执行 destroy 方法,只执行一次
- Servlet 被销毁时执行,服务器关闭时,Servlet 被销毁
- 只有服务器被正常关闭时,才会执行 destroy 方法
- destroy 方法在 Servlet 被销毁之前执行,一般用于释放资源
# Servlet3.0
好处 :
- 支持注解配置,可以不需要 web.xml 了
步骤 :
- 创建 Java EE 项目,选择 Servlet 的版本 3.0 以上,可以不创建 web.xml
- 定义一个类,实现 Servlet 接口
- 复写方法
- 在类上使用 @WebServlet 注解,进行配置
- @WebServlet ("资源路径")
# IDEA 与 tomcat 的相关配置
- IDEA 会为每一个 tomcat 部署的项目单独建立一份配置文件
- 查看控制台的 log :
Using CATALINA_BASE: "C:\Users\realWong\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\546f5570-6005-4ee7-8a04-e1450b52bc6a"
- 查看控制台的 log :
- 工作空间项目和 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 相关配置
urlpartten : Servlet 的访问路径
一个 Servlet 可以定义多个访问路径 : @WebServlet ({"/d4", "/dd4", "/ddd4"})
路径定义规则 :
- /xxx
- /xxx/xxx 多层
- *.do
- /xxx
