什么是Filter?依据字面上的意思是过滤器。很多时候会利用它,例如:在线游戏、web聊天室或E-mail等等,可以利用Filter来过滤不雅字句或者拒绝对象的信息或信件。当用户的请求到达指定的页面之前,可以借助过滤器(Filter)来改变这些请求内容;同样地,当执行结果要响应道用户之前,若先经过过滤器,就可以修改输出的内容。
Filter的运行方式 |
Filter的运行方式如同一层接一层,一直从最外面的的filter做到最里面的原始网页,然后再把响应一层一层传送出去,最后产生回传结果给用户。但是Filter也不是只能乖乖照这个顺序传送,首先Filter必须使用doFilter()才可以继续传到下一个Filter,因此可以选择某种条件下让Filter不要调用doFiler(),而通过其他方法转向到其他页面。Filter主要可以通过RequestDispatcher的forward()、include()或HttpServletResponse的sendRedirect()、sendError()等方法来转向到其他网页的动作。
我们可以在web.xml中使用<dispatcher>元素,用来设定Filter所对应的请求方式。他有四种设定,分别是request、forward、include、error。图【5-1】描述了Filter的运行方式。
1、Request
当用户直接对网页做出请求的动作时,才会调用此Filter。
2、Forward
当用户的请求是通过RequestDispatcher的forward()方法时,才调用此Filter其他请求不会调用此filter
3、include
当用户的请求时通过RequestDispatcher的include()方法时,才会调用此Filter其他请求不会调用此filter。
4、Error
当用户的请求时通过错误机制处理的时候,才会调用此filter,同样,其他请求不会调用此filter。
下面简单看一下Filter在web.xml中的配置情况
<filter>
<filter-name>test</filter-name>
<filter-class>com.filterbo.FilterTest</filter-class>
</filter>
<filter-mapping>
<filter-name>test</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
+