2010-02-11 2 views
2

<jsp:include>을 사용하여 중첩 된 간단한 JSP를 사용하는 레거시 응용 프로그램을 만들고 있습니다.렌더링되는 JSP 페이지를 결정하는 방법은 무엇입니까?

프레임 워크가 사용되지 않습니다. JSP 서블릿과 필터 만 사용됩니다.

아무도 렌더링되는 JSP 페이지를 추적하는 방법을 제안 할 수 있습니까?

아마도 로그가 있거나 렌더링 엔진 (Jasper)에 훅이있을 수도 있습니다.

답변

2

url-pattern*.jspINCLUDE 디스패처 만 수신하는 필터를 만듭니다.

<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()에 의해 상위 페이지를 확인하고 키 javax.servlet.include.servlet_pathHttpServletRequest#getAttribute()로 페이지를 포함 :

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); 
}