我想将请求和响应的日志记录添加到我在Tomcat6中运行的Java webapp中。我的webapp提供由servlet生成的静态文件和动态内容的混合。我只想记录由servlet处理的请求和响应。
我认为实现日志记录的最好方法是使用过滤器来捕获传入的HttpServletRequest,并包装HttpServletResponse以允许捕获响应内容。
有没有办法在Tomcat过滤器中判断哪个servlet将处理传入的HttpServletRequest?到目前为止,我得到的最好的想法是解析web.xml文件,并提取从元素到servlet的映射。然后,我可以检查传入请求的路径,以确定哪个servlet将处理它。如果它不是Tomcat的DefaultServlet,那么我会记录该请求。
这感觉有点笨拙,因为Tomcat已经完成了对web.xml的所有解析,所以我希望有某种现有的应用程序接口来查询解析后的信息。
发布于 2011-04-03 03:51:42
我正在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>我希望这能起作用。我也在做过滤器;所以如果它不让我知道,我会花更多的时间去研究它,因为我无论如何都要做这样的事情……
https://stackoverflow.com/questions/5523351
复制相似问题