@RequestMapping中的相對路徑問題 @FDDLC

2020-10-02 12:00:46

前提:

1、 (應用上下文就是主機,不含專案名!)

2、沒有設定檢視解析器InternalResourceViewResolver(即沒有prefix和suffix)

3、在【方法返回值】使用相對路徑的情況下!!!

 

 

假設在webapp/x/y(這裡的webapp其實就是應用上下文Application context)下有個Tom.jsp,其中有如下程式碼:

對應Controller的內容:

這裡的"Mike.jsp"不是"/"開頭,因此用的是相對路徑。(如果是絕對路徑怎麼辦?很簡單,直接跳轉就行!)

那麼這裡的"相對",是指相對誰呢?

是相對webapp/x/y嗎?不是的。分析如下:

我們在瀏覽器中存取:http://localhost:8080/x/y/Tom.jsp

把滑鼠放在超連結上,可以看到:

點選超連結,頁面變成:

從上圖可知,解析前的址址是【/a/b/c/d】,解析後的地址是【/a/b/c/Mike.jsp】。【解析前的地址】(請求地址,或者說是類上的RequestMapping地址+方法上的RequestMapping地址)、【方法返回值】(比如這裡的"Mike.jsp")以及【解析後的地址】這三者之間的關係如下:

公式一:【解析後的地址】=【解析前的地址 去掉 最後一個"/"後面的內容("/"保留)】【方法返回值】(等號右邊其實就是簡單的字串拼接)

在上面的範例中,【解析前的地址】是"/a/b/c/d",去掉最後一個"/"後面的內容("/"保留)(即d)後變成"/a/b/c/",【方法返回值】為"Mike.jsp",因此【解析後的地址】為"/a/b/c/Mike.jsp"

 

公式二:【解析前的地址】(或者說是請求地址)=【類上的RequestMapping地址】【方法上的RequestMapping地址】

 

進行如下測試:

 

多次驗證,公式無誤,值得依賴!