2013-01-31 55 views
0

我有一個很好的Restlet應用程序,其組件高度重視以下幾點:的Restlet 「斜線」 的行爲

 cmp.getDefaultHost().attach("/mycmd",ProcessReq.class); 

而當請求URL是http:// <我的主機>/mycmd /時,ProcessReq類返回一個index.html,其中包含指向其他頁面的鏈接。這些頁面在同一目錄中的index.html,並在我的index.html像下面的例子相對頁面引用:

<a href="otherpage.html">Other Page</a> 

什麼我發現,但問題在於,用戶往往期望使用不帶尾隨「/」的URL,例如:http:// < my-host >/mycmd。不幸的是,當他們這樣做時,所有到相關頁面的鏈接都被搞砸了。

當您使用http:// <我的主機>/mycmd /顯示的index.html,然後單擊「其他頁」鏈接時,瀏覽器(正確地)去到http:// <我的主機> /mycmd/otherhost.html。不幸的是,當您執行http:// < my-host >/mycmd(沒有結尾斜槓)時,到其他頁面的鏈接會將瀏覽器發送到http:// < my-host > /otherpage.html,這當然會返回一個404錯誤。

我搜索了互聯網,發現Restlet庫已被設計爲要求在默認情況下我所做的各種URL之後有一個尾部的斜線。然而,這需要我的用戶瘋狂。

是否有某種方式來配置或操縱請求(或響應),以便我可以發送這種類型的URL請求而不需要一個結尾的斜槓,並讓返回的頁面中的相對鏈接指向正確的位置?

有人請指教...

回答

1

的解決方案,我建議是,如果用戶忘記鍵入自動重定向客戶端瀏覽器的URI以斜槓。因此,你的相對URI將保持簡單。

否則,你需要給每個相對URI如再次添加目錄名「mycmd/otherhost.html」

+0

我真的試圖類似於你的建議是什麼東西。在ServerResource中,我重寫了URI,併爲其添加了斜槓。我能夠找到正確的資源,但相對URI仍然很糟糕。如果你是在暗示這一點,那麼我顯然缺少一些東西。你是否建議我放置一個可以重定向的過濾器?我應該使用什麼類/方法?請詳細說明。 –

+0

我建議客戶端重定向,所以瀏覽器可以正確解析相對URI。然後,您可以重新使用重定向器或自定義的Filter子類。 –

+0

謝謝。這是我需要的信息。我最終創建了一個Redirector.MODE_CLIENT_PERMANENT模式的重定向器,並最終讓事情發揮作用。不過,我不確定CLIENT_PERMANENT和CLIENT_TEMPORARY之間的區別。希望我能得到更多關於這些的信息。 –