Java Web
Servlet、JSP、Cookie/Session、Filter — 经典 Java Web 全家桶。
Servlet
Servlet 生命周期
- 实例化:第一次请求时创建(或配置 load-on-startup 启动时创建)
- 初始化:调用 init() 方法
- 服务:调用 service() → 根据请求类型分发到 doGet()/doPost()
- 销毁:调用 destroy() 方法 单实例多线程:一个 Servlet 只有一个实例,多个请求共享
请求转发 vs 重定向
请求转发 (forward):
- 服务器内部跳转,一次请求
- 地址栏不变
- 可以共享 request 域数据
- 只能转发到当前应用的资源
重定向 (redirect):
- 两次请求,第一次返回 302 + Location
- 地址栏变为新 URL
- 不共享 request 域数据
- 可以重定向到外部资源
JSP
JSP 生命周期
翻译:.jsp → .java(Servlet 源码) 编译:.java → .class 初始化:jspInit() 服务:_jspService() 销毁:jspDestroy()
JSP 九大内置对象
request, response, session, application, out, page, pageContext, config, exception 四大域对象:page < request < session < application
Cookie 与 Session
Cookie
客户端存储,每次请求自动携带 setMaxAge:设置有效期(秒) HttpOnly:防止 XSS 读取 Secure:仅 HTTPS 传输 Path / Domain:作用范围
Session
服务端存储,通过 JSESSIONID Cookie 关联 默认 30 分钟超时 session.invalidate() 手动销毁 适合存储敏感数据和大量数据
JSTL
核心标签库
<c:if> — 条件判断 <c:choose> / <c:when> / <c:otherwise> — 多条件分支 <c:forEach> — 循环遍历,varStatus 获取循环状态(index, count, first, last) <c:set> — 设置变量 <c:out> — 输出并转义 HTML
Filter 与 Listener
Filter(过滤器)
实现 javax.servlet.Filter 接口 在请求到达 Servlet 之前进行预处理 在响应返回客户端之前进行后处理 常见用途:编码过滤、登录校验、权限控制 执行顺序:按 web.xml 中的配置顺序或 @WebFilter 顺序
Listener(监听器)
ServletContextListener:应用启动/销毁 HttpSessionListener:Session 创建/销毁 ServletRequestListener:请求创建/销毁 常见用途:初始化资源、统计在线人数