servlet学习
Servlet
Servlet(Server + Applet) 是运行在 服务器端的 Java 程序,
用来接收客户端请求(通常是 HTTP),并返回响应(通常是 HTML/JSON 等)。
Servlet是一个处理和响应请求的类,由web容器管理,容器负责接受请求,并调用Servlet
JSP 最终也会被编译成 Servlet。
1 | |
tomcat
多层容器组成的 Java Web 容器
1 | |
| 层级 | 组件名称 | 功能说明 |
|---|---|---|
| Server | 整个 Tomcat 实例(一个 JVM 内可有多个 Service) | |
| Service | 负责把“网络连接”和“应用处理”联系起来 | |
| Connector | 网络通信组件(如 HTTP、AJP)→ 接收请求、交给 Engine | |
| Engine | 请求处理引擎,负责根据 Host 和 Context 分发请求 | |
| Host | 虚拟主机,一个 Host 表示一个域名(例如 localhost) |
|
| Context | Web 应用(对应一个 webapp 文件夹或 .war 文件) |
|
| Wrapper | 包装单个 Servlet(例如 index.jsp、LoginServlet) |
1️⃣ Server
- 表示整个 Tomcat 实例。
- 对应配置文件:
server.xml中的<Server>标签。
2️⃣ Service
- 组合 Connector(网络层) 和 Engine(应用层)。
- 一个 Service 可以有多个 Connector,比如 HTTP、AJP。
1 | |
3️⃣ Connector(连接器)
- 接收 HTTP 请求,封装成
Request对象。 - 交给 Engine 进行处理。
- 默认的连接器是:
org.apache.coyote.http11.Http11NioProtocol- 监听端口
8080。
4️⃣ Engine(引擎)
- 处理所有来自 Connector 的请求。
- 根据请求的 Host(域名)选择合适的虚拟主机。
5️⃣ Host(虚拟主机)
- 对应域名,例如:
localhostmyapp.company.com
- 每个 Host 下面可以有多个 Web 应用(Context)。
1 | |
6️⃣ Context(上下文 / 应用)
- 对应一个 Web 应用(即一个
.war或文件夹)。 - 例如:
/webapps/demo/→ Context Path =/demo
- 管理该应用的所有 Servlets、Filters、Listeners。
- 每个context有独立的类加载器
Context将一个 web 应用(通常是一个 WAR 或 exploded directory)与 Tomcat 的 Host 绑定,提供该应用的运行时配置与资源(如 JNDI DataSource、环境变量、Session 配置、Valve 等)。
7️⃣ Wrapper(Servlet 封装)
- 封装单个 Servlet 实例。
- 每个 JSP 页面最终都被封装成一个 Servlet Wrapper。
流程
1 | |
核心包
| 模块 | 包路径 | 功能 |
|---|---|---|
| Catalina | org.apache.catalina.* |
Tomcat 的核心容器逻辑(Engine、Host、Context、Wrapper) |
| Coyote | org.apache.coyote.* |
网络连接处理(HTTP/AJP 协议栈) |
| Jasper | org.apache.jasper.* |
JSP 引擎 |
| Juli | org.apache.juli.* |
日志系统 |
| Naming | org.apache.naming.* |
JNDI 支持 |
filter
是位于客户端请求与目标资源(Servlet/JSP)之间的组件。它可以在请求到达 Servlet 之前、响应返回浏览器之前执行代码。
是链式调用,可经过多个filter类进行过滤
listener
Listener(监听器) 是用来监听 Web 应用生命周期事件的组件。有点像回调函数,自动触发
当某些事件发生(如应用启动、Session 创建、属性变更等),Tomcat 会自动调用 Listener 中的回调方法。
| 监听器接口 | 监听的事件 | 触发时机 |
|---|---|---|
| ServletContextListener | 应用启动 / 销毁 | Web 应用启动时或关闭时 |
| HttpSessionListener | Session 创建 / 销毁 | 用户登录、超时等 |
| ServletRequestListener | 请求创建 / 结束 | 每次 HTTP 请求到达或完成 |
| ServletContextAttributeListener | Context 属性变化 | 调用 setAttribute() 时 |
| HttpSessionAttributeListener | Session 属性变化 | Session 内 setAttribute() |
| ServletRequestAttributeListener | Request 属性变化 | 请求范围内 setAttribute() |
servlet学习
https://rpniu.github.io/2025/10/27/servlet学习/