对web.xml当中filter的init-param的当前路径的测试

这两天一直在设法实现使用过滤器处理日志记录。

我们知道,对于客户端的每一个request,web容器都会根据web.xml的配置内容,先使用配置的filter进行处理,然后交付到对应的controller去处理。

我这里想实现的就是,利用web.xml里面配置的filter。首先,记录来访者的IP和要访问的资源。然后,再把request交付给对应的controller去处理,实现来访信息记录。

其中,日志功能使用了log4j对应的jar:slf4j-api.jar和slf4j-log4j.jar两个。

编写的filter的代码如下:

package test;

import org.apache.log4j.*;

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

/**
 * Created with IntelliJ IDEA.
 * Date: 13-7-6
 * Time: 上午10:34
 * To change this template use File | Settings | File Templates.
 */
public class Filter_Log implements Filter {
    //declare a object of Log
    private Logger log = LogManager.getLogger(this.getClass());
    //declare a variable named fileName, to represent the name of the current Filter
    private String fileName;
    public void init(FilterConfig config) throws ServletException {
        // get the name of Filter, and assigned to filterName
        fileName = config.getInitParameter("logDate");
//        String realPath = config.getServletContext().getRealPath(fileName);
        System.out.print(fileName);
        FileAppender fileAppender = null;
        SimpleLayout simpleLayout = new SimpleLayout();
        //set to load log when start
        try {
            fileAppender = new FileAppender(simpleLayout,fileName,true);
            log.addAppender(fileAppender);
            log.setLevel((Level)Level.DEBUG);
            log.info("start Filter bla bla bla "+fileName);
        } catch (IOException e) {
            System.out.print("error exists!!!!bla bla");
            log.error("file not found",e);
        }
        log.info("start Filter: bla bla bla  "+fileName);
    }
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException{
        //
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        long startTime = System.currentTimeMillis();
        String requestURI = request.getRequestURI();
        requestURI = request.getQueryString() == null ?requestURI:(requestURI + "?" + request.getQueryString());
        chain.doFilter(request,response);
        long endTime = System.currentTimeMillis();
        log.info(request.getRemoteAddr() + " access " + requestURI + ", total time is " + (endTime - startTime) + " millionseconds");
    }
    public void destroy (){
        log.info("close filter: alb alb alb "+fileName);
    }
}

在web.xml中的配置如下:
 <filter>
        <filter-name>Log</filter-name>
        <filter-class>test.Filter_Log</filter-class>
        <init-param>
            <param-name>logDate</param-name>
            <param-value>LogDate.txt</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Log</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

然后,编写一个前台页面index.jsp.。内容随意了。

现在,问题来了:LogDate.txt文件到底在哪里????

答案是:你的JVM的bin目录下。这个还望大神们给个解释,小弟这厢有礼了!!!

另外,如果web.xml里面配置的是/LogDate.txt的话。LogDate.txt文件又是在哪里呢

答案是:你的C盘根目录。同志们,有疑问的可以自己实践一下!!!

个人配置如下:

OS:windows  XP SP2

web容器:Apache Tomcat/7.0.27

IDE:Intellij IDEA12.1.3

别的配置信息,就木有值得一提的了。

PS:当前的所有测试是在Intellij IDEA12.1.3中直接运行本地tomcat7.0服务器,并部署项目时的测试结果。


实际部署在tomcat服务器上的时候

当把项目文件拷贝到tomcat的webapps\XXX\中时,

  1. <init-param>
                <param-name>logDate</param-name>
                <param-value>LogDate.txt</param-value>
            </init-param>

    此时,LogDate.txt是在tomcat的bin所在的那层目录
  2. <init-param>
                <param-name>logDate</param-name>
                <param-value>/LogDate.txt</param-value>
            </init-param>

    此时LogDate.txt是在当前盘符的根目录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值