IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringMVC的数据响应 -> 正文阅读

[Java知识库]SpringMVC的数据响应

SpringMVC的数据响应

1、数据响应方式

  1. 页面跳转

    • 直接返回字符串

      此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转

      spring-mvc.xml配置文件中设置如下

      <!--配置内部资源视图解析器-->
          <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <!--前缀-->
              <property name="prefix" value="/jsp/"></property>
              <!--后缀-->
              <property name="suffix" value=".jsp"></property>
              <!--最后拼接成完成的请求路径为:/jsp/资源视图名称.jsp-->
          </bean>
      

      返回字符串视图名称

      @Controller
      @RequestMapping("/user")
      public class UserController {
      
          @RequestMapping(value = "/quick",method = RequestMethod.POST,params = {"username"})
          public String save(){
              System.out.println("Controller save running....");
              return "success";
          }
      }
      

      两者结合起来的请求转发资源地址是:/jsp/success.jsp

      转发可以在前面添加forward:作为前缀,默认可以不写forward:/jsp/success.jsp

      重定向可以在前面添加redirect:作为前缀,例如:redirect:/success.jsp

    • 通过ModelAndView对象返回

      重新复制一个save2()方法来完成ModelAndView返回视图

      返回的对象是ModelAndView

      在方法中new一个ModelAndView对象,通过对象中的setViewName设置返回视图的名称

      通过addObject可以设置模型的携带数据,jsp页面就可以接收到

      启动服务器访问:http://localhost:8080/Spring_MVC_war_exploded/user/quick2路径就可以转发中success.jsp页面上,并且携带的username数据也可以输出页面

      package com.zcl.controller;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.servlet.ModelAndView;
      
      @Controller
      @RequestMapping("/user")
      public class UserController {
          @RequestMapping(value = "/quick2")
          public ModelAndView save2(){
              /*
               Model:模型,封装数据
               View:视图,展示页面
               */
              ModelAndView modelAndView = new ModelAndView();
              // 设置模型数据
              modelAndView.addObject("username","zhangsan");
              // 设置返回的视图名称
              modelAndView.setViewName("success");
              return modelAndView;
          }
      }
      
      

      username.jsp页面

      <%--
        Created by IntelliJ IDEA.
        User: zhong
        Date: 2022/4/23
        Time: 22:48
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <h1>Success${username}</h1>
      </body>
      </html>
      
      

      ModelAndView对象返回知识拓展

      书写形式2,通过方法来接收ModelAndView对象并返回

      原理:SpringMVC对对应的方法的参数,可以帮你进行相应的注入,解析发现参数有ModelAndView需要springmvc来提供,那么springmvc就会为方法提供一个ModelAndView对象【一种注入思想】

      package com.zcl.controller;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.servlet.ModelAndView;
      
      @Controller
      @RequestMapping("/user")
      public class UserController {
          @RequestMapping(value = "/quick3")
          public ModelAndView save3(ModelAndView modelAndView){
              // 设置模型数据
              modelAndView.addObject("username","书写形式2");
              // 设置返回的视图名称
              modelAndView.setViewName("success");
              return modelAndView;
          }
      }
      
      

      启动访问:http://localhost:8080/Spring_MVC_war_exploded/user/quick3

      页面会输出Success书写形式2

      **书写形式3:**模型与视图拆开

      package com.zcl.controller;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.servlet.ModelAndView;
      
      @Controller
      @RequestMapping("/user")
      public class UserController {
          @RequestMapping(value = "/quick4")
          public String save4(Model model){
              // 模型数据添加
              model.addAttribute("username","形式3");
              return "success";
          }
      }
      
      

      启动访问:http://localhost:8080/Spring_MVC_war_exploded/user/quick4

      页面输出结果:Success形式3

      **书写形式4:**视图HttpServletRequest存储打子作用域里面

      不常用,一般都是使用框架自己封装好的

      /**
       * 存储数据到作用域里面
       * 不常用
       * @param request
       * @return
       */
      @RequestMapping(value = "/quick5")
      public String save5(HttpServletRequest request){
          request.setAttribute("username","存储到作用域里面");
          return "success";
      }
      
  2. 回显数据

    • 直接返回字符串

      1. 通过SpringMVC框架注入的response对象,使用response.getWriter().print(“Hello World”)回写数据,此时不需要视图跳转,业务返回方法值为void

        @Controller
        @RequestMapping("/user")
        public class UserController {
            /**
             * 不返回视图直接请求打印
             * @param response
             * @throws IOException
             */
            @RequestMapping(value = "/quick6")
            public void save6(HttpServletResponse response) throws IOException {
                response.getWriter().print("HelloWorld");
            }
        }
        

        启动访问:http://localhost:8080/Spring_MVC_war_exploded/user/quick6,即可输出上面打印的HelloWorld

      2. 将需要回写的字符串直接返回,但此时需要通过==@ResponseBody注解==告知Spring MVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。

        重点掌握

        @Controller
        @RequestMapping("/user")
        public class UserController {
        	/**
             * 通过 @ResponseBody注解告知springmvc框架改方法不进行页面跳转,直接返回字符串
             * @return
             * @throws IOException
             */
            @RequestMapping(value = "/quick7")
            @ResponseBody
            public String save7() throws IOException {
                return  "HelloWorld2";
            }
        }
        

        启动访问:http://localhost:8080/Spring_MVC_war_exploded/user/quick7,即可输出上面打印的HelloWorld2

      3. 原始回写json格式字符串

        @Controller
        @RequestMapping("/user")
        public class UserController {
        	/**
             * 返回指定的字符串格式
             * @return
             * @throws IOException
             */
            @RequestMapping(value = "/quick8")
            @ResponseBody
            public String save8() throws IOException {
                return  "{\"username\",\"zhangsan\",\"age\",\"18\"}";
            }
        }
        

        原始的直接写回,并不建议

      4. 通过json转换工具将对象转换并返回json对象

        json转换工具的依赖坐标【两个不同的】

        pox.xml包下写入

        <!--导入json格式转换依赖坐标-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <!--下面是3个一起的json转换坐标-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>
        

        创建com.zcl.domain包下创建User

        package com.zcl.domain;
        
        public class User {
            private String username;
            private int age;
        
            public String getUsername() {
                return username;
            }
        
            public void setUsername(String username) {
                this.username = username;
            }
        
            public int getAge() {
                return age;
            }
        
            public void setAge(int age) {
                this.age = age;
            }
        
            @Override
            public String toString() {
                return "User{" +
                        "username='" + username + '\'' +
                        ", age=" + age +
                        '}';
            }
        }
        
        

        标准的javabean对象

        @Controller
        @RequestMapping("/user")
        public class UserController {
        	/**
             * 通过json转换工具回写实体类对象
             * @return
             * @throws IOException
             */
            @RequestMapping(value = "/quick9")
            @ResponseBody
            public String save9() throws IOException {
                User user = new User();
                user.setUsername("zhangsan");
                user.setAge(18);
                // 第二种json转换工具
                ObjectMapper objectMapper = new ObjectMapper();
                String json = objectMapper.writeValueAsString(user);
                // 第一种转换方式
                String json1 = JSON.toJSONString(user);
                return  json1;
            }
        }
        

        使用了两个不同的json转换工具进行转换介可以输出

    • 返回对象或集合

      直接返回具体的对象或者集合

      总要的核心配置

      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"/>
                  </list>
              </property>
          </bean>
      

      使用如下代码简化上面的核心配置,以后使用springMVC先将下面的配置写上

      引入的空间:xmlns:mvc=“http://www.springframework.org/schema/mvc”

      约束位置: http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

      核心代替代码:mvc:annotation-driven/

      请对照spring-mvc.xml核心配置文件,补充最后一个配置

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:mvc="http://www.springframework.org/schema/mvc"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="
                                 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
      
          <!--组件扫描-->
          <context:component-scan base-package="com.zcl.controller"/>
      
          <!--配置内部资源视图解析器-->
          <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <!--前缀-->
              <property name="prefix" value="/jsp/"></property>
              <!--后缀-->
              <property name="suffix" value=".jsp"></property>
              <!--最后拼接成完成的请求路径为:/jsp/资源视图名称.jsp-->
          </bean>
      
          <!--配置处理器映射器-->
          <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
              <property name="messageConverters">
                  <list>
                      &lt;!&ndash;注入json的转换器&ndash;&gt;
                      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
                  </list>
              </property>
          </bean>-->
      
          <!--mvc注解驱动,替换上面的json转换器-->
          <!--需要在顶部写入对应的引用空间和约束-->
          <mvc:annotation-driven/>
      </beans>
      

      实现代码

      @Controller
      @RequestMapping("/user")
      public class UserController {
      	/**
           * 根据springmvc框架来进行转换
           * @return
           * @throws IOException
           */
          @RequestMapping(value = "/quick10")
          @ResponseBody
          public User save10() throws IOException {
              User user = new User();
              user.setUsername("zhangsan");
              user.setAge(18);
              return  user;
          }
      }
      

      重启服务器访问一样会输出json格式

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 11:57:32  更:2022-04-29 11:59:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:00:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码