最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年05月28日 16:29:40   作者:把蘋果咬哭的測試筆記  
這篇文章主要為大家介紹了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è)置的視圖名稱沒有任何前綴時,此時的視圖名稱會被 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>

視圖名稱拼接視圖前綴和視圖后綴所得到的最終路徑,會通過轉(zhuǎn)發(fā)的方式實現(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:為前綴時,創(chuàng)建 InternalResourceView 視圖。

此時的視圖名稱不會被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會將前綴"forward:"去掉,剩余部分作為最終路徑通過轉(zhuǎn)發(fā)的方式實現(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:為前綴時,創(chuàng)建 RedirectView 視圖。

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

繼續(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個還不是一樣?

其實不一樣。

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

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

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

轉(zhuǎn)發(fā)可以獲取請求域中的數(shù)據(jù),但是重定向不可以。因為轉(zhuǎn)發(fā)用到一次請求,也就是用到的request對象是同一個。重定向是發(fā)送2次請求,是2個request對象。

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

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

五、視圖控制器 view-controller

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

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

比如:

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

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

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

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

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

依然可以訪問成功。

但是當(dāng)我點擊 index 中的超鏈接的時候報錯了404:

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

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

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

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

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

相關(guān)文章

  • 基于Java 數(shù)組內(nèi)存分配的相關(guān)問題

    基于Java 數(shù)組內(nèi)存分配的相關(guān)問題

    本篇文章是對Java中數(shù)組內(nèi)存分配進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Java8中利用stream對map集合進(jìn)行過濾的方法

    Java8中利用stream對map集合進(jìn)行過濾的方法

    這篇文章主要給大家介紹了關(guān)于Java8中利用stream對map集合進(jìn)行過濾的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 詳解Java快速上手用戶后臺管理系統(tǒng)

    詳解Java快速上手用戶后臺管理系統(tǒng)

    只有在實戰(zhàn)中練習(xí)才能真正獲得能力的提升,本篇文章手把手帶你用Java快速上手實現(xiàn)一個用戶后臺管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • 解決java.lang.NoClassDefFoundError錯誤的問題

    解決java.lang.NoClassDefFoundError錯誤的問題

    在Java開發(fā)過程中,NoClassDefFoundError是一個常見的運行時錯誤,是由于JVM在運行時找不到已編譯的類文件導(dǎo)致的,本文就來介紹一下如何解決,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • 一文教會你cmd命令運行java程序

    一文教會你cmd命令運行java程序

    這篇文章主要給大家介紹了關(guān)于如何使用cmd命令運行java程序的相關(guān)資料,這是一個非常有用的技能,特別是當(dāng)您需要在沒有集成開發(fā)環(huán)境(IDE)的情況下編寫和運行Java代碼時,需要的朋友可以參考下<BR>
    2024-06-06
  • Java怎樣判斷堆區(qū)中的對象可以被回收了

    Java怎樣判斷堆區(qū)中的對象可以被回收了

    文章介紹了Java垃圾回收機(jī)制的工作原理,主要通過引用計數(shù)法和可達(dá)性分析法來判斷對象是否可以被回收,引用計數(shù)法存在循環(huán)引用問題,而可達(dá)性分析法則使用GCRoot對象來判斷對象是否可達(dá),從而決定是否回收,這兩種方法各有優(yōu)缺點,但Java最終采用了可達(dá)性分析法來實現(xiàn)垃圾回收
    2024-12-12
  • Java中IO流解析及代碼實例

    Java中IO流解析及代碼實例

    下面小編就為大家?guī)硪黄P(guān)于Java中的IO流總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • JVM調(diào)試命令與調(diào)試工具詳解

    JVM調(diào)試命令與調(diào)試工具詳解

    JVM statistics Monitoring,用于監(jiān)視虛擬機(jī)運行時狀態(tài)信息的命令,它可以顯示出虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行數(shù)據(jù),這篇文章主要介紹了JVM調(diào)試命令與調(diào)試工具,需要的朋友可以參考下
    2023-10-10
  • Apache?log4j2-RCE?漏洞復(fù)現(xiàn)及修復(fù)建議(CVE-2021-44228)

    Apache?log4j2-RCE?漏洞復(fù)現(xiàn)及修復(fù)建議(CVE-2021-44228)

    Apache?Log4j2是一款Java日志框架,大量應(yīng)用于業(yè)務(wù)系統(tǒng)開發(fā)。2021年11月24日,阿里云安全團(tuán)隊向Apache官方報告了Apache?Log4j2遠(yuǎn)程代碼執(zhí)行漏洞(CVE-2021-44228),本文給大家介紹Apache?log4j2-RCE?漏洞復(fù)現(xiàn)(CVE-2021-44228)的相關(guān)知識,感興趣的朋友一起看看吧
    2021-12-12
  • 解決springSecurity 使用默認(rèn)登陸界面登錄后無法跳轉(zhuǎn)問題

    解決springSecurity 使用默認(rèn)登陸界面登錄后無法跳轉(zhuǎn)問題

    這篇文章主要介紹了解決springSecurity 使用默認(rèn)登陸界面登錄后無法跳轉(zhuǎn)問題,項目環(huán)境springboot下使用springSecurity 版本2.7.8,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12

最新評論

龙口市| 民乐县| 昭通市| 正阳县| 定州市| 唐河县| 邮箱| 郯城县| 石河子市| 治县。| 开阳县| 海伦市| 枞阳县| 荥经县| 盈江县| 雷山县| 镇宁| 凉城县| 安陆市| 永川市| 阳西县| 土默特右旗| 宜川县| 泉州市| 阳信县| 万安县| 万载县| 东光县| 清徐县| 马龙县| 长宁县| 乌鲁木齐县| 湖北省| 葫芦岛市| 旅游| 布拖县| 大邑县| 拜泉县| 陆良县| 如东县| 南充市|