javaweb学习总结(4)---Filter的分类

来源:互联网 发布:淘宝的卡券包在哪里 编辑:程序博客网 时间:2024/06/04 18:06

1、servlet2.5中的Filter分类

在myeclipse中开发web project时,如果选择了j2EE中的javaEE5.0,那么就是servlet2.5

过滤器的分类:REQUEST,FORWARD,INCLUDE,ERROR我们在[javaweb过滤器总结(3)中也提到了dispather](http://blog.csdn.net/jin970505/article/details/78524639)具体请看该篇介绍。

<1>REQUEST类型的Filter:

  用户在直接访问该页面时,将会调用与之相关的Filter。例如:我们在Filter1中设置的URL为/index.jsp,那么我们在访问该页面的时候就会调用该过滤器中的规则,来进行一些拦截等操作。在进行web.xml映射的时候,如果没有指定dispather,那么就会默认为REQUEST。

<2>FORWARD类型的Filter:

 目标资源如果是通过请求转发中的forward方法来访问的话,就会触发这个Filter,当然是用forward动作的话,也会触发。如下图所示的方法:

<3>INCLUDE类型的Filter:

目标资源如果是通过请求转发中的include方法来访问的话,就会触发这个Filter,当然是用include动作的话,也会触发。如下图所示的方法:

**

<4>ERROR类型的Filter:

目标资源是通过声明异常处理机制调用时,过滤器将被调用。
看一个例子:我们如果在访问一个index.jsp时,不小心将index.jsp写错了,那么就会触发一个404错误(页面不可达),这个时候我们就可以写一个ERROR类型的过滤器,只要遇到404错误,就去转向一个页面来告诉用户:“页面不可达,请检查url!”<1>写一个<error-page>:<error-page>    <error-code>404</error-code>    <location>/error.jsp</location></error-page><2>编写<error.jsp>的内容,只要遇到404错误,就会转到error.jsp<3>写ERROR过滤器:选择dispather为ERROR,对error.jsp进行拦截,在doFilter()方法里写一些你想进行的操作,这个方法里你可在后台看到错误,并且进行决定是否“放行”。

servlet3.0中新加的ASYNC

servelet3.0同样支持了注解(@WebFilter)的方式来配置过滤器,同时提供了很多的属性进行配置。而且servlet3.0新增了异步处理的方式进行过滤。

两张图看一下注解方式的使用:

异步过滤器根据过滤器的规则,过滤器得等servlet执行结束才能停止,所以如果servlet执行很久,过滤器得等很久,所以说呢,为了使得过滤器早点执行结束,就让servlet在后台执行,过滤器提前结束,这就是异步过滤器的优点所在@WebServlet(asyncSupported = true, displayName = "/AsyncServlet", urlPatterns={"/servlet/AsyncServlet"})asyncSupported = true 是必须开启用以支持异步@WebFilter(filterName="AsynFilter",asyncSupported=true,value={"/servlet/AsyncServlet"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC})asyncSupported = true 是必须开启用以支持异步dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC}DispatcherType.REQUEST必须要加上,否则过滤器就不会生效了同时注意在过滤的地址和servlet的地址必须相同
阅读全文
0 0
原创粉丝点击