2011-07-05 51 views
2

我有一個複雜的網站設計(從網上下載設計+ CSS),我想巧妙地使用include s,以便我可以將設計與內容分開。Jsp頁面層次

但是,這有些複雜。內容位於<div>內等內 如何使用includes使基本上,我可以在其自己的文件中的每個可重複的網站(標題,導航)方面,併爲每個實際的頁面,在jsp中沒有任何設計?

,即在某個頁面,我只希望有

//possible includes 
<h1>Hello World!</h1> 
//possible includes 
+0

我打算推薦[sitemesh](http://www.opensymphony.com/sitemesh/),它幾乎完全符合您的需求。但是看起來sitemesh背後的團隊有點崩潰,或者什麼。 – aroth

+0

有沒有機會使用JSP的繼任者Facelets?你可以在[這個答案]的第二部分看到你想要的任何例子(http://stackoverflow.com/questions/4792862/how-to-include-another-xhtml-in-xhtml-using-jsf-2 -O-小面/ 4793959#4793959)。你只需要打開自己的JSF作爲MVC框架。 – BalusC

+0

@BalusC這是一個大學項目,所以......不。 –

回答

2

你或許應該看看Apache Tiles因爲它這個最適合你。

如果你想推出自己的,你可以創建兩個文件,說的header.jsp和footer.jsp中與頁面的開始和結束:

header.jsp中

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
     //header content 
     </div> 
     <div> 
     //main content 

和, footer.jsp

 </div> 
    </body> 
    </html> 

並將兩者都包含在您的內容頁面中。

或者,你可以創建一個layout.jsp頁:

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
     //header content 
     </div> 
     <div> 
     <c:out value="${content}"/> 
     </div> 
    </body> 
    </html> 

然後,所有的請求將填充則內容可變負載佈局頁。這樣你就不必重複遍佈整個地方的內容。

例子: 在你的servlet,你可以給變量這樣的值:

 String content = "<h1>Hello World!</h1>"; 
     request.setAttribute("content", content); 
     //forward to layout.jsp 

這樣,layout.jsp頁面中的內容將顯示在。你當然可以創建幾個這樣的變量佔位符。

第三選項: 使用jsp:include標籤包含動態內容。例如 的layout.jsp頁面看起來就像這樣:

<html> 
     <head> 
     </head> 
     <body> 
     <div> 
      //header content 
     </div> 
     <div> 
      <jsp:include page="${page}"/> 
     </div> 
     </body> 
    </html> 

的包括標籤將在給定的URL抓取網頁。使用這個建議的原因是當你有更復雜的顯示時,使用JSP頁面來構建顯示會更好。這個servlet將只關心業務邏輯。您可以爲每個顯示器創建一個單獨的jsp頁面。該servlet將如下所示:

//business logic 
    //save the data to be displayed in the request 
    String page = "nextpagetodisplay.jsp"; 
    request.setAttribute("page", page); 
    //forward to layout.jsp 
+0

你可以展示一個如何使用這個'layout.jsp'的例子嗎? –

+0

@Airir Rachum我在答案中增加了一些。希望這可以幫助。 –

+0

所以所有頁面都來自servlet? –