2008-09-27 53 views
1

現有Java站點設計爲在tomcat的「/」下運行,並且有許多固定絕對路徑的特定引用,例如「/ dir/dir/page 」。將「/」站點遷移到Java EE包時處理上下文路徑引用

想要將其遷移到Java EE打包,其中站點需要在上下文根目錄下運行,例如, 「/ dir/dir/page」變爲「/ my-context-root/dir/dir/page」

現在,使用ServletRequest.getContextPath()可以輕鬆實現上下文根,但這仍然意味着很多代碼更改以遷移大型代碼庫。這些參考文獻中的大多數都是文字HTML。

我已經嘗試過使用servlet過濾器對oubound HTML進行重寫,並且這似乎工作正常。但它確實帶來了一些開銷,我不認爲它是一個永久的解決方案。 (有關servlet過濾方法,請參閱EnforceContextRootFilter-1.0-src.zip)。

有沒有更好的方法來解決這個問題?任何明顯的我失蹤?所有評論贊賞!

+0

我意識到可能是明顯的,但JavaEE應用程序仍然可以部署到根上下文(/)。此配置通常在應用程序特定的部署文件(例如,jboss-web.xml,sun-web.xml)中處理。 – 2008-09-27 05:03:59

+0

@jt好點,我確實問我是否錯過了任何明顯的;-)在我的情況下,我需要應用程序與其他應用程序一起部署在同一臺服務器上,並且不能佔用根環境(也不可以在另一個虛擬主機上運行)。 – tardate 2008-09-27 06:44:39

回答

1

退房相關question

還要考慮URLRewriteFilter

另一件事(我一直在編輯這個該死的文章)。如果您使用的是JSP(與靜態HTML或其他)相比,您還可以創建一個標籤文件來將常見的html標籤替換爲鏈接(特別是一個,img,form)。所以< a鏈接</a>可以變成< t:a href =「/ root/path」>鏈接</t:a>。然後標籤可以爲你做翻譯。

這個改變可以很容易地使用sed來完成。

sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp 

表單操作可能比sed有點棘手,但你明白了。

0

apache世界使用重定向(mod_rewrite)做同樣的事情。

servlet的世界使用過濾器

Ruby世界(或回報率)做更多的同樣的東西開始,他們稱之爲路由。因此,沒有得到它(除非你想通過使用智能正規表達式 - 這已經嘗試過,它的工作原理很好)。

+0

apache rewrites也可以用在這種情況下,但我更喜歡過濾器的方法,因爲它是特定的應用程序的本地。確保Apache重寫不會混淆其他已部署的應用程序如果您在同一臺服務器上部署了多個應用程序,我認爲這會很困難。 – tardate 2008-09-27 06:50:24