中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC中Controller類數據響應的方式

發布時間:2021-07-29 13:40:26 來源:億速云 閱讀:145 作者:chen 欄目:開發技術

這篇文章主要介紹“SpringMVC中Controller類數據響應的方式”,在日常操作中,相信很多人在SpringMVC中Controller類數據響應的方式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringMVC中Controller類數據響應的方式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • 1. 方法返回值類型

  • 2. 頁面跳轉

    • 2.1 直接返回字符串

    • 2.2 返回 ModelAndView 對象

    • 2.3 視圖前綴和后綴

    • 2.3 重定向和轉發

  • 3. 回寫數據

    • 3.1 直接返回字符串

    • 3.2 返回對象或集合

上篇博客我們了解了請求參數的獲取,那么獲取到請求參數之后,需要對參數進行出來,然后進行數據響應。那么這篇博客我們就來了解 Controller 類如何進行數據響應。

1. 方法返回值類型

在 web 階段我們也了解過數據響應,我們可以簡單的將數據響應分為:頁面跳轉和回寫數據

Controller 類的業務返回的返回值類型有很多,但歸根結底就是用于完成頁面跳轉和回寫數據。我們了解一下常用的幾個返回值類型:ModelAndView, Model,ModelMap,Map,View, String, void ,@ResponseBody,HttpHeaders

2. 頁面跳轉

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

2.1 直接返回字符串

當直接返回一個字符串時,會自動通過視圖解析器解析為物理視圖地址。

@RequestMapping("/user")
public class MyController {
   //請求地址:localhost:8080/user/testReturnString
   @RequestMapping("/testReturnString")
   public String testReturnString() {
   System.out.println("MyController 的 testReturnString 方法執行   了。。。。");
   return "success.jsp";
   }
}

當你的視圖不是位于 user 文件夾下時,客戶端會報 404 錯誤,因為在找不到該視圖。這種方式設置是視圖的相對地址,相對 MyController 類的請求地址,所以我們可以將其設置為絕對地址return "\success.jsp";

2.2 返回 ModelAndView 對象

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

SpringMVC中Controller類數據響應的方式

使用 ModelAndView 對象完成頁面跳轉:

@RequestMapping("test01")
public ModelAndView test01(){
    //創建 modelAndView 對象
    ModelAndView modelAndView =new ModelAndView();
    //設置視圖名稱
    modelAndView.setViewName("/user.jsp");
    //設置模型數據
    modelAndView.addObject("user","zhangsan");
    return  modelAndView;
}

也可以不手動創建 ModelAndView 對象,直接在方法上添加形參,這種方式的ModelAndView 對象創建實參

@RequestMapping("test02")
public ModelAndView test02(ModelAndView modelAndView){
    //設置視圖名稱
    modelAndView.setViewName("/user");
    //設置模型數據
    modelAndView.addObject("user","lisi");
    return  modelAndView;
}

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

@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 視圖前綴和后綴

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

<!--配置內部資源視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

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

@RequestMapping("test01")
public ModelAndView test01(){
    //創建 modelAndView 對象
    ModelAndView modelAndView =new ModelAndView();
    //設置視圖名稱
    modelAndView.setViewName("user");
    //設置模型數據
    modelAndView.addObject("user","zhangsan");
    return  modelAndView;
}

2.3 重定向和轉發

  • 轉發:請求轉發是指將請求再轉發到其他地址,轉發過程中使用的是同一個請求,轉發的地址欄內容不變。重

  • 定向:是指由原請求地址重新定位到某個新地址,原有的請求失效,客戶端看到的是新的請求返回的相應結果。

在SpringMVC 中默認是通過轉發完成跳轉的,當然也可以設置為重定向:

//轉發到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"表示轉發到映射名為main的controller,而return "forward:/main.jsp"表示轉發到main.jsp頁面。

在方法上只有@RequestMapping 時,無論方法返回值是什么,都需要進行跳轉。

3. 回寫數據

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

3.1 直接返回字符串

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

@RequestMapping("test05")
public void test05(HttpServletResponse response) throws IOException {
     response.getWriter().println("zhangsan");
}

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

@RequestMapping("test06")
@ResponseBody //告知 SpringMVC框架 不進行視圖跳轉,直接進行數據響應
public String test06() throws IOException {
    return "lisi";
}

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

<!--json轉換工具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>
@RequestMapping("test07")
@ResponseBody //告知 SpringMVC框架 不進行視圖跳轉,直接進行數據響應
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 幫助我們對對象或集合進行json字符串的轉換并回寫,為處理器適配器配置消息轉換參數,指定使用jackson進行對象或集合的轉換,因此需要在spring-mvc.xml中進行如下配置:

   <!-- 配置處理器映射器 -->
    <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>

通過配置了消息轉換器之后,我們就不需要在業務方法中進行手動轉換了:

@RequestMapping("test08")
@ResponseBody //告知 SpringMVC框架 不進行視圖跳轉,直接進行數據響應
public User test08() throws IOException {
    User user = new User();
    user.setAge(18);
    user.setUsername("zhangsan");
    return  user;
}

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

<!--mvc的注解驅動-->
<mvc:annotation-driven/>

到此,關于“SpringMVC中Controller類數據響應的方式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邯郸市| 南宫市| 通州市| 伊金霍洛旗| 南汇区| 西华县| 汶上县| 桑植县| 金溪县| 通化市| 竹北市| 襄城县| 平凉市| 阿荣旗| 花垣县| 巴楚县| 宁城县| 谷城县| 德昌县| 阿图什市| 合肥市| 隆昌县| 达孜县| 浑源县| 温州市| 嵊泗县| 岳西县| 河北省| 综艺| 黔西| 海晏县| 乐至县| 太康县| 宿州市| 宁河县| 德阳市| 德安县| 巴塘县| 建瓯市| 安康市| 舒兰市|