2011-12-12 56 views
1

我有一個servlet響應一個URL,然後轉發到一個典型的MVC模式的JSP。JSP包括一個私有Servlet

許多頁面共享相同的頁面頭部所以在JSP有一個包括以head.jsp

head.jsp放在WEB-INF的內部,使得它不能被直接訪問。

現在我發現我需要添加一些控制頭。而不是轉發到WEB-INF/head.jsp並將scriptlet放入,我想轉發到servlet。

如何從JSP轉發到servlet而不將該servlet映射到URL,因爲我不想直接訪問此servlet。

或者換句話說,是否存在一個與WEB-INF相當的servlet來隱藏它直接訪問?那麼這個servlet只能通過include來調用?

回答

1

而不是轉發到WEB-INF/head.jsp並將腳本放入,我想轉發到一個servlet。

確實可以做到這一點(使用<jsp:include>或調度的小腳本),但我不確定這是否是最好的方法。 Servlet將直接寫入響應,或者將一些數據放入請求範圍中,以便JSP稍後可以選取。

直接寫回應答今天有點爭議,而另一種方法根本不需要Servlet。

慣用的方法是使用一些包含邏輯的幫助器bean。您提到的原始Servlet可以將此Bean放入請求範圍,或者您可以使用<jsp:usebean>標記。引用輔助bean通過表達式語言或非常簡單的scriptlet準備的數據。

那麼這個servlet只能通過include調用嗎?

如果你仍然想走這條路,可能有固定的Servlet後面的角色,然後給head.jsp的一個選項,一個運行在web.xml中的角色:

<servlet> 
    <servlet-name>headInclude</servlet-name> 
    <jsp-file>/WEB-INF/head.jsp</jsp-file> 
    <run-as> 
     <role-name>SYSTEM</role-name> 
    </run-as> 
</servlet> 

免責聲明:我從來沒有嘗試過這個,只是指出了一個可能的方向。

+0

感謝您的豆建議,我認爲我需要給整個設計多一些認爲它只是感覺不對,但我不知道爲什麼。 – user1055212

+0

您可能還想看看一些現有的MVC框架,如JSF,Wicket,Spring MVC等等,以獲取一些靈感。祝你好運! –