Filter

  • 用于对用户请求进行预处理,也可以对 HttpServletResponse 进行后处理
  • 在服务器启动时创建 Filter 实例并执行初始化,创建或销毁顺序由在 web.xml 中配置的 的先后顺序决定
  • 过滤器链:过滤顺序由在 web.xml 中配置的 的先后顺序决定

创建 Filter 的步骤

  • 创建 Filter 类,实现 javax. servlet.Filter 接口,该接口中的方法void init(FilterConfig config):用于完成 Filter 的初始化void destroy():用于 Filter 销毁前,完成某些资源的回收void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):实现过滤功能,该方法就是对每个请求及响应增加的额外处理

    • doFilter() 方法可实现对用户请求进行预处理,也可实现对服务器响应进行后处理——它们的分界线为是否调用了 chain.doFilter(request, response);,执行该方法之前,即对用户请求进行预处理,行该方法之后,即对服务器响应进行后处理
  • 通过注解或在 web.xml 文件中配置 Filter

    • 在 web.xml 文件中配置 Filter
      • ,定义 Filter
        • ,Filter 的名字
        • ,Filter 的实现类
        • ,为该 Filter 配置参数,子标签
      • ,定义 Filter 拦截的 URL 地址
        • ,Filter 的名字
        • ,Filter 负责拦截的 URL,可以有多个
        • ,对指定的 Servlet 过滤
        • ,指定 Filter 所拦截的资源被 Servlet 容器调用的方式,内容可以为:REQUEST、FORWARD、INCLUDE、ERROR、ASYNC 之一(默认情况下,Filter 只会对新的请求做拦截 REQUEST,如果是请求转发,则不会过滤)
    • 使用 @WebFilter 注解,支持的常用属性
      • filterName,指定该 Filter 的名称
      • initParams,用于为该 Filter 配置参数
      • servletNames,该属性值可指定多个 Servlet 的名称,用于指定该 Filter 仅对这几个 Servlet 执行过滤
      • urIPatterns/value,这两个属性的作用完全相同,都指定该 Filter 所拦截的 URL

应用

  1. // 1. 请求编码过滤器 CharacterEncodingFilter
  2. if (hasLength(encoding) && (req.getCharacterEncoding() == null || forceEncoding)) {
  3. req.setCharacterEncoding(encoding);
  4. }
  5. // 2. 登录验证过滤器 CheckLoginFilter
  6. // 对于需要过滤的资源,放在统一的目录下,如 @WebFilter("/checklogin/*")
  7. if (user == null) {
  8. resp.sendRedirect("/login.jsp");
  9. return;
  10. }
  11. // 3. 屏蔽敏感字过滤器 ContentFilter
  12. // 自定义 MessageFilterRequest 继承HttpServletRequestWrapper 覆盖 getParameter 方法
  13. MessageFilterRequest req = new MessageFilterRequest((HttpServletRequest) request);
  14. // 4. 做 MVC 框架的前端控制器(处理请求、进行分发)

Listener

  • 作用:监听 Web 应用的内部事件

使用 Listener 的步骤

  • 定义 Listener 实现类,常用的 Listener 接口有:ServletContextListener:用于监听 Web 应用的启动和关闭ServletContextAttributeListener:用于监听 application 内属性的改变(被添加、删除、替换)ServletRequestListener:用于监听用户请求的初始化和销毁ServletRequestAttributeListener:用于监听 request 内属性的改变(被添加、删除、替换)HttpSessionListener:用于监听 session 的创建和销毁(可以通过该监听器监听系统的在线用户)HttpSessionAttributeListener:用于监听 session 内属性的改变(被添加、删除、替换)

  • 通过注解或在 web.xml 文件中配置 Listemer

    • 使用 @WebListener 修饰 Listener 实现类,无须指定任何属性
    • 标签中增加子标签 ,指定 Listener 的实现类