2009-12-18 104 views
2

我在尋找幫助/建議,使用PHP include + switch功能創建簡單的JSP網站。簡單的JSP網站

目標是我希望能夠在一個主頁面中的多個JSP包含頁面之間切換。

以上'功能'的最簡單可能的形式是什麼?

回答

5

那裏你有<jsp:include>的。您可以使用EL指定page屬性。

創建/WEB-INF/main.jsp文件看起來像:

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>Title</title> 
    </head> 
    <body> 
     <jsp:include page="${page}" /> 
    </body> 
</html> 

您可以控制${page}值與頁面控制器servlet的幫助。喜歡的東西:

public class PageController extends HttpServlet { 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     request.setAttribute("page", "/WEB-INF" + request.getPathInfo()); 
     request.getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response); 
    } 

} 

地圖這個servlet在web.xml如下:

<servlet> 
    <servlet-name>pageController</servlet-name> 
    <servlet-class>com.example.PageController</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>pageController</servlet-name> 
    <url-pattern>/page/*</url-pattern> 
</servlet-mapping> 

這樣,該servlet可以訪問通過http://example.com/context/page/foo.jsp在這個網址例如,它便會從PATHINFO得到/foo.jsp和所設定的page屬性的值爲/WEB-INF/foo.jsp,因此它在EL中可用爲${page},因此jsp:include知道它應該包含什麼。不需要討厭的scriptlet或switch語句。

/WEB-INF/foo.jsp中,您可以像寫入HTML <body>標籤一樣將HTML寫下來。

請注意,JSP文件放置在/WEB-INF中,這樣做是爲了防止通過URL直接訪問,以便用戶無需通過頁面控制器就可以請求它們,例如http://example.com/context/foo.jsp(僅返回部分內容(即將包含的頁面)。

希望這會有所幫助。

+0

比我的更可擴展的解決方案,只是不那麼簡單。 ;)+1 – Drew

+1

免維護:) – BalusC

1

嘗試

<% if (expression1) { %> 
    <%@ include file="file1.jspf" %> 
<% } else if(expression2) { %> 
    <%@ include file="file2.jspf" %> 
<% } %> 

或者,如果你有選擇,請JSF2和/或Facelets的。它具有更強大的模板功能。

+3

Scriptlets不好。使用Java類和taglibs/EL。 – BalusC

+1

不要不同意,但這是解決這個問題的最簡單的方法,IMO。 – Drew