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

Spring MVC處理響應(yīng)的案例詳解

 更新時(shí)間:2023年06月29日 09:21:24   作者:會(huì)洗碗的CV工程師  
當(dāng)服務(wù)器向客戶端響應(yīng)數(shù)據(jù)時(shí),SpringMVC框架會(huì)使用“轉(zhuǎn)換器”(Converter)將方法的返回值進(jìn)行轉(zhuǎn)換,SpringMVC框架還會(huì)自動(dòng)使用不同的轉(zhuǎn)換器,因此這篇文章就給大家詳細(xì)介紹一下Spring MVC如何處理響應(yīng)并附上案例,需要的朋友可以參考下

一、配置視圖解析器

SpringMVC默認(rèn)情況下會(huì)在控制器執(zhí)行完成后跳轉(zhuǎn)到視圖頁面,視圖解析器能找到相應(yīng)的視圖,之前的404異常就是由于沒有配置視圖解析器導(dǎo)致找不到視圖。在SpringMVC中提供了13個(gè)視圖解析器,用于支持不同的視圖技術(shù)。InternalResourceViewResolver是SpringMVC的默認(rèn)視圖解析器,用來解析JSP視圖。

添加如下標(biāo)簽就算配置視圖解析器了 

<!-- 視圖解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 視圖前綴 -->
        <property name="prefix" value="/"/>
        <!-- 視圖后綴 -->
        <property name="suffix" value=".jsp"/>
    </bean>

二、控制器方法的返回值

我們可以通過控制器方法的返回值設(shè)置跳轉(zhuǎn)的視圖,控制器方法支持以下返回值類型:

2.1 返回值為void

此時(shí)會(huì)跳轉(zhuǎn)到名字是 前綴+方法路徑名+后綴 的jsp頁面

2.1.1 控制器方法

    /**
     * SpringMVC處理響應(yīng)——控制器方法(根據(jù)返回值)
     */
    // 路徑是helloMVC,方法執(zhí)行完后會(huì)跳轉(zhuǎn)到/helloMVC.jsp
    @RequestMapping("helloMVC")
    public void helloMVC(){
        System.out.println("hello SpringMVC!");
    }

2.1.2 jsp頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>MVC</title>
</head>
<body>
    <h1>歡迎來到SpringMVC!</h1>
</body>
</html>

2.1.3 測試結(jié)果

訪問路徑:http://localhost:8080/helloMVC

 OK,確實(shí)返回了jsp頁面

2.2 返回值為String

此時(shí)會(huì)跳轉(zhuǎn)到名字是 前綴+返回值+后綴 的jsp頁面

2.2.1 控制器方法

// 返回值是String,此時(shí)會(huì)跳轉(zhuǎn)到名字是 前綴+返回值+后綴 的jsp頁面
    @RequestMapping("c2/hello1")
    public String helloMVC1(){
        System.out.println("Hello SpringMVC!");
        return "helloMVC";
    }

2.2.2 測試結(jié)果

訪問路徑:http://localhost:8080/c2/hello1

OK,這次返回的也不是helloMVC1頁面,確實(shí)成功實(shí)現(xiàn)了。 

2.3 返回值為ModelAndView

這是SpringMVC提供的對象,該對象可以向request域設(shè)置數(shù)據(jù)并指定跳轉(zhuǎn)的頁面。該對象中包含Model對象和View對象。

  • Model:向request域中設(shè)置數(shù)據(jù)。
  • View:指定跳轉(zhuǎn)的頁面。

2.3.1 控制器方法

// 返回值為ModelAndView
    @RequestMapping("/c2/hello2")
    public ModelAndView useMAV(){
        System.out.println("返回值類型為ModelAndView");
        // 1.創(chuàng)建ModelAndView對象
        ModelAndView modelAndView = new ModelAndView();
        // 2.獲取Model對象,本質(zhì)是一個(gè)Map
        Map<String,Object> model = modelAndView.getModel();
        // 3.使用Model對象向request域設(shè)置數(shù)據(jù)
        model.put("username","黃慶禧");
        // 4.使用view對象設(shè)置跳轉(zhuǎn)的路徑
        modelAndView.setViewName("lyl-HQX");
        return modelAndView;
    }

OK,這里設(shè)置了一個(gè)username的屬性,屬性值為黃慶禧

2.3.2 JSP頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>lyl-HQX</title>
</head>
<body>
<h1>name: 你好!${requestScope.name}</h1>
  <h1>username: 你好!${requestScope.username}</h1>
  <h1>request-Map 你好!${requestScope.usernameMap}</h1>
  <h1>session 地址是:${sessionScope.address}</h1>
  <h1>context 年齡是:${applicationScope.age}</h1>
</body>
</html>

OK,這里解釋一下,這里用到的參數(shù)是后面需要的。

2.3.3 測試結(jié)果 

OK,確實(shí)可以成功打印出黃慶禧的名字了。 

三、某些會(huì)話對象設(shè)置數(shù)據(jù)

當(dāng)控制器返回值為ModelAndView時(shí)我們可以向request域設(shè)置數(shù)據(jù),我們還有以下方法可以向request域設(shè)置數(shù)據(jù):

3.1 request域設(shè)置數(shù)據(jù)

3.1.1 使用參數(shù)為原生的HttpServletRequest

控制器方法

    /**
     * SpringMVC處理響應(yīng)-request域
     */
    // 使用原生的HttpServletRequest
    @RequestMapping("/c2/hello3")
    public String setRequestModel(HttpServletRequest request){
        request.setAttribute("username","會(huì)洗碗的CV工程師");
        return "lyl-HQX";
    }

OK,username屬性值為會(huì)洗碗的CV工程師,看一下能否成功獲取 

測試結(jié)果

OK,可以看到確實(shí)成功獲取了。 接下來嘗試其他一些參數(shù)。

3.1.2 使用參數(shù)為Model和ModelMap

SpringMVC提供了Model接口和ModelMap類,控制器方法添加這兩個(gè)類型的參數(shù),使用該參數(shù)設(shè)置數(shù)據(jù),該數(shù)據(jù)就會(huì)存到request域中。

控制器方法

//使用Model、ModelMap
    @RequestMapping("/c2/hello4")
    public String setRequestModel2(Model model, ModelMap modelMap){
        // 使用Model將數(shù)據(jù)存入request域
        model.addAttribute("username","LYL");
        // 使用ModelMap將數(shù)據(jù)傳入request域
        modelMap.addAttribute("usernameMap","HQX");
        return "lyl-HQX";
    }

測試結(jié)果

OK,可以看得到兩個(gè)屬性都已經(jīng)成功獲取。 

3.1.3 使用參數(shù)為Map集合

Model接口底層就是一個(gè)Map集合,我們可以給控制器方法設(shè)置Map類型的參數(shù),向Map中添加鍵值對,數(shù)據(jù)也會(huì)存到request域中。

控制器方法

// 使用Map集合
    @RequestMapping("/c2/hello5")
    public String setRequestModel3(Map map){
        map.put("username","程序員");
        map.put("usernameMap","程序員");
        return "lyl-HQX";
    }

測試結(jié)果

OK,可以看得出來和上面也是一樣可以使用的。 

3.2 session域設(shè)置數(shù)據(jù)

Session作用域表示在當(dāng)前會(huì)話中有效。在SpringMVC中對于Session作用域傳值,只能使用HttpSession對象來實(shí)現(xiàn)。

3.2.1 控制器方法

    /**
     * SpringMVC處理響應(yīng)-session域設(shè)置數(shù)據(jù)
     */
    @RequestMapping("/c2/hello6")
    public String setSessionModel(HttpSession session){
        session.setAttribute("address","北京");
        return "lyl-HQX";
    }

OK,這次是在session域設(shè)置了一個(gè)地址屬性,看一下能否成功獲取 

3.2.2 測試結(jié)果 

Ok,可以看到確實(shí)成功獲取了。 

3.3 context域設(shè)置數(shù)據(jù)

 context作用域表示在整個(gè)應(yīng)用范圍都有效。在SpringMVC中對context作用域傳值,只能使用ServletContext對象來實(shí)現(xiàn)。但是該對象不能直接注入到方法參數(shù)中,需要通過HttpSession對象獲取。

3.2.1 控制器方法

    /**
     * SpringMVC處理響應(yīng)-context域設(shè)置數(shù)據(jù)
     */
    @RequestMapping("/c2/hello7")
    public String setContextModel(HttpSession session){
        ServletContext servletContext = session.getServletContext();
        servletContext.setAttribute("age",10);
        return "lyl-HQX";
    }

這次利用context域設(shè)置了一個(gè)年齡屬性,看一下能否獲取對應(yīng)的值。

3.2.2 測試結(jié)果 

OK,確實(shí)成功獲取到了。 

四、請求轉(zhuǎn)發(fā)&重定向

之前的案例,我們發(fā)現(xiàn)request域中的值可以傳到j(luò)sp頁面中,也就是通過視圖解析器跳轉(zhuǎn)到視圖的底層是請求轉(zhuǎn)發(fā)。
如果我們跳轉(zhuǎn)時(shí)不想使用視圖解析器,可以使用原生HttpServletRequest進(jìn)行請求轉(zhuǎn)發(fā)或HttpServletResponse進(jìn)行重定向:

4.1 原生請求轉(zhuǎn)發(fā)重定向?qū)懛?/h3>

4.1.1 重定向控制器方法

    /**
     * SpringMVC處理響應(yīng)-請求轉(zhuǎn)發(fā)&重定向
     */
    @RequestMapping("/c2/hello8")
    public void myForward1(HttpServletRequest request, HttpServletResponse response) throws Exception{
        request.setAttribute("name","程序員");
        // 請求轉(zhuǎn)發(fā)
        //request.getRequestDispatcher("/c2/hello9").forward(request,response);
        // 原生重定向
        response.sendRedirect("/c2/hello9");
    }

4.1.2 重定向測試結(jié)果

OK,可以看得到確實(shí)重定向去了。注意看,這里重定向出來后是無法獲取request域的屬性值的,待會(huì)試一下請求轉(zhuǎn)發(fā)可不可以。 重定向地址欄會(huì)發(fā)生變化,而請求轉(zhuǎn)發(fā)地址欄是不會(huì)變化的。

4.1.3 請求轉(zhuǎn)發(fā)測試結(jié)果

OK,,可以看得到請求轉(zhuǎn)發(fā)就可以獲取屬性值,并且地址欄沒有發(fā)生變化。

4.2 springmvc提供的請求轉(zhuǎn)發(fā)重定向?qū)懛?/h3>
// SpringMVC提供一種關(guān)于重定向和請求轉(zhuǎn)發(fā)更為簡單的寫法
    @RequestMapping("/c2/hello10")
    public String myForward3(HttpServletRequest request){
        request.setAttribute("name","程序員");
        // 請求轉(zhuǎn)發(fā)
        return "forward:/c2/hello9";
        // 重定向
        //return "redirect:/c2/hello9";
    }

以上就是Spring MVC處理響應(yīng)的案例詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC處理響應(yīng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java文件IO操作教程之DirectIO的意義

    Java文件IO操作教程之DirectIO的意義

    這篇文章主要給大家介紹了關(guān)于Java文件IO操作教程之DirectIO的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 基于java實(shí)現(xiàn)畫圖板功能

    基于java實(shí)現(xiàn)畫圖板功能

    這篇文章主要為大家詳細(xì)介紹了基于java實(shí)現(xiàn)畫圖板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法詳解

    Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法詳解

    這篇文章主要介紹了Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法,結(jié)合實(shí)例形式分析了java分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、跳轉(zhuǎn)語句等相關(guān)概念、原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • 深入理解Mybatis一級緩存

    深入理解Mybatis一級緩存

    客戶端向數(shù)據(jù)庫服務(wù)器發(fā)送同樣的sql查詢語句,如果每次都去訪問數(shù)據(jù)庫,會(huì)導(dǎo)致性能的降低,那么怎么提高呢?下面小編給大家分享下mybatis為我們提供了一級緩存的策略
    2016-12-12
  • Java壓縮之LZW算法字典壓縮與解壓講解

    Java壓縮之LZW算法字典壓縮與解壓講解

    今天小編就為大家分享一篇關(guān)于Java壓縮之LZW算法字典壓縮與解壓講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • RecyclerChart動(dòng)態(tài)屬性圖標(biāo)聯(lián)動(dòng)數(shù)據(jù)動(dòng)態(tài)加載詳解

    RecyclerChart動(dòng)態(tài)屬性圖標(biāo)聯(lián)動(dòng)數(shù)據(jù)動(dòng)態(tài)加載詳解

    這篇文章主要為大家介紹了RecyclerChart動(dòng)態(tài)屬性圖標(biāo)聯(lián)動(dòng)數(shù)據(jù)動(dòng)態(tài)加載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • java String的深入理解

    java String的深入理解

    這篇文章主要介紹了java String的深入理解的相關(guān)資料,希望通過本文大家能理解String的用法,需要的朋友可以參考下
    2017-09-09
  • Sparsearray稀疏數(shù)組原理及實(shí)例詳解

    Sparsearray稀疏數(shù)組原理及實(shí)例詳解

    這篇文章主要介紹了Sparsearray稀疏數(shù)組原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳解Java中的防抖和節(jié)流

    詳解Java中的防抖和節(jié)流

    防抖是將多次執(zhí)行變?yōu)橹付〞r(shí)間內(nèi)不在觸發(fā)之后,執(zhí)行一次。節(jié)流是將多次執(zhí)行變?yōu)橹付〞r(shí)間不論觸發(fā)多少次,時(shí)間一到就執(zhí)行一次。這篇文章來和大家聊聊Java中的防抖和節(jié)流,感興趣的可以了解一下
    2022-08-08
  • Spring Security OAuth2實(shí)現(xiàn)使用JWT的示例代碼

    Spring Security OAuth2實(shí)現(xiàn)使用JWT的示例代碼

    這篇文章主要介紹了Spring Security OAuth2實(shí)現(xiàn)使用JWT的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

土默特左旗| 祁阳县| 丹巴县| 汽车| 肇东市| 德清县| 商城县| 台前县| 大兴区| 桐柏县| 华亭县| 崇文区| 澳门| 花莲县| 措勤县| 商河县| 阿拉善右旗| 北宁市| 崇仁县| 江北区| 洪洞县| 文登市| 乳源| 余江县| 扎囊县| 磐安县| 安吉县| 丰县| 五常市| 监利县| 西乌| 游戏| 泊头市| 高台县| 滨州市| 都兰县| 静宁县| 集贤县| 陆川县| 米易县| 密云县|