一、session作用域
-
session的基本使用
1.1存值: session.setAttribute(String name,Object values);
1.2 取值: Object value = session.getAttribute(String name);
1.3 移除指定的命名属性: session.removeAttribute(String name);
1.4 获取session : request.getSession(); -
session的生命周期:
2.1 超时策略: tomcat默认30分钟销毁session, 可以在web.xml中手动配置session销毁时间。 计时是从用户的最后一次响应结束开始。
2.2 手动控制: 从第一次调用request.getSession() 到 调用session.invalidate(); -
session作用域数据共享范围: 一次会话的多个请求中可以共享。
-
session机制的实现原理
4.1 客户端第一次请求服务器,服务器创建对应客户端的session之后, 服务器会自动将sessionid设置到客户端浏览器的cookie中保存起来。
当客户端再次请求服务器的时候, 服务器会主动获取客户端浏览器上的sessionid的cookie, 拿到sessionid后,在服务器中遍历找到对应sessionid的session返回给用户使用。
4.2 由于客户端浏览器的cookie是可以被禁用的,一旦cookie被禁用会导致客户端每一次请求服务器的时候,服务器都无法获取到sessionid, 服务器就会一直认为没有对应用户的session, 那就会一直创建新的。
4.3 URL重写: 目的是当客户端浏览器禁用cookie之后, 服务器还可以获取到用户对应的session。所谓的URL重写就是手动传输一下sessionid。
注意: 服务器会主动获取URL上传递的jsessionid, 找到对应的session。
session作用域中建议只存储用户状态的相关信息, 如果逼不得已要存储其他类型的数据,那么使用完了一定要及时的 remove掉, 否则会长时间占用服务器资源。
二、ServletContext作用域
-
特点: 一个web应用只有一个ServletContext作用域。
-
基本使用:
2.1 获取:
HttpSession session = request.getSession();
ServletContext application = session.getServletContext();
2.2 存值: application.setAttribute(String name,Object value);
2.3 取值: Object value = application.getAttribute();
2.4 移除命名属性: application.removeAttribute(String name); -
数据共享范围: 整个WEB应用。
-
生命周期: 服务器启动创建, 服务器关闭销毁。
-
存储的数据: 可以被整个WEB应用的所有用户共享, 建议存储的数据是被所有用户共同使用到的,而且这些数据不经常改变。
三、三大作用域对比
| 作用域名称 | 数据共享范围 | 生命周期 | 使用场景 |
|---|---|---|---|
| request (ServletRequest) | 一次请求 | 请求开始,响应结束 | 在一次请求中传递数据 |
| session(HttpSession) | 一个会话 | ①超时策略,tomcat默认30分钟销毁。②手动销毁, 第一次调用request.getSession(true) 到session.invalidate(); | 在一次会话的多次请求中共享数据 |
| application(ServletContext) | 一个WEB应用 | 服务器启动创建 ; 服务器关闭销毁 | 在整个WEB应用的所有用户需要共享数据的时候使用 |
四、 过滤器
- 过滤器可以过滤来自客户端的请求, 请求在到达目标的 Servlet之前,先经过一下过滤器,执行一些操作。
- 过滤器主要作用: 将多个action中共性的冗余代码,提取到过滤器中进行定义, 提高代码的复用性。
- 编写过滤器
3.1 实现Filter接口
3.2 编写web.xml - 过滤器的使用技巧
4.1 配置过滤所有请求
注意: / 会拦截HTML 以及 Servlet的请求。*
4.2 拦截部分 Servlet请求
4.3 响应回到客户端之前也可以到过滤器执行一些功能代码
4.4 在过滤器中执行重定向操作
注意: 重定向操作的时候,防止重定向循环, 我们对于重定向的目标资源不要进行过滤。 - 过滤器过滤请求的规则 【了解】
5.1 过滤器默认只过滤来自客户端的直接请求。 直接请求是指: 浏览器地址栏请求、HTML页面表单和超链接请求、重定向跳转请求。
5.2 只过滤转发请求
5.3 同时过滤转发和直接请求