对web.xml当中filter的init-param的当前路径的测试
2013-07-09 17:49
330 查看
这两天一直在设法实现使用过滤器处理日志记录。
我们知道,对于客户端的每一个request,web容器都会根据web.xml的配置内容,先使用配置的filter进行处理,然后交付到对应的controller去处理。
我这里想实现的就是,利用web.xml里面配置的filter。首先,记录来访者的IP和要访问的资源。然后,再把request交付给对应的controller去处理,实现来访信息记录。
其中,日志功能使用了log4j对应的jar:slf4j-api.jar和slf4j-log4j.jar两个。
编写的filter的代码如下:
在web.xml中的配置如下:
然后,编写一个前台页面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\中时,
此时,LogDate.txt是在tomcat的bin所在的那层目录下
此时LogDate.txt是在当前盘符的根目录下
我们知道,对于客户端的每一个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\中时,
<init-param> <param-name>logDate</param-name> <param-value>LogDate.txt</param-value> </init-param>
此时,LogDate.txt是在tomcat的bin所在的那层目录下
<init-param> <param-name>logDate</param-name> <param-value>/LogDate.txt</param-value> </init-param>
此时LogDate.txt是在当前盘符的根目录下
相关文章推荐
- web.xml设置编码格式---在filter 过滤并设置当前要设置的编码格式
- web.xml中在Servlet中获取context-param和init-param内的参数
- web.xml之context-param,listener,filter,servlet加载顺序及其周边
- servlet中配置文件web.xml中的参数context-param和init-param区别
- Servlet容器中web.xml配置<context-param>与<init-param>
- web.xml之<context-param>与<init-param>的区别
- web.xml之<context-param>与<init-param>的区别与作用++ springMVC
- web.xml中context-param,listener,filter,servlet加载顺序
- web.xml中在Servlet中获取context-param和init-param内的参数
- web.xml 中的<context-param>与<init-param>的区别与作用
- Servlet中web.xml 文件参数 context-param 与 init-param的区别
- web.xml 中的context-param 、listener、 filter、servlet 加载顺序及其详解
- servlet中配置文件web.xml中的参数context-param和init-param
- web.xml里<init-param>报错
- servlet中配置文件web.xml中的参数context-param和init-param区别
- web.xml 中的context-param 、listener、 filter、servlet 加载顺序及其详解
- web.xml中在Servlet中获取context-param和init-param内的参数
- web.xml文件中context-param、listener、filter、servlet的执行顺序
- web.xml的初始化参数:context-param,init-param 推荐
- web.xml加载顺序:context-param --> listener --> filter --> servlet