JSP 过滤器

2018-03-20 13:59 更新

JSP教程 - JSP过滤器


JSP过滤器是可用于拦截来自客户端的请求或处理来自服务器的响应的Java类。

过滤器可用于执行验证,加密,日志记录,审核。

我们可以将过滤器映射到应用程序部署描述符文件web.xml中的JSP名称或URL模式。

过滤器按照在部署描述符中声明的顺序执行。

过滤器是实现javax.servlet.Filter接口的Java类。

javax.servlet.Filter接口定义了三个方法:

方法描述
doFilter(ServletRequest,ServletResponse,FilterChain)当请求/响应对通过链时由容器调用。
init(FilterConfig filterConfig)指示正在投入使用的过滤器。
void destroy()向过滤器指示其正在被停止服务。

例子

以下代码显示如何创建打印IP地址的JSP过滤器。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
public class LogFilter implements Filter  {
   public void  init(FilterConfig config) 
                         throws ServletException{
      String testParam = config.getInitParameter("test-param"); 
      System.out.println("init");
   }
   public void  doFilter(ServletRequest request, 
                 ServletResponse response,
                 FilterChain chain) 
                 throws java.io.IOException, ServletException {
 
      String ipAddress = request.getRemoteAddr();
      System.out.println("IP "+ ipAddress);
 
      chain.doFilter(request,response);
   }
   public void destroy( ){
      System.out.println("destroy");
   }
}

编译LogFilter.java并将LogFilter.class类文件放在<Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。

在部署描述符文件web.xml中为过滤器标记创建以下条目:

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
    <param-name>your-param</param-name>
    <param-value>Initialization Parameter</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

上面的过滤器将应用于所有的JSP,因为我们在我们的配置中指定了 /*

多个过滤器

web.xml中的过滤器映射元素的顺序确定Web容器将过滤器应用于servlet或JSP的顺序。

以下代码显示如何在web.xml文件中使用两个过滤器。

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
    <param-name>test-param</param-name>
    <param-value>Initialization Parameter</param-value>
   </init-param>
</filter>
 
<filter>
   <filter-name>MyFilter</filter-name>
   <filter-class>MyFilter</filter-class>
   <init-param>
    <param-name>test-param</param-name>
    <param-value>Initialization Parameter</param-value>
   </init-param>
</filter>
 
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

要从上面的web.xml中反转过滤器顺序,请使用以下命令:

<filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号