2009-04-21 35 views
2

讓我剛開始說我對Java Web應用程序是全新的,所以我很抱歉如果這是一個非常基本的問題。如何在不重複代碼的情況下將jsp頁面包含在Java Web應用程序中?

我正在寫一個應用程序,可以讓用戶登錄到一個帳戶。每個頁面的頂部包含類似的信息欄(有點像Gmail中的頂欄):

Logged in as <userid> | Settings | Help 

由於這部分將是每個頁面上,這對我來說很有意義,以拆分功能,所以我不重複我的代碼。

我做了一些搜索,發現我可以用這樣的:在另一個JSP的中間

<jsp:include page="userInfoBar.jsp" flush="true" /> 

。儘管我的userSettings.jsp頁面存在問題,但也從數據庫獲取了一些用戶詳細信息。我不僅在兩個JSP之間複製了一些代碼,但是我有一種感覺,在網頁呈現期間我正在做兩倍的工作。

例如(僞代碼):

userInfoBar.jsp: 
user = getCurrentUser 
if (user) { 
    print Logged in as user.userid | Settings | Help 
} 

userSettings.jsp: 
<jsp:include page="userInfoBar.jsp" flush="true" /> 
user = getCurrentUser 
Change settings for user.userid 

所以從這個小例子,getCurrentUser被調用兩次(我認爲,除非莫名其妙的Java優化了)。

我該如何避免這種重複的工作,但仍然保持userInfoBar與每個JSP有點分離?

在此先感謝!

Brian

回答

3

問題是您的JSP中有Java代碼。當你這樣做的時候,最邪惡的事情就會發生你應該在谷歌上查看MVC模式。

無論如何,這樣做的好方法是使用MVC模式,並在控制器中完成繁重的工作,完成繁重的工作後,您可以傳遞字符串/列表以顯示視圖,該視圖顯示他們和沒有更多。

另外,如果你開始使用與JSTL MVCS,有更多的人將能夠幫助你,因爲每個人都知道如何做到這一點的東西,希望不是很多人還內含Java在他們的JSP

+0

酷 - 我很熟悉,因爲Ruby on Rails和Django的MVC的 - 我只是不知道如何在Java中發生。我正在查找它:) – BrianH 2009-04-21 18:59:27

2

嘗試使用JSF。這允許輕鬆實現MVC。

您可以將兩個前端指向同一會話範圍的bean以獲取用戶信息。

0

嗯,有幾頁一個小項目,我認爲這是確定這樣做純JSP,它不是一個壞主意,讓它的竅門。

我可以向你保證,任何framwork將增加更多的「unneccesary」代碼多數民衆贊成叫了一遍又一遍,但因爲它是隱藏在背後的抽象,你不會注意到。我真的不能推薦一個適合java的體面的html框架,但也許GWT是最有前途的,或者至少是最痛苦的。至少我可以在一個體面的編輯器中編寫真正可調試的代碼...)

相關問題