如何在JSP中使用过滤器?

以下示例显示了每次访问任何JSP文件时,如何打印客户机的IP地址和当前日期时间。该示例将使您对JSP过滤器有基本的了解,但是您可以使用相同的概念编写更复杂的过滤器应用程序-

// Import required java libraries
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");
      //打印init参数
      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( ) {
      /* Called before the Filter instance is removed
      from service by the web container*/
   }
}

以通常的方式编译LogFilter.java并将LogFilter.class文件放入<Tomcat安装目录> / webapps / ROOT / WEB-INF / classes中

Web.xml中的JSP筛选器映射

定义过滤器,然后将其映射到URL或JSP文件名,其方式与定义Servlet并随后将其映射到web.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>

上面的过滤器将应用于所有servlet和JSP,因为我们在配置中指定了/ *。如果只想在几个servlet或JSP上应用过滤器,则可以指定特定的servlet或JSP路径。

现在尝试调用任何servlet或JSP,您将在Web服务器日志中看到生成的日志。您可以使用Log4J记录器在单独的文件上方记录日志。