2011-03-31 2 views
0

달성하고자하는 것은 요청 URI를 프록시하고 요청 사용자 세션의 일부 조건에 따라 다른 JSP 파일을 렌더링하는 것입니다.JSP 서블릿 (Jasper)의 클래스 로더 변경

e.e.

사용자 A -> 요청 : /{container}/index.jsp -> 반환 : {viewA}

하여 B /index.jsp -> 요청 : /{container}/index.jsp -> 반환 : { viewB} /index.jsp

서블릿 필터에는 이런 종류의 작업을 수행 할 수있는 제어 권한이 없습니다. 내가 컴파일 할 수있는 [사용자 정의 클래스 로더의] 파일을 검색 할 수 있도록 JSPServlet의 URLClassLoader를 재정의하는 것이 좋을 것이라고 생각합니다. 이것이 가능합니까 아니면 다른 방법입니까?

나는 여기서 습득하려고하는 것에 관련된 것을 읽었습니다 : http://www.softwaresummit.com/2003/speakers/BergmanTomcat.pdf pp 10 그러나 실제로 작동하지 않습니다 (확장 HttpJspBase는 아무 것도주지 못합니다).

나는이 [오히려 가난한] 이미지의 흐름을 설명하기 위해 시도했다 : 좀 더 올바른 방향이 아닌 완벽한 솔루션의 조종을 찾고 있어요

http://80.68.91.73/pageflow.png

. 문제는 원하는 키워드를 찾을 수 없다는 것입니다.

감사합니다.

답변

0

이것은 당신이 요청,하지만 당신은 하나의 index.jsp를 다른 하위 페이지에 요청을 전달하도록 앞으로 태그를 사용을 가진 것으로 간주 한 내용을 정확히하지?

<% if(session.someCondition) { %> 
    <jsp:forward page="index-version1.jsp"/> 
<% } else { %> 
    <jsp:forward page="index-version2.jsp"/> 
<% } %> 

또한이 같은 것을 사용하여 서블릿 필터에서 요청을 전달할 수 있습니다 당신은 JSP-페이지에 직접 액세스 할 수 싶지 않은 경우에 당신은 다른에 저장할 수

FilterConfig filterConfig; 

public void init(FilterConfig filterConfig) { 
    this.filterConfig = filterConfig; 
} 

public void doFilter(..) { 

    filterConfig.getServletContext().getRequestDispatcher(<insert path to correct version of your page here>).forward(request, response); 

} 

을 하위 디렉토리는 WEB-INF 아래에 있습니다. 그렇게하면 전달할 수는 있지만 웹에서 직접 도달 할 수는 없습니다.

+0

중복되는 index.jsp (100 페이지 일 수 있음)가 아닙니다. 각기 다른 affilliate는 완전히 다른 디자인을 갖습니다 (단 하나의 공통 코드베이스를 가짐). – johncc