SpringMVC——7.响应数据与结果视图

1.返回String

核心控制器会将返回的字符串抛到视图解析器中解析出完整页面路径,然后将根据页面中的格式将model中的数据取出对页面进行渲染。最后将渲染好的页面返回给前端。这是最常见基本的响应方式,前面基本都是这么写的。这里不做赘述。有需要的去前面看。

2.返回void

返回void意味着我们不希望通过视图解析器解析页面,但是如果我们什么都不写,默认会去查找当前控制器方法对应的请求路径+.jsp。所以这时候我们需要在处理器方法中通过转发或者重定向来选择返回的视图。

1)网页部分

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <!--testVoid-->
    <a href="testVoid">testVoid</a>
</body>
</html>

 2) 控制器 

@RequestMapping("/redirect")
    public String redirect(){
        return "success";
    }

    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request,HttpServletResponse response) throws Exception {
        response.sendRedirect(request.getContextPath()+"/redirect");
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        return;
    }

注意:转发是一次将请求转到另一个页面做处理,而重定向则是再模拟用户发起一次请求,页面上的地址会跳转两次。因此是跳转后的页面是无法访问到你一开始发出的request的。所以重定向是两次请求,转发则是一次请求。

3.返回ModelAndView

ModelAndView是Spring提供的一个对象,可以用来调整具体的jsp视图

1)网页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <!--testModelAndView-->
    <a href="testModelAndView">testModelAndView</a>
</body>
</html>

 2) 控制器 

@RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        ModelAndView mv = new ModelAndView();
        User user = new User();
        user.setName("张三");
        mv.addObject("user",user);
        mv.setViewName("success");
        return mv;
    }

这个方式与返回String的方式相似,但其实返回String的方式的底层实现也是ModelAndView的形式 

4.使用关键字的方式实现转发与重定向

1)网页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <!--testKeyWord-->
        <a href="testKeyWord">testKeyWord</a>
</body>
</html>

 2) 控制器 

@RequestMapping("/redirect")
    public String redirect(){
        return "success";
    }

@RequestMapping("/testKeyWord")
    public String testKeyWord(){
        //return "forward:/WEB-INF/pages/success.jsp";
        return "redirect:/redirect";
    }

5.ResponseBody响应json数据

当前端页面通过ajax向后台发起ajax请求时,需要后台返回json格式的数据给前端,这是需要用到这个注解。

1.DispatcherServlet会拦截到所有资源,导致静态资源(css.js.img)也会被拦截到,我们需要解决这个问题
 
<mvc:resources location="/js/" mapping="/js/**"/>

在springmvc配置文件中添加此配置告诉控制器,对于这个文件夹与mapping对对应的路径请求我们不再拦截。记住位置不要写反,因为我写反了就页面资源404.

2.编写页面代码发起ajax请求

<%--
  Created by IntelliJ IDEA.
  User: 50422
  Date: 2020/4/26
  Time: 12:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-3.2.1.min.js"></script>
    <script>
        $(function () {
            为按钮赋予点击事件
            $("#btn").click(function () {
                //ajax请求属性设置
                $.ajax({
                    url:"testAjax",//请求路径
                    contentType:"application/json;charset=UTF-8",//编码格式
                    data:'{"name":"hehe","age":"33"}',//数据体,json格式
                    dataType:"json",//数据类型
                    type:"post",//请求方式
                    //请求成功后的回调函数
                    success:function (data) {
                        alert(data.name+"/"+data.age);
                    }
                });
            });
        });
    </script>
</head>
<body>

    <!--ajax-->
    <button id="btn" >发送ajax请求</button>
</body>
</html>

3.控制器代码

@RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println(user);
        user.setName("老子回来了");
        return user;
    }

通过RequestBody与ResponseBody可以对json格式与pojo对象进行一个注入和转换,但是要添加jackson的jar包

4.maven添加依赖

<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>

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

原来是肖某人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值