标签:
Filter作用示意图:
1.原始架构实现图
2.加入Filter
我们在Tomcat与Servlet之间加入了Filter类,在Web-Info配置中加入匹配规则以及相应配置,即可实现在Tomcat启动时,调用Filter的init方法进行初始化,在客户端进行操作时,对符合规则的操作,则Tomcat自动调用doFilter方法进行拦截处理,类似的道理,我们也可以对response对象进行操作。
<!--Filter配置,与Filter具体实现类对应--> <filter> <!--filter名称--> <filter-name>CharsetEncodingFilter</filter-name> <!--对应具体实现类类--> <filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class> <!--初始化参数,类似于键值对方式存取--> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <!--匹配规则配置--> <filter-mapping> <filter-name>CharsetEncodingFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
前面讨论了单个Filter的具体使用情况,那它具体是怎样体现职责链模式的呢?我们先回顾一下职责链模式的结构图:
职责链模式中,通过Client端设置具体处理者类的上家与下家,通过实现抽象类的抽象方法HandleRequest来具体处理某一个具体情况内的请求,如果不在处理范围内,则调用上家进行处理。
在Filter技术的应用中,Filter接口则对应了Handler抽象类,而我们不必调用SetSuccessor方法,在web.xml中就可以指定Filter的上下级调用关系,因此在doFilter方法中直接调用chain.doFilter方法即可执行继任者的doFilter方法,由此可见,Filter技术是职责链模式的更高级应用的体现。
由以上内容可以看出,Filter与Servlet之间是层层包裹的关系,它通过拦截用户对Servlet的请求来提前或置后处理一些request或response的数据信息。
Filter常用于权限控制、记录日志、转换编码格式、加密等与具体业务处理耦合性不高的功能上,我们可以认为它是一个执行过滤的插件,也可以形象的看作是滤网、过滤器。它提供了一种声明式的服务,具有着可插拔的能力,达到了更好的复用。
Java中Filter、Servlet、Listener的学习
标签:
原文地址:http://blog.csdn.net/lfsfxytgb9_lyg/article/details/43986651