一、session作用域

  1. 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();

  2. session的生命周期:
    2.1 超时策略: tomcat默认30分钟销毁session, 可以在web.xml中手动配置session销毁时间。 计时是从用户的最后一次响应结束开始。
    2.2 手动控制: 从第一次调用request.getSession() 到 调用session.invalidate();

  3. session作用域数据共享范围: 一次会话的多个请求中可以共享。

  4. session机制的实现原理
    4.1 客户端第一次请求服务器,服务器创建对应客户端的session之后, 服务器会自动将sessionid设置到客户端浏览器的cookie中保存起来。
    当客户端再次请求服务器的时候, 服务器会主动获取客户端浏览器上的sessionid的cookie, 拿到sessionid后,在服务器中遍历找到对应sessionid的session返回给用户使用。
    4.2 由于客户端浏览器的cookie是可以被禁用的,一旦cookie被禁用会导致客户端每一次请求服务器的时候,服务器都无法获取到sessionid, 服务器就会一直认为没有对应用户的session, 那就会一直创建新的。
    4.3 URL重写: 目的是当客户端浏览器禁用cookie之后, 服务器还可以获取到用户对应的session。所谓的URL重写就是手动传输一下sessionid。
    Servlet-(4)
    注意: 服务器会主动获取URL上传递的jsessionid, 找到对应的session。
    session作用域中建议只存储用户状态的相关信息, 如果逼不得已要存储其他类型的数据,那么使用完了一定要及时的 remove掉, 否则会长时间占用服务器资源。

二、ServletContext作用域

  1. 特点: 一个web应用只有一个ServletContext作用域。

  2. 基本使用:
    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);

  3. 数据共享范围: 整个WEB应用。

  4. 生命周期: 服务器启动创建, 服务器关闭销毁。

  5. 存储的数据: 可以被整个WEB应用的所有用户共享, 建议存储的数据是被所有用户共同使用到的,而且这些数据不经常改变。

三、三大作用域对比

作用域名称 数据共享范围 生命周期 使用场景
request (ServletRequest) 一次请求 请求开始,响应结束 在一次请求中传递数据
session(HttpSession) 一个会话 ①超时策略,tomcat默认30分钟销毁。②手动销毁, 第一次调用request.getSession(true) 到session.invalidate(); 在一次会话的多次请求中共享数据
application(ServletContext) 一个WEB应用 服务器启动创建 ; 服务器关闭销毁 在整个WEB应用的所有用户需要共享数据的时候使用

四、 过滤器

  1. 过滤器可以过滤来自客户端的请求, 请求在到达目标的 Servlet之前,先经过一下过滤器,执行一些操作。
    Servlet-(4)
  2. 过滤器主要作用: 将多个action中共性的冗余代码,提取到过滤器中进行定义, 提高代码的复用性。
  3. 编写过滤器
    3.1 实现Filter接口
    Servlet-(4)
    3.2 编写web.xml
    Servlet-(4)
  4. 过滤器的使用技巧
    4.1 配置过滤所有请求
    Servlet-(4)
    注意: / 会拦截HTML 以及 Servlet的请求。*
    4.2 拦截部分 Servlet请求
    Servlet-(4)
    4.3 响应回到客户端之前也可以到过滤器执行一些功能代码
    Servlet-(4)
    4.4 在过滤器中执行重定向操作
    Servlet-(4)
    注意: 重定向操作的时候,防止重定向循环, 我们对于重定向的目标资源不要进行过滤。
  5. 过滤器过滤请求的规则 【了解】
    5.1 过滤器默认只过滤来自客户端的直接请求。 直接请求是指: 浏览器地址栏请求、HTML页面表单和超链接请求、重定向跳转请求。
    Servlet-(4)
    5.2 只过滤转发请求
    Servlet-(4)
    5.3 同时过滤转发和直接请求
    Servlet-(4)

五、 编码过滤器实现

Servlet-(4)

六、 强制登录验证过滤器

Servlet-(4)

相关文章: