过滤器

过滤器

过滤器:在客客户端访问目标资源之前,进行拦截的一个中间组件

作用:对客户端的请求和服务器端相响应的类容进行修改、拦截

过滤器链:多个过滤器针对同一个请求或响应生效。

请求过滤1 2 3;响应过滤 3 2 1

1 2 3 (过滤器链)的顺序与(web.xml文件中映射的先后||使用注解的全类名(包括包名)的字母先后顺序)有关 / 推荐在.xml文件中书写注册映射,不推荐使用注解

过滤器的书写 / filter

//1.开发过滤器需要实现 javax.servlet.Filter接口
    public class FontFilter implements Filter {
        
        //过滤器初始化方法
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}

        //过滤处理的方法
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
            filterChain.doFilter(servletRequest,servletResponse);
            //对请求完成验证、处理后一定要放行,不然请求会直接返回
            HttpSesion sesion = ((HttpServletRequest)servletRequest).getSession();
            //在过滤器中需要把请求对象,响应对象转化为http下的响应与请求,才能获取对应sesion
        }
        
        //过滤器销毁的方法
        @Override
        public void destroy() {}
    }
<!--2.注册和映射和servlet映射相似-->
    <!--注册-->
    <filter>
        <filter-name>过滤器类名</filter-name>
        <filter-class>过滤器类的全路径</filter-class>
    </filter>

    <!--映射-->
    <filter-mapping>
        <filter-name>过滤器类名</filter-name>
        <url-pattern>过滤路径(/* : 表示所有路径)</url-pattern>
    </filter-mapping>
    <!--注册一次,映射多次。与servlet相似-->

<!--或者使用注解@webFilter(name="名字",value="路径")-->

过滤器-请求转发

过滤器默认只对请求有作用,对请求转发无作用

<!--如果需要对请求转发也进行过滤,需要在web.html中进行配置-->
<filter-mapping>
    <filter-name>过滤器类名</filter-name>
    <url-pattern>/过滤地址</url-pattern>
    <!--配置转发过滤-->
    <dispatcher>FORWARD</dispatcher>
        <!--REQUEST(默认) : 只对请求过滤,不过滤转发-->
        <!--FORWARD : 只过转发,不过滤请求->
</filter-mapping>    

其他

  1. 路径映射:在请求的路径前加上一层,在后台的处理可以对一类路径进行处理

    路径: /vip/one /vip/two 处理:/vip/*

posted @ 2020-04-26 18:47  是非_大道克己  阅读(198)  评论(0编辑  收藏  举报