前提:
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地址】
進行如下測試:
多次驗證,公式無誤,值得依賴!