04.SpringMVC的响应数据和结果视图

返回值分类

  1. 字符串
    1. 指定逻辑视图名,通过视图解析器解析为物理地址
	//指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/pages/success.jsp 
    @RequestMapping(path="/hello")
    public String sayHello(){
        System.out.println("Hello SpringMVC!");
        return "success";
    }
  1. 无返回值(void)
    1. 没有返回值的页面跳转,默认跳转到@RequestMapping的路径的jsp页面上,但没有这个页面所以报404,例如@RequestMapping("/testReturnVoid"),这时页面就会跳到testReturnVoid.jsp页面
    2. 用request来请求转发
    @RequestMapping("/testReturnVoid")
    public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 用request来请求转发
        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
    }

     3. 用response来页面重定向(不能访问WEB-INF里的页面)

	@RequestMapping("/testReturnVoid")
    public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 用response来页面重定向
        // 相当于客户端重新发了一条请求,所以不能访问WEB-INF里的页面
        response.sendRedirect(request.getContextPath()+"/index.jsp");
    }

    4. 通过response指定响应结果

	@RequestMapping("/testReturnVoid")
    public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 通过response指定响应结果,例如响应接收数据
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("json 串");
    }
  • ModelAndView
    1. 通过返回 ModeAndView 对象来实现页面跳转和数据传输,据说底层也是这样做的,比如说Model对象+返回String的形式
    @RequestMapping("/testReturnModelAndView")
    public ModelAndView testReturnModelAndView() {
        ModelAndView mv = new ModelAndView();
        // 就像Model对象的addAttribute()方法一样
        mv.addObject("username", "张三");
        // 指定逻辑视图名,通过视图解析器解析为物理地址,就像有返回值一样
        mv.setViewName("TestOutput");
        return mv;
    }

在这里插入图片描述

转发和重定向

  • forward 转发
    1. controller提供String返回值之后,默认就是请求转发
    2. 如果用了forward: 则路径必须写成成实际视图 url,不能写逻辑视图
    3. 返回值开头必须是forward:
    @RequestMapping("/testForward")
    public String testForward() {
        System.out.println("testForward 方法执行了。。。。");
        // 相当于 request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response)
        return "forward:/WEB-INF/pages/success.jsp";
    }
  • Redirect 重定向
    1. 返回值开头必须是redirect:
    2. jsp 页面不 能写在 WEB-INF 目录中,否则无法找到
    @RequestMapping("/testRedirect")
    public String testRedirect() {
        System.out.println("testRedirect 方法执行了。。。。");
        // 相当于response.sendRedirect("/index.jsp")”,jsp不在WEB-INF文件夹内
        return "redirect:/index.jsp";
    }

ResponseBody 响应 json 数据

  • 作用:
      该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的 数据如:json,xml 等,通过 Response 响应给客户端
  • 加入依赖
        <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>
  • jsp页面的json及按钮
<%--	引入js--%>
<%--    先在springmvc.xml里面对资源放行--%>
<%--    <mvc:resources mapping="/js/**" location="/js/"/>--%>
<script src="js/jquery.min.js"></script>
<script>
        $(function () {
            $("#btn1").click(function () {
                $.ajax({
                	// url对应下面controller的方法
                    url:"CommonTest/testAjax",
                    // url:"CommonTest/testJson",
                    // url:"CommonTest/testReturnJavabean",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123"}',
                    // 规定返回一定是json格式,返回success字符串时注释
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        // data服务器端响应的json的数据,进行解析
                        alert(data);
                        alert(data.username+','+data.password);
                    }
                })
            })
        })
</script>
<button id="btn1">发送ajax的请求1</button>
<button id="btn2">发送ajax的请求2</button>
<button id="btn3">发送ajax的请求3</button>
  • controller里面的代码(接收、接收及方法字符串和接收、更改及返回Javabean)
    /**
     * 响应 json 数据的控制器,如果获取特定的值那就用map来作形参
     */
    @RequestMapping("/testAjax")
    public String testJson(@RequestBody String body) {
        System.out.println(body);
        return "success";
    }
    /**
     *把json的字符串转换成JavaBean的对象,并响应
     */
    @ResponseBody
    @RequestMapping("/testJson")
    public String testJson(@RequestBody User user) {
        System.out.println(user);
        return "success";
    }
    /**
     *把json的字符串转换成JavaBean的对象,并返回实体类
     */
    @ResponseBody
    @RequestMapping("/testReturnJavabean")
    public  User testReturnJavabean(@RequestBody User user) {
        System.out.println(user);
        user.setUsername("赵四");
        return user;
    }
  • 分别的执行结果
    1. 浏览器无响应在这里插入图片描述
    2. 接收及方法字符串
      在这里插入图片描述
    3. 更改及返回Javabean
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值