如何识别非静态tomcat请求

时间:2011-04-02 13:10:19

标签: java tomcat logging

我想添加对我在Tomcat 6中运行的Java webapp的请求和响应的记录。我的webapp提供静态文件和servlet生成的动态内容的混合。我只想记录由我的servlet处理的请求和响应。

我认为实现日志记录的最佳方法是使用Filter来捕获传入的HttpServletRequest并包装HttpServletResponse以允许捕获响应内容。

有没有办法在Tomcat过滤器中告诉哪个servlet将处理传入的HttpServletRequest?到目前为止,我最好的想法是解析web.xml文件并提取从元素到servlet的映射。然后,我可以检查传入请求的路径,以确定哪个servlet将处理它。如果它不是Tomcat DefaultServlet,那么我会记录请求。

这感觉有点尴尬,因为Tomcat已经完成了对web.xml的所有这些解析,所以我希望有一些现有的API来查询解析的信息。

1 个答案:

答案 0 :(得分:1)

我正在研究Tomcat 7;虽然servlet 3.0 api的新注释可能会使这更容易;你应该仍然可以在Tomcat 6上做你正在谈论的事情。因为你已经有了过滤的基本概念我不会介绍,但是你应该能够以这样的方式声明你的过滤器映射:它们只适用于特定的servlet。查看示例中的web.xml,我找到了here

<filter>
   <display-name>Filter1</display-name>
   <filter-name>Filter1</filter-name>
   <filter-class>Filter1</filter-class>
 </filter>

 <filter-mapping>
   <filter-name>Filter1</filter-name>
   <url-pattern>/Filter1</url-pattern>
 </filter-mapping>

 <filter-mapping>
   <filter-name>Filter1</filter-name>
   <!-- declaring which servlet to filter here...... -->
   <servlet-name>Servlet1</servlet-name>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
   <dispatcher>INCLUDE</dispatcher>
   <dispatcher>ERROR</dispatcher>
 </filter-mapping>

我希望有效。我也在研究过滤器;所以,如果它不让我知道,我会花更多的时间来研究它,因为我必须做这样的事情......