如何配置javaWeb日记拦截器Filter



如何配置javaWeb日记拦截器,jsp拦截器的实现,web.xml配置拦截器,Filter_Log.java文件实例,记录获取执行前的时间、获取访问的URI、 根据执行前时间和执行后时间获取消耗的总时间,简单的Filter实例:

Filter_Log.java文件源码:

package com.cn.filter;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;

import com.sun.org.apache.commons.logging.Log;
import com.sun.org.apache.commons.logging.LogFactory;

public class Filter_Log implements Filter {
// 声明一个Log对象
private Log log = LogFactory.getLog(this.getClass());
// 声明一个filterName变量,用来表示当前Filter名称
private String filterName;


public void init(FilterConfig config) throws ServletException {
// 获取 Filter名称 ,赋值给filterName变量
filterName = config.getFilterName();
// 设置启动时记录日志
log.info(“启动 Filter: ” + filterName);
}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//把ServletRequest对象强转成HttpServletRequest对象
HttpServletRequest request = (HttpServletRequest) req;
//把ServletResponse对象强转成ServletResponse对象
HttpServletResponse response = (HttpServletResponse) res;
// 获取执行前的时间
long startTime = System.currentTimeMillis();
//获取访问的URI
String requestURI = request.getRequestURI();
// 获取request请求中的所有的地址栏参数
requestURI = request.getQueryString() == null ? requestURI
: (requestURI + “?” + request.getQueryString());
//调用doFilter方法,执行下一个Filter或者Servlet
chain.doFilter(request, response);
//获取执行后的时间
long endTime = System.currentTimeMillis();
// 根据执行前时间和执行后时间获取消耗的总时间
log.info(request.getRemoteAddr() + ” 访问了 ” + requestURI + “, 总用时 ”
+ (endTime – startTime) + ” 毫秒。”);
}

public void destroy() {
// 销毁时记录日志
log.info(“关闭 Filter: ” + filterName);
}
}

web.xml配置日记拦截器文件:

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.5″
xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”>
<filter>
<filter-name>Chanise</filter-name>
<filter-class>com.cn.filter.ChiniseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Chanise</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Log4j</filter-name>
<filter-class>com.cn.filter.Filter_Log</filter-class>
</filter>
<filter-mapping>
<filter-name>Log4j</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>