JavaWeb框架 -SpringMVC02

响应数据和结果视图

  1. SpringMVC中的处理器方法的返回值用来指定页面跳转到哪个视图,处理器的返回值可以为String,void,ModelAndView对象
    • 返回值分类的详解:
      • String类型:
        • controller 中的方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址
        • Spring容器配置文件bean.xml中配置的视图解析器中注入prefix(前缀)和suffix(后缀)属性,所以视图解析器会把处理器返回的"xxx"解析为"/WEB-INF/pages/xxx.jsp",再请求对应视图.这是一个请求转发过程,浏览器地址栏不会发生变化
          //指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/pages/success.jsp
          @RequestMapping("/testReturnString")
          public String testReturnString() {
          System.out.println("AccountController 的 testReturnString 方法执行了。。。。");
          return "success"; 
          }
          
      • void类型:
        • 执行完处理器方法体内代码后,不进行请求转发,而直接转发到当前URL.若没有在web.xml中配置当前对应的url-pattern,则会返回404错误
        • 这样的形式,可以使用Servlet原生的API进行页面的跳转,就是将Servlet原生的API当做控制器方法中的参数 使用重定向 或者是请求转发等来进行页面的跳转
          // 请求转发 注意的是:手动的转发不能使用视图解析器
          request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
          // 重定向 注意的是:重定向是不能直接访问WEB-INF文件夹下的内容的,web-inf的权限高
          response.sendRedirect("testRetrunString");
          //使用response来指定响应的结果 如 json数据
          response.setCharacterEncoding("utf-8");
          response.setContentType("application/json;charset=utf-8");
          response.getWriter().write("json 串");
          
      • ModelAndView类型:
        • ModelAndView是SpringMVC中提供的一个内置的对象,该对象也能当做控制器方法中的返回值 这样能更加灵活的进行属性的添加或者是视图的跳转
        • 常用的方法有两种:
          • addObject:是将对象存储到modelAndView中 最终会将对象存到request域对象中
          • setViewName:指定跳转的页面 使用的是视图解析器 返回String类型的方式同样底层是使用的是ModelAndView
        • 注意:返回ModelAndView 类型时,浏览器跳转只能是请求转发
          @RequestMapping("/testModelAndView")
              public ModelAndView testModelAndView(){
                  // 首先创建对象ModelAndView 两个常用的方法
                  ModelAndView modelAndView = new ModelAndView();
                  System.out.println("testModelAndView方法执行成功了");
                  User  user = new User();
                  user.setUsername("美美");
                  user.setPassword("123");
                  user.setAge(30);
                  // 常用的方法1 将user对象存储到modelAndView中 最终会将对象存到request域对象中
                  modelAndView.addObject("user", user);
                  // 常用的方法2 指定跳转的页面使用的是视图解析器 返回String类型的方式同样底层是使用的是ModelAndView
                  modelAndView.setViewName("success");
                  return modelAndView;
              }
          
  2. SpringMVC框架提供的请求转发和重定向
    • 请求转发: String 类型的返回值,默认就是请求转发
      • 要使用SpringMVC框架提供的请求转发,只需要在处理器方法返回的viewName字符串首加上forward:即可,要注意的是,此时forward:后的地址不能直接被视图解析器解析,因此要写完整的相对路径
        @RequestMapping("/testForward")
        public String testForward() {
        	System.out.println("AccountController 的 testForward 方法执行了。。。。");
        	return "forward:/WEB-INF/pages/success.jsp"; 
        }
        
      • 这样的形式相当于:request.getRequestDispatcher("实际的url").forward(request,response)使用请求转发,既能转发到jsp中,也能转发到其他的控制器方法中
    • 重定向:
      • 使用SpringMVC框架提供的请求重定向,只需要在处理器方法返回的viewName字符串首加上redirect:即可,要注意的是,此时redirect:后的地址要写相对于ContextPath的路径 (一般使用request.getContextPath()来获取contextPath)
        @RequestMapping("/testForwardOrRedirect")
        public String  testForwardOrRedirect(){
            System.out.println("testForwardOrRedirect 方法执行成功了");
            // 重定向:使用的是redirect关键字 但是这样的方式不需要在加上项目的名称
            return "redirect:/index.jsp";
        }
        
      • 注意的一点:是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF 目录中,否则无法找到 原因上面说了
  3. SpringMVC响应json格式的数据
    • 使用的注解是:@ResponseBody
      • 作用:将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的
        数据如:json,xml 等,通过 Response 响应给客户端
    • 准备工作:
      • 在配置文件中进行前端控制器的配置:静态资源不进行拦截否则前端控制器会将所有的资源进行拦截 否则访问静态资源或报404错误 使用的标签是<mvc:resources>
        <!-- location属性必须是一个有效的目录,因此必须以 / 结尾 -->
        <mvc:resources location="/css/" mapping="/css/**"/>
        <mvc:resources location="/images/" mapping="/images/**"/>
        <mvc:resources location="/js/" mapping="/js/**"/>
        
      • Springmvc 默认用 MappingJacksonHttpMessageConverter(类型转换器) 对 json 数据进行转换,需要导入jackson 的包 在pom.xml文件中添加的坐标:
        <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-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency
        
        注意2.7.0 以下的版本用不了
      • 在jsp页面中发送json数据 使用的是jQuery
        <script>
        // 页面加载,绑定单击事件
        $(function () {
            $("#btn").click(function () {
                // 发送ajax请求
                $.ajax({// 使用的是ajax的形式
                    // 配置请求参数
                    url: "user/testAjax",
                    contentType: "application/json;charset=UTF-8",
                    dataType: "json",
                    type: "post",
                    // 请求的json数据
                    data: '{"username":"myname","password":"mypassowrd","age":30}',
                    // 回调函数,处理服务器返回的数据returnData
                    success: function (returnData) {
                        // 我们假定服务器返回的是一个user对象,将其输出在控制台上
                        console.log(returnData);            
                        }
                });
            });
        });
        </script>
        
      • 使用@RequestBody注解响应json数据
        @Controller
        @RequestMapping("/user")
        public class UserController {
            @RequestMapping("/testAjax")
            @ResponseBody
            public User testAjax(@RequestBody User user) {
        
                System.out.println(user);
                
                // 将user对象返回给前端页面
                return user;
            }
        }
        
      • 在前端页面中显示数据
        在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上山打卤面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值