一、 过滤器 Filter
1. why Filter?
针对通用WEB服务、功能,透明的处理
2. 什么是 Servlet Filter?
过滤是 Servlet 2.3 版才引入的新特性。过滤器可以认为是实现 Http 请求、响应以及头信息等内容的传送的代码片断。
过滤器并不能创建响应,但它可以“过滤”传给 servlet 的请求,还可以“过滤”从 servlet发送到客户端的响应;
它不仅能处理静态内容,还可以处理动态内容。换而言之,filter 其实是一个“servlet chaining”(servlet 链)。
一个 filter 包括:
1) 在 servlet 被调用之前截获;
2) 在 servlet 被调用之前检查 servlet request;
3) 根据需要修改 request 头和 request 数据;
4) 根据需要修改 response 头和 response 数据;
5) 在 servlet 被调用之后截获.
3. 过滤器的生命周期
Filter 组件的生命周期与 Servlet 的类似。
过滤器有四个阶段(与servlet类似):
1) 实例化;
2) 初始化(调用init()方法);
3) 过滤(调用doFilter()方法);
4) 销毁(调用destroy()方法);
4. Filter编程
1)定义Filter(implements Filter)
2)配置Filter
配置对哪些资源进行过滤(url)
<filter>
<filter-name>Logger</filter-name> //过滤器名
<filter-class>com.LoggerFilter</filter-class> //具体过滤器类
<init-param> //初始化参数
<param-name>xsltfile</param-name>
<param-value>/xsl/stockquotes.xsl</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Logger</filter-name>
<url-pattern>/*</url-pattern> //将过滤器应用于Web应用中的每个Web资源;可以只指定某个资源
</filter-mapping>
5. FilterChain
1) chain是如何配置,顺序
当同一个应用中配置了多个 filter 时,其执行顺序是如何的呢?
答:按 web.xml 中<filter-mapping>的顺序来执行的
2) chain.doFilter(req, resp)
调用下一个Filter,到最后一个Filter则正式调用 TargetServlet
3) 调用过程(类似于递归调用)
6. Filter的类型
Filter 有4种类型,主要体现在<filter-mapping>中的<dispatcher>属性:
<dispatcher>REQUEST</dispatcher> 默认,客户端的直接的请求,才触发该过滤器
<dispatcher>FORWARD</dispatcher> servlet 调用 rd.forward(req,resp)时触发
<dispatcher>INCLUDE</dispatcher> servlet 调用 rd.include(req,resp)时触发
<dispatcher>ERROR</dispatcher> 发生错误,跳转到错误页面时触发
1. why Filter?
针对通用WEB服务、功能,透明的处理
2. 什么是 Servlet Filter?
过滤是 Servlet 2.3 版才引入的新特性。过滤器可以认为是实现 Http 请求、响应以及头信息等内容的传送的代码片断。
过滤器并不能创建响应,但它可以“过滤”传给 servlet 的请求,还可以“过滤”从 servlet发送到客户端的响应;
它不仅能处理静态内容,还可以处理动态内容。换而言之,filter 其实是一个“servlet chaining”(servlet 链)。
一个 filter 包括:
1) 在 servlet 被调用之前截获;
2) 在 servlet 被调用之前检查 servlet request;
3) 根据需要修改 request 头和 request 数据;
4) 根据需要修改 response 头和 response 数据;
5) 在 servlet 被调用之后截获.
3. 过滤器的生命周期
Filter 组件的生命周期与 Servlet 的类似。
过滤器有四个阶段(与servlet类似):
1) 实例化;
2) 初始化(调用init()方法);
3) 过滤(调用doFilter()方法);
4) 销毁(调用destroy()方法);
4. Filter编程
1)定义Filter(implements Filter)
2)配置Filter
配置对哪些资源进行过滤(url)
<filter>
<filter-name>Logger</filter-name> //过滤器名
<filter-class>com.LoggerFilter</filter-class> //具体过滤器类
<init-param> //初始化参数
<param-name>xsltfile</param-name>
<param-value>/xsl/stockquotes.xsl</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Logger</filter-name>
<url-pattern>/*</url-pattern> //将过滤器应用于Web应用中的每个Web资源;可以只指定某个资源
</filter-mapping>
5. FilterChain
1) chain是如何配置,顺序
当同一个应用中配置了多个 filter 时,其执行顺序是如何的呢?
答:按 web.xml 中<filter-mapping>的顺序来执行的
2) chain.doFilter(req, resp)
调用下一个Filter,到最后一个Filter则正式调用 TargetServlet
3) 调用过程(类似于递归调用)
6. Filter的类型
Filter 有4种类型,主要体现在<filter-mapping>中的<dispatcher>属性:
<dispatcher>REQUEST</dispatcher> 默认,客户端的直接的请求,才触发该过滤器
<dispatcher>FORWARD</dispatcher> servlet 调用 rd.forward(req,resp)时触发
<dispatcher>INCLUDE</dispatcher> servlet 调用 rd.include(req,resp)时触发
<dispatcher>ERROR</dispatcher> 发生错误,跳转到错误页面时触发