2011-03-18 19 views
1

我在一個巨大的jsp/servlet項目上工作,它有一個模板系統,它相當複雜(很難指出哪些jsp文件被導入,因爲它基於所選模板和其他一些參數) 。當我使用網絡瀏覽器測試站點時,我想確定哪個jsp文件正在運行,而無需向大量jsp文件添加調試信息。我怎麼能這樣做?任何詭計? 順便說一句,我使用eclipse和tomcat。識別哪個JSP文件正在運行

回答

2

創建其被映射一個Filter如下

<filter-mapping> 
    <filter-name>yourFilterName</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 

並在doFilter()方法做大致以下作業。

String requestURI = ((HttpServletRequest) request).getRequestURI(); 
String forwardURI = (String) request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI); 
String includeURI = (String) request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI); 

if (includeURI != null) { 
    System.out.println("JSP included: " + includeURI); 
} else if (forwardURI != null) { 
    System.out.println("JSP forwarded: " + requestURI); // No, not forwardURI! 
} else { 
    System.out.println("JSP requested: " + requestURI); 
} 

chain.doFilter(request, response); 
+0

感謝您的回答。儘管servlet-api.2.4.jar位於我的lib上,但無法解析RequestDispatcher.FORWARD_REQUEST_URI和RequestDispatcher.INCLUDE_REQUEST_URI。我已經導入了javax.servlet.RequestDispatcher。 – 2011-03-18 15:54:59

+0

不客氣。 ServletContainer特定的庫不在'/ WEB-INF/lib'中。項目,目標運行時和web.xml必須設置爲至少一個兼容Servlet 2.3的版本(即在引入「Filter」時)。最好將其設置爲目標運行時支持的最高值。另一種方法是對這些值進行硬編碼。查看Javadoc中的常量字段值。 – BalusC 2011-03-18 15:55:51

+0

再次感謝。我解決了這個問題。這些靜態常量附帶Servlet 3.0規範。至少需要Tomcat 7。 – 2011-03-18 19:40:32