标签:service blank filter 注意 运行 结束 ima 工作 block
与servlet非常类似,过滤器就是java组件,请求发送到servlet之前,可以用过滤器截获和处理清求,另外 servlet结束工作之后,在响应发回给客户之前,可以用过滤器处理响应。
容器根据DD中的声明来确定何时调用过滤器。在DD中,部署人员要建映射。明确对于哪个请求URL模式要调用哪些过滤器。所以,要由部署人员(而不是程序员)来确定哪些请求或响应应当由哪些过滤器处理。
只有一个过滤器接口:Filter,根据使用方式,可完成诸如以下工作:
请求过滤器可以完成:
响应过滤器可以完成:
注意,没有RequestFilter或ResponseFilter之类的接口,只有一个Filter接口。
注意FilterChain接口的doFilter和Filter接口的doFilter()不同。
前者负责明确接下来调用谁的doFilter()方法(若没有Filter则调用servlet的service()方法)。
后者是过滤器的真正方法。
在DD中配置过滤器,会做3件事:
两个规则:
filter元素规则
必须有filter-name
必须有filter-class
init-param可选,可以多个
filter-mapping元素规则
必须有filter-name
url-patter或servlet-name必须有一个
url-pattern元素定义了哪些Web应用资源使用这个过滤器
servlet-name元素定义了哪个servlet使用这个过滤器
2.4版本,允许为通过分派请求的Web资源声明一个过滤器映射,如下:
容器已经实现了HttpServletResponse接口;doFilter()和service()方法就是以这样一个响应作为参数。但是要让这个压缩过滤器正常工作,必须建立我们自己的HttpServletResponse接口定制实现,并把它通过chain.doFilter()调用传递到servlet。而且这个定制实现还必须包含一个定制输出流,因为这正是我们的目标,在servlet写输出之后并且在输出返回给客户之前,过滤器就能拿到这个输出。
创建一个特定版本的请求或响应,这在创建过滤器里实在太常用了,所以Sun创建了4个“便利’类,以便更容易地完成这个任务,我们只需要继承某个包装器类就可以了:
《Head First Servlets & JSP》-13-过滤器和包装器
标签:service blank filter 注意 运行 结束 ima 工作 block
原文地址:http://www.cnblogs.com/myitroad/p/6192537.html