目录
Servlet 三大域对象
- 三大域对象包括 Request、Session、ServletContext,它们有相似的 API 和不同的生命周期。
1. 使用场景
- 考虑到服务器的内存问题,能用小的不用大的:Request < Session < ServletContext
- 常见的使用场景:
- Request:一次查询的结果。例如,Servlet 转发 JSP。
- Session:存放当前会话的私有数据。例如,用户登录状态,验证码,购物车。
- ServletContext:若需要所有的 Servlet 都能访问到,才使用这个域对象。
2. API
- 设置数据:
void setAttribute(String name, Object o)
- 获取数据:
Object getAttribute(String name)
- 删除数据:
void removeAttribute(String name)
3. 生命周期
a. HttpServletRequest 域对象
- 何时创建:
用户发送请求时,创建。 - 何时销毁:
服务器做出响应后,销毁。 - 作用范围:
一次请求中,多次转发间(共享数据)。
b. HttpSession 域对象
- 何时创建:
用户第一次调用request.getSession()
方法时,创建【不准确的说法】;
用户访问携带的Jsessionid
与服务器不匹配时,创建【准确的说法】。 - 何时销毁:
- 服务器非正常关闭;
- 未活跃状态 30 分钟;
- 自杀。
- 作用范围:
一次会话中,多次请求间(共享数据)。
c. ServletContext 域对象
- 何时创建:
服务器正常启动,项目加载时,创建。 - 何时销毁:
服务器关闭或项目卸载时,销毁。 - 作用范围:
整个 web 项目(共享数据)。