2011-03-31 72 views
0

我想實現的目標是根據請求用戶會話中的某些條件代理請求URI並呈現不同的JSP文件。更改JSP servlet的類加載器(Jasper)

I.e.

用戶A - >請求:/{container}/index.jsp - >返回:{viewA} /index.jsp

用戶B - >請求:/{container}/index.jsp - >返回:{ viewB} /index.jsp

Servlet過濾器沒有足夠的控制來做這種事情。 我想象的將會是重寫JSPServlet的URLClassLoader,這樣我就可以搜索文件[在自定義類加載器中]進行編譯。這是可能的,還是有另一種方式?

我讀了一些與我想要達到的目標有關的內容:http://www.softwaresummit.com/2003/speakers/BergmanTomcat.pdf第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"/> 
<% } %> 

您也可以使用這樣的事情轉發來自一個Servlet過濾器的要求:

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

} 

如果你不希望JSP的頁面直接進行訪問,你可以將它們存儲在不同的WEB-INF下的子目錄。這樣,你可以轉發給他們,但他們不能直接從網絡上獲得。

+0

這不僅僅是重複的index.jsp(它可能是100頁)。每個不同的affilliate將有一個完全不同的設計(但有一個共同的代碼庫)。 – johncc 2011-03-31 14:11:25