2008-11-11 40 views
1

背景:我們有一個系統是在2002 - 2003年期間基於Java的早期CMS編寫的。我們希望繼續使用我們的新東西,使用tomcat,stripes和sitemesh。我們已將導航,佈局,「豆莢」,js,css等從舊CMS和新應用程序中移除,因此我們擁有一致的外觀和感覺。java web應用裝飾/包含問題

我們現在需要某種解決方案來擺脫所有正在進行的代碼重複。我們的應用程序目前在同一臺虛擬機上運行,​​但這可能會發生變化。我們需要一種方式讓所有的tomcat實例訪問一些常見的元素(並且這些元素可能/可能不需要做一些服務器端的東西)。

到目前爲止我們已經提出的最好的做法是製作一個相當標準的sitemesh裝飾器,它使用c:import獲取所需內容,並將其正確插入。此解決方案有一些網絡開銷,可能導致它停滯並介紹一個失敗點。我們查看了<%@ include file =「/ something.jsp」%>,但這似乎只是上下文相對的。我們可以使用c:import並將它指向localhost,這似乎是迄今爲止最好的解決方案。

有沒有其他的模板/裝飾框架(瓷磚?),可以使這更簡單?我們缺少什麼?

回答

1

我不太清楚你要在這裏做什麼。我的解釋是:你有許多資源要在許多應用程序中重用。您不希望在所有應用程序中複製這些文件,因爲這樣會很難在應用程序之間保持一致。

如果這是您的問題,我建議您將常用資源保存在jar文件中。這給你幾個優點:

  1. 你的資源是地方 - 沒有網絡開銷
  2. 你有超過更新到資源的控制。

nr 2的示例:您將常見的頁面佈局保留在page-layouts-1.x.jar中。您繼續製作次要版本的頁面佈局,不會影響使用它的應用程序 - 它們是插入式替代品。有一天,您決定完全重新設計您的應用程序併發布頁面佈局2.0.jar。這需要對使用它的應用程序進行一些重寫。現在,如果應用程序捆綁了頁面佈局,而不是將它們保留在服務器上的共享類加載器中,那麼遷移到2.0版本並不是一件完全沒有關係的事情。您可以一次遷移一個應用程序以使用2.0佈局,而其他應用程序仍然使用1.x佈局。

我們使用JSF和Facelets非常成功地做到了這一點。你可能想看看Weblets。我不知道SiteMesh或Tiles是否能夠直接支持從類路徑提供資源,但我認爲您可以調整它們來完成此操作。

希望它有幫助

1

我們已經使用了Sitemesh多年,我對它有着複雜的感受。

我更喜歡用標準JSP標籤文件(.tag或.tagx)來使用applydecorator。我認爲applydecorator標籤已經隨着標籤文件的出現而被過時了,但是很多Sitemesh用戶並沒有注意到。

幾乎所有的Sitemesh用法都屬於這種類型。我們會有幾個常見的頁面模板,我們的JSP頁面將明確地稱爲佈局。「使用標準佈局,這裏是導航菜單,這裏是頁面的主體。」標記文件與此功能完全相同,但是它們是標準化的,由任何J2EE Web工具支持,並且內置於容器而不是其他依賴項。

爲了真正裝飾一個頁面,JSP頁面本身對Sitemesh完全沒有任何參考,我認爲它在高層次上有意義,但我仍然不喜歡整個頁面被再次解析。

第二個問題不是Sitemesh的錯,鑑於它必須使用的Servlet API,我不知道它還能做什麼。但它確實讓我懷疑基於流的Servlet API的基於DOM的替代方案是否有價值。換句話說,不是讓servlet把它們的輸出寫到一個流中,如果他們將節點添加到樹中呢?這將強制格式良好的輸出,並使像Sitemesh這樣的結構轉換更便宜,或將輸出編碼爲不同格式,如XHTML,HTML或JSON。