2011-04-02 31 views
2

我想添加記錄的請求和響應到我在Tomcat 6中運行的Java Web應用程序。我的web應用程序提供靜態文件和由servlet生成的動態內容的混合。我只想記錄由我的servlet處理的請求和響應。如何識別非靜態tomcat請求

我認爲實現日誌記錄的最佳方法是使用Filter來捕獲傳入的HttpServletRequest幷包裝HttpServletResponse以允許捕獲響應內容。

有沒有辦法告訴Tomcat過濾哪個servlet將處理傳入的HttpServletRequest?到目前爲止,最好的想法是解析web.xml文件並從元素提取映射到servlet。然後,我可以檢查傳入請求的路徑,以確定哪個servlet將處理它。如果它不是Tomcat的DefaultServlet,那麼我會記錄請求。

這感覺有點尷尬,因爲Tomcat已經完成了對web.xml的所有解析,所以我希望有某種現有的API來查詢解析的信息。

+0

信息與Servlet 3可用。但是,這需要tomcat 7 – Bozho 2011-04-02 13:19:29

+0

我被困在Tomcat 6上:( – mchr 2011-04-02 14:08:26

回答

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> 

我希望這樣的作品。我也在過濾器上工作;所以如果它不讓我知道,我會花更多的時間來看看它,因爲我必須做這樣的事情反正......

+0

感謝您的提示 - 我不知道我可以將過濾器映射到servlet,但理想情況下,我想避免必須列出所有的servlet,我的webapp和其他開發者中的一些可能會添加更多,但不知道中的列表。我真正想要的是一種排除特定servlet而不是包含特定servlet的機制 – mchr 2011-04-03 08:28:58

+0

我列出了所有的servlet它不漂亮,但它的作品。 – mchr 2011-04-26 11:44:15