JavaWeb之过滤器

1.过滤器的概念

        顾名思义就是过滤的器具,主要的作用就是过滤。让满足条件的通过,对不满足条件的进行处理。例如初中化学中的,通过漏斗加滤纸过滤干净的水,干净的水可以通过(匹配规则),但是杂质就被过滤出来了(不匹配规则),然后就是对这些杂质进行处理。是将这些杂质放到水中继续是做实验(相当于过滤器中的放行),还是倒到其他地方(相当于过滤器中的重定向到其他资源或界面)

        1.1 过滤器在实际项目中的应用场景:

                                        1.对用户请求进行统一认证

                                        2.编码转换

                                        3.对用户发送的数据进行过滤替换

                                        4.转换图像格式

                                        5.对响应的内容进行压缩

2.过滤器的工作原理

        首先web容器被加载时,过滤器也随之被加载。

然后用户请求经过 过滤器,匹配过滤器的规则,如果匹配规则那么过滤器将用户请求发送到web资源,web资源处理请求,并响应给过滤器,过滤器再将web资源的响应发送给用户。

如果不匹配则进行处理则对资源进行处理,重定向或则跳转到其他资源(或者直接return;)

3.过滤器的生命周期

          1.实例化:容器被加载的同时,过滤器也被实例化

           2.init():进行初始化操作,加载一些资源文件等等。(只执行一次)

           3.doFilter():进行过滤操作,对用户请求进行过滤,匹配规则的放行,否则进行拦截,并对请求进行处理(重定向等操作)                                      (可以执行多次)

           4.destroy():销毁操作,web容器关闭,或者web重新启动时执行。主要对资源进行释放。(只执行一次)

4.过滤器在web中配置

     <filter>

       <filter-name>Filter</filter-name>

       <filter-class>com.abc.filter.TestFilter</filter-class>

    </filter>

    <filter-mapping>

       <filter-name>Filter</filter-name>    //filtername必须和上面的filtername相同

       <url-pattern>/*</url-pattern>(/*表示对于任意请求)
       
    </filter-mapping>

5.过滤器链

        执行顺序:

            按照过滤器在web.xml文件中注册时的顺序,先注册的先执行。

            

  如有版权问题,请在下方留言告知我,谢谢!

        执行原理:

            web容器根据Filter在web.xml文件的注册顺序执行,当执行第一个Filter的doFilter(), web服务器会创建一个FilterChain代表Filter链并传递给doFilter方法。在doFilter方法中,如果开发人员调用了FilterChain的doFilter方法,则FilterChain会检测是否有下一个Filter,如果有则将请求传递到下一个Filter。如果没有 则 请求到达web资源处

6.过滤器过滤类型选择:

    过滤器默认过滤的类型是:request。要想过滤其它的需要在web.xml中配置
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>*.action</url-pattern>
        <dispatcher>REQUEST</dispatcher>        //对request过滤
        <dispatcher>FORWARD</dispatcher>     //对forward过滤
        <dispatcher>INCLUDE</dispatcher>      //对include过滤
        <dispatcher>ERROR</dispatcher>         //对errort过滤
    </filter-mapping>

7.过滤器的异步实现

    <filter-mapping>的特殊参数-dispatcher:

    此参数根据配置不同,支持不同类型的请求,可配置多个。

    REQUEST(默认值):从客户端直接请求过来会走这个过滤器,直接请求或redirect.sendRedirect("url");。
    FORWEARD:通过dispatcher的forward方法会走这个过滤器。request.getdispatcher("url").forward(request,response);或使用jsp指令 jsp:forward。
    INCLUDE:通过dispatcher的include()方法会走这个过滤器。request.getdispatcher("url").include(request,response);或使用jsp指令 jspinclude。
    ERROR:通过web.xml中<error-page>过来的请求会走这个过滤器。
    ASYNC(Servlet3.0添加了对另一种值的支持:异步处理)。原有的servlet需要处理完业务逻辑再相应,现在会开启另外一个线程单独处理业务逻辑,servlet线程委托其他线程处理业务逻辑,自己在不生成响应的情况下返回至容器,提高并发访问速度,减少服务器资源的占用。
 

Servlet3.0增加了对注解的支持,可以通过注解配置,不用在web.xml中配置。需要配合支持Tomcat7.0以上容器(支持servlet3.0)。

详细的讲解请看:https://www.cnblogs.com/douJiangYouTiao888/p/6473936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值