JSP 过滤器

ServletJSP中的过滤器都是Java类,它们存在的目的如下:

· 在请求访问后端资源时拦截它

· 管理从服务器返回给客户端的响应

下面列出了多种常用的过滤器类型:

· 认证过滤器

· 数据压缩过滤器

· 加密过滤器

· 触发资源访问事件的过滤器

· 图像转换过滤器

· 登录和验证过滤器

· MIME类型链过滤器

· 令牌过滤器

· 转换XML内容的XSL/T过滤器

过滤器将会被插入进web.xml文件中,然后映射servletJSP文件的名字,或URL模式。部署描述文件web.xml可以在 <Tomcat-installation-directory>\conf 目录下找到。

JSP容器启动网络应用程序时,它会创建每一个过滤器的实例,这些过滤器必须在部署描述文件web.xml中声明,并且按声明的顺序执行。

 

Servlet过滤器方法

一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:

序号

方法 &描述

1

public void doFilter (ServletRequest, ServletResponse, FilterChain)

每当 request/response要通过过滤链时容器会调用这个方法,因为客户端请求链尾的资源

2

public void init(FilterConfig filterConfig)

容器调用这个方法来表明一个过滤器被安置在服务中

3

public void destroy()

容器调用这个方法来表明一个过滤器正在从服务中移除

 

JSP过滤器示例

这个例子将会打印IP地址和每次访问JSP文件的日期时间。当然,这只是个简单的例子,让您了解一些简单的过滤器用法,但是可以使用这些概念来自行构造更复杂的程序。

//  引入Java包import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*; // 实现 Filter 类public class LogFilter implements Filter  {   public void  init(FilterConfig config)                          throws ServletException{      // 获取初始化参数      String testParam = config.getInitParameter("test-param");        //打印初始化参数      System.out.println("Test Param: " + testParam);    }   public void  doFilter(ServletRequest request,                  ServletResponse response,                 FilterChain chain)                  throws java.io.IOException, ServletException {       // 获取客户端ip地址        String ipAddress = request.getRemoteAddr();       // 输出ip地址及当前时间      System.out.println("IP "+ ipAddress + ", Time "                                       + new Date().toString());       // 传递请求道过滤器链      chain.doFilter(request,response);   }   public void destroy( ){      /* 在Filter实例在服务器上被移除前调用。*/   }}

编译LogFilter.java文件,然后将编译后的class文件放在<Tomcat安装目录>/webapps/ROOT/WEB-INF/classes目录下。

 

web.xml文件中的JSP过滤器映射

过滤器被定义,然后映射成一个URLJSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用<filter>标签来进行过滤器映射: 

<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>

上述过滤器将会应用在所有servletJSP程序中,因为我们在配置中指定了" /*"。您也可以指定一个servletJSP路径,如果您只想要将过滤器应用在少数几个servletJSP程序中的话。

现在,像平常一样访问servletJSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J记录器来把日志记录在其它文件中。

 

使用多重过滤器

您的网络应用程序可以定义很多不同的过滤器。现在,您定义了两个过滤器,AuthenFilterLogFilter,其它的步骤与前面讲的一样,除非要创建一个不同的映射,就像下面这样:

<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>元素的映射顺序决定了容器应用这些过滤器的顺序。要反转应用的顺序,您只需要反转web.xml<filter>元素的定义顺序就行了。

比如,上面的例子会首先应用 LogFilter然后再应用AuthenFilter,但是下面这个例子将会反转应用的顺序:

<filter-mapping>   <filter-name>AuthenFilter</filter-name>   <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping>   <filter-name>LogFilter</filter-name>   <url-pattern>/*</url-pattern></filter-mapping>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值