Spring MVC 中,我們在返回邏輯視圖時,框架會通過 viewResolver 來解析得到具體的 View,然后向瀏覽器渲染。通過配置,我們配置某個 ViewResolver 如下:
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <description>
- 假如邏輯試圖名為 "hello",因此 viewResolver 將解析成 /WEB-INF/jsp/hello.jsp
- </description>
- <property name="order" value="10" />
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- 如果邏輯視圖名為 hello,框架通過 forward 的方式轉發到了 /WEB-INF/jsp/hello.jsp。
- 如果邏輯視圖名是 /hello,框架還是轉發到了 /WEB-INF/jsp/hello.jsp,即 /WEB-INF/jsp//hello.jsp 等同於 /WEB-INF/jsp/hello.jsp。
現在有個問題, 如果 /hello 就是某個 controller 的映射,我想轉發到這個 controller,怎么辦?
我們可以通過forward 前綴來達到轉發到其它資源的目的:
- public String handle() {
- // return "forward:/hello" => 轉發到能夠匹配 /hello 的 controller 上
- // return "hello" => 實際上還是轉發,只不過是框架會找到該邏輯視圖名對應的 View 並渲染
- // return "/hello" => 同 return "hello"
- return "forward:/hello";
- }
同理,如果我們想重定向到某個資源,我們可以通過 redirect 前綴來達到重定向到其它資源的目的:
- public String handle() {
- // 重定向到 /hello 資源
- return "redirect:/hello";
- }