Java内存马基础(1)--三大件基础(Servlet、Filter、Listener)原创
字数 2885 2025-08-19 12:41:54
Java Web 三大件与Tomcat架构详解
1. Java Web 三大件基础
Java Web开发中的三大核心组件是Servlet、Filter和Listener,它们构成了Java Web应用的基础架构。
1.1 Servlet
1.1.1 Servlet简介
Servlet是用Java编写的服务器端程序,用于处理客户端请求并生成动态响应。主要特点包括:
- 高效:支持缓存和多线程处理
- 方便:提供大量实用工具例程(解析表单数据、处理Cookie等)
- 功能强大:基于Java API
- 可移植性好:跨平台运行
1.1.2 Servlet执行过程
- 客户端发送请求至服务器
- 服务器遍历web.xml中的url-pattern,找到匹配的Servlet
- 执行service()方法,解析请求并匹配对应方法
- 生成响应内容并返回给客户端
1.1.3 Servlet核心接口
- ServletConfig:封装web.xml中对当前Servlet的配置信息
- ServletContext:代表Servlet运行环境,提供容器信息访问方法
setAttribute(name, value)getAttribute(name)removeAttribute(name)
- ServletRequest:封装客户端请求
- ServletResponse:封装服务器响应
1.1.4 Servlet生命周期
- 初始化阶段(init方法)
- 服务器启动时或第一次请求时执行
- 只执行一次
- 服务阶段(service方法)
- 处理所有客户端请求
- 销毁阶段(destroy方法)
- 服务器关闭时执行
- 只执行一次
1.1.5 Servlet安全风险点
-
service()方法漏洞
- SQL注入
- XSS攻击
// 不安全示例:直接拼接SQL String query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'"; -
请求参数处理漏洞
- 路径遍历
- 命令注入
-
会话管理漏洞
- 会话劫持
- 会话固定
// 会话窃取示例 HttpSession session = request.getSession(); String sessionId = session.getId(); sendStolenSessionIdToMaliciousServer(sessionId); -
文件上传漏洞
- 恶意文件上传
- 服务器端代码执行
// 不安全文件上传示例 Part filePart = request.getPart("file"); String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); Files.copy(fileContent, Paths.get("/uploads/" + fileName)); -
错误处理漏洞
- 敏感信息泄露
- 错误页面利用
1.2 Filter
1.2.1 Filter简介
Filter是Servlet技术的补充,用于在请求到达Servlet之前和响应返回客户端之前进行拦截处理。
1.2.2 Filter核心方法
init(FilterConfig filterConfig):初始化方法doFilter(ServletRequest req, ServletResponse res, FilterChain chain):过滤处理方法destroy():销毁方法
1.2.3 Filter示例
@WebFilter("/secured/*")
public class IPFilter implements Filter {
private static final String ALLOWED_IP_RANGE = "192.168.0.";
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
String ipAddress = ((HttpServletRequest)req).getRemoteAddr();
if (ipAddress.startsWith(ALLOWED_IP_RANGE)) {
chain.doFilter(req, res); // 放行
} else {
((HttpServletResponse)res).setStatus(HttpServletResponse.SC_FORBIDDEN);
res.getWriter().println("Forbidden");
}
}
}
1.2.4 Filter生命周期
- 初始化阶段:Web应用启动时执行init方法
- 过滤阶段:每次请求匹配时执行doFilter方法
- 销毁阶段:Web应用卸载时执行destroy方法
1.2.5 Filter链
多个Filter组成Filter链,执行顺序由web.xml中的注册顺序决定:
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.example.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
1.2.6 Filter安全风险
- 过滤器链劫持(Filter Chain Hijacking):攻击者注入恶意Filter拦截所有请求
- 常见于允许自定义Filter的场景:
- 开放平台/插件系统
- 定制化Web框架
- 中间件/应用服务器
- 网络安全应用
1.3 Listener
1.3.1 Listener简介
基于观察者模式,用于监听并响应特定事件。主要组件:
- 事件源(Event Source):触发事件的对象
- 事件对象(Event Object):描述事件信息的对象
- 监听器(Listener):处理事件的接口
- 监听器方法(Listener Method):具体的事件处理方法
1.3.2 Listener示例
public class ButtonExample extends Frame {
public ButtonExample(){
Button button = new Button("Click Me");
button.addActionListener(new ButtonClickListenner());
}
class ButtonClickListenner implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("Button Clicked!");
}
}
}
2. Tomcat架构详解
2.1 Tomcat概述
Apache Tomcat是开源的轻量级Java Servlet容器,主要特点:
- Servlet/JSP容器
- 轻量级
- 开源
- 可扩展
- 跨平台
2.2 Tomcat核心组件
2.2.1 四大核心组件
-
Server:Tomcat实例的顶层控制中心
- 管理Service集合的生命周期
- 通常一个Tomcat实例只有一个Server
-
Service:关联Connector和Container
- 每个Service可包含多个Connector
- 每个Service只能有一个Container
- 标准实现类:StandardService
-
Connector:处理客户端连接请求
- 将网络请求转化为Tomcat Request对象
- 内部组件:
- EndPoint:网络通信
- Processor:生成Tomcat Request对象
- Adapter:转换为ServletRequest对象
-
Container:处理Servlet请求的接口
- 使用责任链设计模式
- 包含四个子容器:
- Engine:最顶层容器
- Host:虚拟主机
- Context:Web应用
- Wrapper:Servlet管理
2.2.2 容器层级结构
-
Engine:
- 实现类:StandardEngine
- 处理所有连接请求
- 可包含多个Host
-
Host:
- 实现类:StandardHost
- 代表虚拟主机
- 可包含多个Context
-
Context:
- 实现类:StandardContext
- 对应一个Web应用
- 包含Servlet映射关系
- 可包含多个Wrapper
-
Wrapper:
- 实现类:StandardWrapper
- 管理Servlet生命周期
- 一个Wrapper可对应多个Servlet
2.3 Tomcat工作流程
- 客户端发送HTTP请求
- Connector接收请求并处理:
- EndPoint处理网络连接
- Processor生成Tomcat Request
- Adapter转换为ServletRequest
- 请求传递到Container:
- Engine → Host → Context → Wrapper
- 最终由Servlet处理请求并生成响应
- 响应沿原路返回给客户端
2.4 组件关系总结
- Tomcat Server:顶层容器,承载所有服务
- Service:独立服务单元,包含:
- Connector:处理网络连接
- Container:执行业务逻辑
- Servlet API:提供开发接口,包括:
- Filter:请求/响应过滤
- Listener:生命周期监听
- Adapter:与其他服务器集成
3. 综合知识串联
Java Web应用在Tomcat中的完整处理流程:
- 客户端请求到达Tomcat Server
- 匹配的Service接收请求
- Connector处理网络连接和协议转换
- 请求进入Container层级处理:
- Engine → Host → Context → Wrapper
- 经过Filter链处理(如有)
- 最终由Servlet处理请求
- 响应沿原路返回,可能再次经过Filter处理
- Listener监听整个过程中的各种事件
这种架构设计实现了:
- 清晰的职责分离
- 灵活的扩展能力
- 高效的请求处理
- 安全的运行环境