2010-02-11 60 views
2

我正在使用使用簡單JSP的遺留應用程序,這些JSP使用<jsp:include>嵌套。如何確定正在呈現哪些JSP頁面?

沒有框架被使用 - 只是JSP Servlets和過濾器。

任何人都可以提出一種方法來跟蹤哪些JSP頁面被渲染?

也許在渲染引擎(Jasper)中有一個日誌,或者可能是一個鉤子。

回答

2

創建一個篩選器,該篩選器僅在*.jspINCLUDE調度程序的url-pattern上偵聽。

<filter> 
    <filter-name>includeFilter</filter-name> 
    <filter-class>com.stackoverflow.q2242429.IncludeFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>includeFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 

HttpServletRequest#getServletPath()獲取父頁面和頁面包括通過HttpServletRequest#getAttribute()與關鍵javax.servlet.include.servlet_path

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    throws IOException, ServletException 
{ 
    HttpServletRequest httpreq = (HttpServletRequest) request; 
    String parentPage = httpreq.getServletPath(); 
    String includePage = (String) httpreq.getAttribute("javax.servlet.include.servlet_path"); 
    // Log it here? 

    chain.doFilter(request, response); 
}