天天看点

过滤器和监听器主要内容

主要内容

过滤器

  • 过滤器实现
  • 过滤器实例
    • 请求乱码处理
    • 用户非法访问拦截

监听器

过滤器

  • FIlter即为过滤,用于Servlet之外对Request或者Response进行修改,对用户请求预处理,对Response进行后处理
  • 作用,例如,之前post方法可能会出现中文请求乱码,需要在servlet中一个一个设置中文格式,现在可以在filter中进行统一的处理。可以将一些对所有servlet执行的操作放在此处执行。
  • 使用Filter的完整流程,Filter对用户请求进行预处理,接着将请求交给Servlet进行处理生成响应,最后Filter再对服务器数据进行后响应处理。可以并发编写多个Filter,这些Filter称之为Filter链。
    过滤器和监听器主要内容
  • 过滤器和监听器主要内容
  • 过滤器的实现
/**
 * 过滤器的实现
 * 1:创建java类
 * 2,实现Filter接口
 * 3.实现方法
 * 4 设置需要被过滤的资源
 *         拦截的资源 @WebFilter("/s1")
 *
 */
           
@WebFilter("/s1")
public class Filter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter 1 ");
    }

    @Override
    public void destroy() {

    }
}

           
  • 上述代码中只是实现了过器,因为没有放行资源,所以请求会被拦截,设置放行资源
//对request请求进行预处理

        //放行资源
        filterChain.doFilter(servletRequest,servletResponse);
        
        // 对response响应进行后处理
           
  • 过滤器执行的顺序
    • 客户端发起请求,过滤器1,过滤器2,资源,过滤器2,过滤器1,客户端。
    • 过滤器类在前面先执行(字母顺序)
  • 解决问题
    • 乱码问题
  • 解决乱码问题实战
    • 首先,新建个提交表单页面,test_filter.jsp
    <body>
    <form action="s1" method="post">
        姓名:<input type="text" name="uname"><button>提交</button>
    </form>
    
    <form action="s2" method="post">
        姓名:<input type="text" name="uname"><button>提交</button>
    </form>
    </body>
               
    • 在filter中设置中文格式
      • 因为doFilter的格式是ServletRequest,而请求是httpservlet的,所以要先转换。
    //处理请求乱码问题
      // 基于HTTp请求
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        request.setCharacterEncoding("utf-8");
               

用来做用户的非法访问拦截

  • 暂时略

监听器

  • 介绍:监听器是一特殊的Servlet类,监听特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁,变量的创建,销毁和修改等例如统计在线人数
  • 实现
    • 监听生命周期
      • ServletRequestListener
      • HttpSessionListener
      • ServletContextListener
    • 监听值的变化
      • ServletRequestAttributeLIstener
      • HttpSessionAttributeListener
      • ServletContextAttributeListener
    • 针对session中对象
      • 坚听session中的java对象(javabean),javabean直接实现监听器中的接口

实现

  • 实现需要坚听的接口
  • 在类名上添加注解@WebListener

示例:

  • 统计在线人数
  • 设计思路:根据session人数来得出在线人数的数量
  • 技术点:需要从onlinelistener实现HttpSessionListener的接口,使用变量来统计人数。想显示人数需要在servlet页面显示,所以建立个onlineServlet,涉及到一个从listener接口向servlet传递数据的操作,无法直接获得,所以考虑使用Sessio作用域来传递数据。