美文网首页
filterlistener

filterlistener

作者: 无聊新生 | 来源:发表于2017-08-21 19:14 被阅读0次

    什么是过滤器

    概念:过滤器是javaweb三大组件之一,它的本质是一个接口

    作用:可以拦截用户每次的请求与响应

    特点:
    1、每次请求与响应都拦截
    2、可以拦截请求,转发,重定向

    Filter入门

    1、创建类,实现filter接口

    public class AFilter implements Filter{}
    

    2、实现init、doFilter、destory方法

       public void init(FilterConfig filterConfig) throws ServletException {}
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
                ServletException {
            chain.doFilter(request, response);//只有过滤器的时候相当于放行
        }
        public void destroy() {}
    

    3、配置web.xml

    1.png

    Filter过滤原理

    1. 服务器启动,调用init()方法创建filter实例对象

    2. 用户每次请求会响应都会调用doFilter()方法

    3. 调用chain.doFilter(request, response),如果只有一个过滤器,相当于放行,如果有多个过滤器,根据web.xml文件配置的顺序依次过滤

    4. 当服务器关闭后,调用destory()方法

    拦截级别

    在web.xml中可以配置过滤器拦截的级别,常用的级别如下:

    <!-- 拦截转发 -->
    <dispatcher>FORWARD</dispatcher>
    <!-- 拦截请求 -->
    <dispatcher>REQUEST</dispatcher>
    <!-- 拦截包含 -->
    <dispatcher>INCLUDE</dispatcher>
    

    Filter的应用

            //强转为子类,因为有更多的方法可以使用
            HttpServletRequest req=(HttpServletRequest)request;
            HttpServletResponse resp=(HttpServletResponse)response;
            //获取请求方式
            String method = req.getMethod();
            if("post".equalsIgnoreCase(method)){//如果是post请求
                req.setCharacterEncoding("utf-8");//进行编码
            }
            resp.setContentType("text/html;charset=utf-8");//所有的响应进行utf-8编码
            chain.doFilter(req, resp);//放行所有编码后的请求和响应
    
    • 权限控制
            HttpServletRequest req=(HttpServletRequest)request;
            HttpServletResponse resp=(HttpServletResponse)response;
            String path=req.getRequestURI();//获取请求地址
            //放过loginservlet和login.jsp
            String op =req.getParameter("op");
            if(path.endsWith("login.jsp")||"login".equals(op)){
                chain.doFilter(request, response);
                return;
            }
            //判断session是否有user对象
            User user=(User)req.getSession().getAttribute("user");
            if(user!=null){
                chain.doFilter(request, response);//如果有就放行
            }else{
                resp.sendRedirect("login.jsp");//如果没有就会登录页面
            }
    

    监听器

    监听器种类

    2.png

    Listener入门

    1、创建类,实现接口

    2、重写方法

    3、web.xml配置

    3.png

    相关文章

      网友评论

          本文标题:filterlistener

          本文链接:https://www.haomeiwen.com/subject/njdhdxtx.html