2012-06-01 51 views
2

我想創建一個servlet過濾器來爲任何給定的servlet請求計算根servlet的相關url路徑。計算servlet中的相對路徑?

因此,對於綁定到http://somedomain/context/一個servlet:

http://somedomain/context/path1/path2的請求將返回..

http://somedomain/context/path1/path2/path3請求將返回../..

是否可靠方式的任何一個知道做這個?

TIA

+3

爲什麼不能總是返回'/ context'? – adarshr

+0

我爲所有其他鏈接使用相對URL,並且我在想在這裏保持一致。我可能是錯的,但那是我的想法。 – BillMan

+2

請勿使用相對鏈接。至少不是'../','../ ..'類型。始終構建完整的網址。但一定要動態獲取上下文,而不是對其進行硬編碼。 – adarshr

回答

3

有了新的Java文件系統實用程序(1.7)的Pathrelativize(Path)方法應該工作。從the Path Operations Tutorial


​​

在沒有任何其他信息,假定Joe和Sally是兄弟的,這意味着駐留在樹結構中的相同級別的節點。從喬導航到薩利,你會希望先瀏覽一個水平提高到父節點再向下突圍:現在

// Result is ../sally 
Path p1_to_p2 = p1.relativize(p2); 
// Result is ../joe 
Path p2_to_p1 = p2.relativize(p1); 

,這種技術是否是可取的,我會離開,向其他人發表評論。

注意,路徑不需要在磁盤上存在,並且你還可以聲明具有固定根目錄的路徑,所以Pathnew Path("/servlet/subdir/subdir2")Pathnew Path("/servlet")應該relativize(...)Pathnew Path("../..") .`