欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解

 更新時(shí)間:2022年05月28日 16:29:40   作者:把蘋果咬哭的測(cè)試筆記  
這篇文章主要為大家介紹了SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

SpringMVC視圖

SpringMVC 中的視圖是 View 接口,視圖的作用是渲染數(shù)據(jù),將模型 Model 中的數(shù)據(jù)展示給用戶。

視圖的種類很多,默認(rèn)有:轉(zhuǎn)發(fā)視圖和重定向視圖。

若使用的視圖技術(shù)為 Thymeleaf,在 SpringMVC 的配置文件中配置了 Thymeleaf 的視圖解析器,由此視圖解析器解析之后所得到的是 ThymeleafView。

一、ThymeleafView

當(dāng)控制器方法中所設(shè)置的視圖名稱沒有任何前綴時(shí),此時(shí)的視圖名稱會(huì)被 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>

視圖名稱拼接視圖前綴和視圖后綴所得到的最終路徑,會(huì)通過轉(zhuǎn)發(fā)的方式實(shí)現(xiàn)跳轉(zhuǎn)。

之前寫的代碼示例一直都是這種,比如:

@RequestMapping("/testThymeleafView")
    public String testThymeleafView() {
        return "success";
    }

二、轉(zhuǎn)發(fā)視圖

SpringMVC中默認(rèn)的轉(zhuǎn)發(fā)視圖是 InternalResourceView 。

當(dāng)控制器方法中所設(shè)置的視圖名稱以forward:為前綴時(shí),創(chuàng)建 InternalResourceView 視圖。

此時(shí)的視圖名稱不會(huì)被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會(huì)將前綴"forward:"去掉,剩余部分作為最終路徑通過轉(zhuǎn)發(fā)的方式實(shí)現(xiàn)跳轉(zhuǎn)。

@Controller
public class ViewController {
    @RequestMapping("/testThymeleafView")
    public String testThymeleafView() {
        return "success";
    }
    @RequestMapping("/testToForward")
    public String testToForward() {
        return "forward:/testThymeleafView";
    }
}

控制器方法 testToForward 中,進(jìn)行了轉(zhuǎn)發(fā)forward:/testThymeleafView,去掉forward:之后,就可以轉(zhuǎn)發(fā)到/testThymeleafView上。

也就是說,當(dāng)我訪問 http://localhost:8080/springmvc/testToForward,應(yīng)該跳轉(zhuǎn)顯示出 success 頁。

三、重定向視圖

SpringMVC 中默認(rèn)的重定向視圖是 RedirectView 。

當(dāng)控制器方法中所設(shè)置的視圖名稱以redirect:為前綴時(shí),創(chuàng)建 RedirectView 視圖。

此時(shí)的視圖名稱不會(huì)被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會(huì)將前綴"redirect:"去掉,剩余部分作為最終路徑通過重定向的方式實(shí)現(xiàn)跳轉(zhuǎn)。

繼續(xù)新增一個(gè)控制器方法 testRedirect() 來測(cè)試一下:

@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個(gè)還不是一樣?

其實(shí)不一樣。

  • 轉(zhuǎn)發(fā)訪問/testToForward時(shí),頁面看到的是 success 頁面,瀏覽器地址欄仍然是/testToForward。
  • 重定向訪問/testRedirect時(shí),頁面看到的是 success 頁面,地址欄里也變成了/testThymeleafView。

四、轉(zhuǎn)發(fā)和重定向區(qū)別

轉(zhuǎn)發(fā)瀏覽器是發(fā)生一次請(qǐng)求,重定向是2次。

轉(zhuǎn)發(fā)可以獲取請(qǐng)求域中的數(shù)據(jù),但是重定向不可以。因?yàn)檗D(zhuǎn)發(fā)用到一次請(qǐng)求,也就是用到的request對(duì)象是同一個(gè)。重定向是發(fā)送2次請(qǐng)求,是2個(gè)request對(duì)象。

轉(zhuǎn)發(fā)可以訪問 WEB-INF 中的資源,但是重定向不可以。因?yàn)?WEB-INF 下面的資源具有隱藏性,只能通過服務(wù)器內(nèi)部來訪問,不能通過瀏覽器來訪問。

轉(zhuǎn)發(fā)不可以跨域,重定向可以。轉(zhuǎn)發(fā)是發(fā)生在服務(wù)器內(nèi)部的,就只能訪問內(nèi)部的資源。而瀏覽器發(fā)送了2次請(qǐng)求,通過瀏覽器可以訪問任何資源,比如我重定向到百度首頁。

五、視圖控制器 view-controller

視圖控制器實(shí)際上是 springMVC 配置文件里的一個(gè)標(biāo)簽,作用也是實(shí)現(xiàn)請(qǐng)求地址和視圖頁面的映射關(guān)系。

當(dāng)控制器方法中,僅僅用來實(shí)現(xiàn)頁面跳轉(zhuǎn),即只需要設(shè)置視圖名稱時(shí),可以將處理器方法使用view-controller標(biāo)簽進(jìn)行表示。

比如:

@RequestMapping("/")
    public String index() {
        return "index";
    }

這里就可以注釋掉,在springmvc 配置文件中用視圖控制器來配置。

<!--
        path:設(shè)置處理的請(qǐng)求地址
        view-name:設(shè)置請(qǐng)求地址所對(duì)應(yīng)的視圖名稱
    -->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>

注意這里用的命名空間是 mvc,要去添加上。

重新部署,訪問http://localhost:8080/springmvc/:

依然可以訪問成功。

但是當(dāng)我點(diǎn)擊 index 中的超鏈接的時(shí)候報(bào)錯(cuò)了404:

這是因?yàn)楫?dāng)在配置文件中配置了 view-controller 之后,控制器中寫的所有請(qǐng)求映射都失效了。

還需要再加入一個(gè)配置,設(shè)置開啟 mvc 注解驅(qū)動(dòng)的標(biāo)簽:

<!--開啟 mvc 的注解驅(qū)動(dòng)-->
    <mvc:annotation-driven />

再次點(diǎn)擊跳轉(zhuǎn),訪問成功:

感謝《尚硅谷》的學(xué)習(xí)資源,以上就是SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器示例詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC視圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)

    SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)

    這篇文章主要介紹了SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • springmvc實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)信息為excle表格示例代碼

    springmvc實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)信息為excle表格示例代碼

    本篇文章主要介紹了springmvc實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)信息為excle表格,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。
    2017-01-01
  • Spring Event事件通知機(jī)制解讀

    Spring Event事件通知機(jī)制解讀

    這篇文章主要介紹了Spring Event事件通知機(jī)制解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Spring Boot Admin監(jiān)控服務(wù)上下線郵件通知

    詳解Spring Boot Admin監(jiān)控服務(wù)上下線郵件通知

    本篇文章主要介紹了詳解Spring Boot Admin監(jiān)控服務(wù)上下線郵件通知,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 將內(nèi)容寫到txt文檔里面并讀取及刪除的方法

    將內(nèi)容寫到txt文檔里面并讀取及刪除的方法

    本文有個(gè)不錯(cuò)的示例,主要講解如何將內(nèi)容寫到txt文檔里面、讀取文件里面的內(nèi)容以及清除txt文件里面的內(nèi)容
    2014-01-01
  • SpringBoot項(xiàng)目中jar發(fā)布獲取jar包所在目錄路徑的最佳方法

    SpringBoot項(xiàng)目中jar發(fā)布獲取jar包所在目錄路徑的最佳方法

    在開發(fā)過程中,我們經(jīng)常要遇到上傳圖片、word、pdf等功能,但是當(dāng)我們把項(xiàng)目打包發(fā)布到服務(wù)器上時(shí),對(duì)應(yīng)的很多存儲(chǔ)路徑的方法就會(huì)失效,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目中jar發(fā)布獲取jar包所在目錄路徑的相關(guān)資料
    2022-07-07
  • spring boot activiti工作流的搭建與簡(jiǎn)單使用

    spring boot activiti工作流的搭建與簡(jiǎn)單使用

    這篇文章主要給大家介紹了關(guān)于spring boot activiti工作流的搭建與簡(jiǎn)單使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 教你如何將Springboot項(xiàng)目成功部署到linux服務(wù)器

    教你如何將Springboot項(xiàng)目成功部署到linux服務(wù)器

    這篇文章主要介紹了如何將Springboot項(xiàng)目成功部署到linux服務(wù)器上,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 將idea工程打包成jar文件的全步驟

    將idea工程打包成jar文件的全步驟

    這篇文章主要給大家介紹了關(guān)于將idea工程打包成jar文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java實(shí)現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結(jié)構(gòu)

    java實(shí)現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結(jié)構(gòu)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結(jié)構(gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論