您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringMVC視圖轉發(fā)重定向區(qū)別是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringMVC視圖轉發(fā)重定向區(qū)別是什么文章都會有所收獲,下面我們一起來看看吧。
SpringMVC 中的視圖是 View 接口,視圖的作用是渲染數據,將模型 Model 中的數據展示給用戶。
視圖的種類很多,默認有:轉發(fā)視圖和重定向視圖。
若使用的視圖技術為 Thymeleaf,在 SpringMVC 的配置文件中配置了 Thymeleaf 的視圖解析器,由此視圖解析器解析之后所得到的是 ThymeleafView。
當控制器方法中所設置的視圖名稱沒有任何前綴時,此時的視圖名稱會被 SpringMVC 配置文件中所配置的視圖解析器解析。
回顧下spring配置文件里的視圖解析器的配置:
<!-- 配置Thymeleaf視圖解析器 --> <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> <property name="order" value="1"/> <property name="characterEncoding" value="UTF-8"/> <property name="templateEngine"> <bean class="org.thymeleaf.spring5.SpringTemplateEngine"> <property name="templateResolver"> <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"> <!-- 視圖前綴 --> <property name="prefix" value="/WEB-INF/templates/"/> <!-- 視圖后綴 --> <property name="suffix" value=".html"/> <property name="templateMode" value="HTML5"/> <property name="characterEncoding" value="UTF-8" /> </bean> </property> </bean> </property> </bean>
視圖名稱拼接視圖前綴和視圖后綴所得到的最終路徑,會通過轉發(fā)的方式實現跳轉。
之前寫的代碼示例一直都是這種,比如:
@RequestMapping("/testThymeleafView") public String testThymeleafView() { return "success"; }
SpringMVC中默認的轉發(fā)視圖是 InternalResourceView 。
當控制器方法中所設置的視圖名稱以forward:
為前綴時,創(chuàng)建 InternalResourceView 視圖。
此時的視圖名稱不會被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會將前綴"forward:"去掉,剩余部分作為最終路徑通過轉發(fā)的方式實現跳轉。
@Controller public class ViewController { @RequestMapping("/testThymeleafView") public String testThymeleafView() { return "success"; } @RequestMapping("/testToForward") public String testToForward() { return "forward:/testThymeleafView"; } }
控制器方法 testToForward 中,進行了轉發(fā)forward:/testThymeleafView
,去掉forward:
之后,就可以轉發(fā)到/testThymeleafView
上。
也就是說,當我訪問 http://localhost:8080/springmvc/testToForward
,應該跳轉顯示出 success 頁。
SpringMVC 中默認的重定向視圖是 RedirectView 。
當控制器方法中所設置的視圖名稱以redirect:
為前綴時,創(chuàng)建 RedirectView 視圖。
此時的視圖名稱不會被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會將前綴"redirect:"去掉,剩余部分作為最終路徑通過重定向的方式實現跳轉。
繼續(xù)新增一個控制器方法 testRedirect() 來測試一下:
@Controller public class ViewController { @RequestMapping("/testThymeleafView") public String testThymeleafView() { return "success"; } @RequestMapping("/testToForward") public String testToForward() { return "forward:/testThymeleafView"; } @RequestMapping("/testRedirect") public String testRedirect() { return "redirect:/testThymeleafView"; } }
嗯?testToForward()
和testRedirect()
最終都是訪問/testThymeleafView
,那這2個還不是一樣?
其實不一樣。
轉發(fā)訪問/testToForward
時,頁面看到的是 success 頁面,瀏覽器地址欄仍然是/testToForward
。
重定向訪問/testRedirect
時,頁面看到的是 success 頁面,地址欄里也變成了/testThymeleafView
。
轉發(fā)瀏覽器是發(fā)生一次請求,重定向是2次。
轉發(fā)可以獲取請求域中的數據,但是重定向不可以。因為轉發(fā)用到一次請求,也就是用到的request對象是同一個。重定向是發(fā)送2次請求,是2個request對象。
轉發(fā)可以訪問 WEB-INF 中的資源,但是重定向不可以。因為 WEB-INF 下面的資源具有隱藏性,只能通過服務器內部來訪問,不能通過瀏覽器來訪問。
轉發(fā)不可以跨域,重定向可以。轉發(fā)是發(fā)生在服務器內部的,就只能訪問內部的資源。而瀏覽器發(fā)送了2次請求,通過瀏覽器可以訪問任何資源,比如我重定向到百度首頁。
視圖控制器實際上是 springMVC 配置文件里的一個標簽,作用也是實現請求地址和視圖頁面的映射關系。
當控制器方法中,僅僅用來實現頁面跳轉,即只需要設置視圖名稱時,可以將處理器方法使用view-controller標簽進行表示。
比如:
@RequestMapping("/") public String index() { return "index"; }
這里就可以注釋掉,在springmvc 配置文件中用視圖控制器來配置。
<!-- path:設置處理的請求地址 view-name:設置請求地址所對應的視圖名稱 --> <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
注意這里用的命名空間是 mvc,要去添加上。
重新部署,訪問http://localhost:8080/springmvc/
:
依然可以訪問成功。
但是當我點擊 index 中的超鏈接的時候報錯了404:
這是因為當在配置文件中配置了 view-controller 之后,控制器中寫的所有請求映射都失效了。
還需要再加入一個配置,設置開啟 mvc 注解驅動的標簽:
<!--開啟 mvc 的注解驅動--> <mvc:annotation-driven />
再次點擊跳轉,訪問成功:
關于“SpringMVC視圖轉發(fā)重定向區(qū)別是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringMVC視圖轉發(fā)重定向區(qū)別是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。