2011-09-27 100 views
0

我是JSP的初學者。在爲示例場景開發Web應用程序時,我遇到了這個微妙之處。針對不同登錄角色的不同頁面

我有以下網頁:

  • 的index.jsp
  • 的login.jsp(與LoginServlet.java)
  • account.jsp

爲了便於代碼重用我將所有的頁面分爲3部分 - 菜單標題,內容,頁腳。

對於上述所有頁面,菜單頁眉和頁腳保持不變,只有內容發生更改。 因此,我創建了menuandheader.jsp和footer.jsp以包含在每個頁面中。 index.jsp =(menuandheader.jsp + content + footer.jsp)

現在我有5個不同的用戶角色,因此,5個不同的索引和帳戶頁面。 (對於這些頁面,只有內容區域發生變化)。

我爲LoginServlet.java創建了一個Filter類,它負責驗證並將相應的頁面名稱存儲爲請求屬性。 (index1.jsp的角色#1等等)現在LoginServlet.java的唯一內容是

dispatch = request.getRequestDispatcher(request.getAttribute("page").toString()); 
dispatch.forward(request, response); 

但這種做法,我需要有5幾乎相同指數和帳戶頁。有沒有更好的方法來處理這種情況?

回答

0

讓我們先來看看你的方法的缺點

  1. 如果要添加新role然後,你需要開發/構建/部署
  2. 你緊緊coupling您的業務需求(基於角色的訪問)到您的實施導致實施更改要求

我會說一個更好的方法是解決手頭的問題(即限制基於用戶角色的資源訪問)。你可以在許多方面做到這一點,這是你能解決這個問題的一個方法

  1. 保持一個index.jsp頁面
  2. 基於角色訪問限制,如果是內容或超鏈接到不同的資源只是隱藏它(你可以做到這一點簡單的jsp標籤)
  3. 你也可以使用一個框架(springstrutsjsf等)benfit,他們提供良好的MVC實施
  4. 在指數。JSP,你可以做一些這樣的事情,我用簡單的JSTL標籤的例子

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    
    <c:if test="${role.admin == true}"> 
        only admin could see this content 
    </c:if> 
    
    <c:if test="${role.supervisor == true}"> 
    <a href="">only supervisor's link</a> 
    </c:if> 
    
        every one can see this content 
    

我只是給你一個簡單的方法來解決這個問題,我先給你選擇什麼最好的辦法根據您的要求,我會說保持實施鬆散耦合,並容易擴展。

+0

謝謝你爲我的小應用程序。我會去JSTL標籤。 – John

0

您可以在index.jsp中編寫一個開關,以根據servlet返回的參數動態生成或包含已更改的部分。

相關問題