JSP过滤器
-
Servlet和jsp过滤器都是Java类,作用:
- 在请求访问后端资源之前从客户端拦截请求.
- 在响应发送回客户端之前从服务器操作响应
-
过滤器种类
- 身份验证过滤器
- 数据压缩过滤器
- 加密过滤器
- 触发资源访问事件的过滤器
- 图像转换过滤器
- 日志记录和审计过滤器
- MIME类型链过滤器
- Tokenizing过滤器
- 转换xml内容的xsl/t过滤器
-
当服务器启动web应用程序时.它会为每个在部署描述中声明的过滤器创建一个实例,过滤器按照它们在部署描述中声明的顺利执行
-
Servlet过滤器方法
-
public void doFilter (ServletRequest, ServletResponse, FilterChain) 由于客户端在链尾请求响应,每次请求/响应对通过链时,容器会调用此方法。 public void init(FilterConfig filterConfig) 由Web容器调用此方法,向过滤器表明它将被放置在服务中。 public void destroy() 由Web容器调用此方法,向过滤器表明它将从服务中被去掉。
-
-
JSP过滤器实例
-
// Import required java libraries import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // Implements Filter class public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException{ // Get init parameter String testParam = config.getInitParameter("test-param"); //Print the init parameter System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // Get the IP address of client machine. String ipAddress = request.getRemoteAddr(); // Log the IP address and current timestamp. System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // Pass request back down the filter chain chain.doFilter(request,response); } public void destroy( ){ /* Called before the Filter instance is removed from service by the web container*/ } }
-
在web.xml中的jsp过滤器映射
- 首先定义过滤器,然后将过滤器映射到URL或JSP文件的名字中,这几乎与定义Sevlet而案后映射到xml文件的url模式的方式相同,为在部署描述文件的web.xml的过滤器标签创建一下
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
-
多个过滤器-过滤器链
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
过滤器的应用顺序
在web.xml中的filter-mapping元素的顺序决定了web容器应用过滤器到Servlet的顺利,若要反转过滤器的顺序,只需要在web.xml文件中反转mapping元素即可
-
注解代替xml文件
-
@WebFilter(filterName=“encodingFilter”,urlPatterns="/*")
-
package com.kevin.Filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; @WebFilter(filterName="encodingFilter",urlPatterns="/*") public class EncodingFilter implements Filter { String encoding; @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub System.out.println("destroy"); } }
-
-