一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - SpringMVC中Controller類數(shù)據(jù)響應(yīng)的方法

SpringMVC中Controller類數(shù)據(jù)響應(yīng)的方法

2021-10-27 10:34初秋微微 Java教程

這篇文章主要介紹了SpringMVC中的數(shù)據(jù)響應(yīng)的問題,主要來了解 Controller 類如何進(jìn)行數(shù)據(jù)響應(yīng)的,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

上篇博客我們了解了請求參數(shù)的獲取,那么獲取到請求參數(shù)之后,需要對參數(shù)進(jìn)行出來,然后進(jìn)行數(shù)據(jù)響應(yīng)。那么這篇博客我們就來了解 Controller 類如何進(jìn)行數(shù)據(jù)響應(yīng)。

1. 方法返回值類型

在 web 階段我們也了解過數(shù)據(jù)響應(yīng),我們可以簡單的將數(shù)據(jù)響應(yīng)分為:頁面跳轉(zhuǎn)和回寫數(shù)據(jù)

Controller 類的業(yè)務(wù)返回的返回值類型有很多,但歸根結(jié)底就是用于完成頁面跳轉(zhuǎn)和回寫數(shù)據(jù)。我們了解一下常用的幾個(gè)返回值類型:ModelAndView, Model,ModelMap,Map,View, String, void ,@ResponseBody,HttpHeaders 。

2. 頁面跳轉(zhuǎn)

在 SpringMVC 中完成頁面跳轉(zhuǎn)有兩種方式:直接返回字符串和返回 ModelAndView 對象

2.1 直接返回字符串

當(dāng)直接返回一個(gè)字符串時(shí),會(huì)自動(dòng)通過視圖解析器解析為物理視圖地址。

?
1
2
3
4
5
6
7
8
9
@RequestMapping("/user")
public class MyController {
   //請求地址:localhost:8080/user/testReturnString
   @RequestMapping("/testReturnString")
   public String testReturnString() {
   System.out.println("MyController 的 testReturnString 方法執(zhí)行   了。。。。");
   return "success.jsp";
   }
}

當(dāng)你的視圖不是位于 user 文件夾下時(shí),客戶端會(huì)報(bào) 404 錯(cuò)誤,因?yàn)樵谡也坏皆撘晥D。這種方式設(shè)置是視圖的相對地址,相對 MyController 類的請求地址,所以我們可以將其設(shè)置為絕對地址return "\success.jsp";。

2.2 返回 ModelAndView 對象

ModelAndView 對象我們可以進(jìn)行分解, Model 表示模型用于封裝數(shù)據(jù),View 表示視圖用于展示數(shù)據(jù)。 ModelAndView 對象的一些方法:

SpringMVC中Controller類數(shù)據(jù)響應(yīng)的方法

使用 ModelAndView 對象完成頁面跳轉(zhuǎn):

?
1
2
3
4
5
6
7
8
9
10
@RequestMapping("test01")
public ModelAndView test01(){
    //創(chuàng)建 modelAndView 對象
    ModelAndView modelAndView =new ModelAndView();
    //設(shè)置視圖名稱
    modelAndView.setViewName("/user.jsp");
    //設(shè)置模型數(shù)據(jù)
    modelAndView.addObject("user","zhangsan");
    return  modelAndView;
}

也可以不手動(dòng)創(chuàng)建 ModelAndView 對象,直接在方法上添加形參,這種方式的ModelAndView 對象創(chuàng)建實(shí)參

?
1
2
3
4
5
6
7
8
@RequestMapping("test02")
public ModelAndView test02(ModelAndView modelAndView){
    //設(shè)置視圖名稱
    modelAndView.setViewName("/user");
    //設(shè)置模型數(shù)據(jù)
    modelAndView.addObject("user","lisi");
    return  modelAndView;
}

這兩種方式是一樣的,只不過 ModelAndView 對象的創(chuàng)建角色改變了,除了這種兩種方式還有其他方式,我們可以通過ViewModel將 ModelAndView 對象拆分。

?
1
2
3
4
5
6
7
8
9
10
11
@RequestMapping("test03")
    public String test03(Model model){
        model.addAttribute("user","wangwu");
        return "user.jsp";
    }
 
    @RequestMapping("test04")
    public String test04(ModelMap modelMap){
        modelMap.addAttribute("user","zhaoliu");
        return "user.jsp";
    }

2.3 視圖前綴和后綴

在返回視圖時(shí),我們需要給定一個(gè)視圖名,除了視圖名還需要前綴和后綴。前綴就是視圖存放的路徑,后綴就是視圖類型。而 SpringMVC 可以配置內(nèi)部資源視圖解析器,將前綴和后綴提取出來,在 SpringMVC 的配置文件中進(jìn)行配置:

?
1
2
3
4
5
<!--配置內(nèi)部資源視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

在 Controller 類的業(yè)務(wù)方法中就可以省略前綴和后綴,SpringMVC 將返回的字符串與在視圖解析器的前后綴拼接后跳轉(zhuǎn):

?
1
2
3
4
5
6
7
8
9
10
@RequestMapping("test01")
public ModelAndView test01(){
    //創(chuàng)建 modelAndView 對象
    ModelAndView modelAndView =new ModelAndView();
    //設(shè)置視圖名稱
    modelAndView.setViewName("user");
    //設(shè)置模型數(shù)據(jù)
    modelAndView.addObject("user","zhangsan");
    return  modelAndView;
}

2.3 重定向和轉(zhuǎn)發(fā)

  • 轉(zhuǎn)發(fā):請求轉(zhuǎn)發(fā)是指將請求再轉(zhuǎn)發(fā)到其他地址,轉(zhuǎn)發(fā)過程中使用的是同一個(gè)請求,轉(zhuǎn)發(fā)的地址欄內(nèi)容不變。重
  • 定向:是指由原請求地址重新定位到某個(gè)新地址,原有的請求失效,客戶端看到的是新的請求返回的相應(yīng)結(jié)果。

在SpringMVC 中默認(rèn)是通過轉(zhuǎn)發(fā)完成跳轉(zhuǎn)的,當(dāng)然也可以設(shè)置為重定向:

?
1
2
3
4
5
6
7
8
9
10
11
//轉(zhuǎn)發(fā)到user.jsp
@RequestMapping("test05")
public String test05(VO vo){
    return  "forward:user.jsp";
}
 
//重定向user.jsp
@RequestMapping("test05")
public String test05(VO vo){
    return  "redirect:user.jsp";
}

注意:如果在方法返回值前加 forward:或者redirect: 則SpringMVC配置文件中的自定義視圖解析器無效。return "forward:/main"表示轉(zhuǎn)發(fā)到映射名為main的controller,而return "forward:/main.jsp"表示轉(zhuǎn)發(fā)到main.jsp頁面。

在方法上只有@RequestMapping 時(shí),無論方法返回值是什么,都需要進(jìn)行跳轉(zhuǎn)。

3. 回寫數(shù)據(jù)

回寫數(shù)據(jù)也有兩種方式:直接返回字符串和返回對象或集合

3.1 直接返回字符串

Web基礎(chǔ)階段,客戶端訪問服務(wù)器端,如果想直接回寫字符串作為響應(yīng)體返回的話,只需要使用response.getWriter().print(“hello world”) 即可,所以我們通過SpringMVC框架注入的response對象,此時(shí)不需要視圖跳轉(zhuǎn),業(yè)務(wù)方法返回值為void。

?
1
2
3
4
@RequestMapping("test05")
public void test05(HttpServletResponse response) throws IOException {
     response.getWriter().println("zhangsan");
}

除了這種方式,還有通過@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳轉(zhuǎn)是直接在http響應(yīng)體中返回:

?
1
2
3
4
5
@RequestMapping("test06")
@ResponseBody //告知 SpringMVC框架 不進(jìn)行視圖跳轉(zhuǎn),直接進(jìn)行數(shù)據(jù)響應(yīng)
public String test06() throws IOException {
    return "lisi";
}

在實(shí)際開發(fā)中,一般不會(huì)直接返回 “lisi” 這是類型的字符串,一般返回的是有一定格式的字符串,例如 json 格式。在返回 json 格式的字符串時(shí),我們需要用到額外添加Jackson的jar包,在xml 文件中添加:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--json轉(zhuǎn)換工具jackson-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.11.1</version>
</dependency>
?
1
2
3
4
5
6
7
8
9
10
@RequestMapping("test07")
@ResponseBody //告知 SpringMVC框架 不進(jìn)行視圖跳轉(zhuǎn),直接進(jìn)行數(shù)據(jù)響應(yīng)
public String test07() throws IOException {
    User user = new User();
    user.setAge(18);
    user.setUsername("zhangsan");
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(user);
    return  json;
}

3.2 返回對象或集合

通過 SpringMVC 幫助我們對對象或集合進(jìn)行json字符串的轉(zhuǎn)換并回寫,為處理器適配器配置消息轉(zhuǎn)換參數(shù),指定使用jackson進(jìn)行對象或集合的轉(zhuǎn)換,因此需要在spring-mvc.xml中進(jìn)行如下配置:

?
1
2
3
4
5
6
7
8
9
<!-- 配置處理器映射器 -->
 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
     <property name="messageConverters">
         <list>
             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
             </bean>
         </list>
     </property>
 </bean>

通過配置了消息轉(zhuǎn)換器之后,我們就不需要在業(yè)務(wù)方法中進(jìn)行手動(dòng)轉(zhuǎn)換了:

?
1
2
3
4
5
6
7
8
@RequestMapping("test08")
@ResponseBody //告知 SpringMVC框架 不進(jìn)行視圖跳轉(zhuǎn),直接進(jìn)行數(shù)據(jù)響應(yīng)
public User test08() throws IOException {
    User user = new User();
    user.setAge(18);
    user.setUsername("zhangsan");
    return  user;
}

在上述方法中我們通過配置處理器映射器完成了json格式的字符串的轉(zhuǎn)換,但是這種配置方式比較繁瑣,配置代碼比較多,因此,我們可以使用mvc的注解驅(qū)動(dòng)代替上述配置。使用<mvc:annotation-driven>自動(dòng)加載 RequestMappingHandlerMapping(處理映射器)和RequestMappingHandlerAdapter( 處 理 適 配 器 ),可用在Spring-xml.xml配置文件中使用<mvc:annotation-driven>替代注解處理器和適配器的配置。

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

到此這篇關(guān)于SpringMVC中的數(shù)據(jù)響應(yīng)的文章就介紹到這了,更多相關(guān)SpringMVC數(shù)據(jù)響應(yīng)內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_45040919/article/details/119134806

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒有升過級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
主站蜘蛛池模板: 女被男啪到哭 | 91大神大战高跟丝袜美女 | 6969精品视频在线观看 | 6080欧美一区二区三区四区 | 国产成人盗摄精品 | 男人的天堂va | 性xxx免费视频 | 91在线老王精品免费播放 | ass老妇黑森林pic | 精品国产乱码久久久久久人妻 | 国产福利视频一区二区微拍 | 大伊香蕉精品二区视频在线 | 禁忌h1v1怀孕 | 亚洲AV永久无码精品澳门 | bbox撕裂bass孕妇 | 国产精品29页 | 小便japanesewctv| a级精品九九九大片免费看 a级动漫 | 国内久久| 我与岳乱短篇小说 | 天美网站传媒入口网址 | 国产精品视频免费看 | 精品无人区麻豆乱码无限制 | 好紧好爽再叫浪一点点潘金莲 | 亚洲国产综合久久久无码色伦 | 大肥婆丰满大肥奶bbw肥 | 国产日日干| 国产第2页| 勾搭已婚高h | 湖南美女被黑人4p到惨叫 | 亚洲激情网 | 好大好深受不了了快进来 | 91九色国产porny | 亚洲AV 无码AV 中文字幕 | les在宿舍吃她奶 | free性丰满hd性欧美厨房 | 久久视热频国产这里只有精品23 | 亚洲天堂99 | 我把寡妇日出水好爽 | 91午夜在线观看 | 爱草影院 |