以下示例显示了每次访问任何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中。
定义过滤器,然后将其映射到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记录器在单独的文件上方记录日志。