SpringMVC入门与数据绑定11:响应输出结果;(@ResponseBody简介;ModelAndView引入;)

说明:

(1)本篇博客必要性说明:

          ● 在前面几篇博客中,介绍的都是【请求】的内容;即【后端的Controller如何设置url映射】、【后端的Controller如何接收前端请求的数据】等;

          ● 本篇博客就介绍响应的相关内容,即【后端给前端的响应,是如何输出结果的】;

(2)本篇博客的代码沿用自【SpringMVC入门与数据绑定10:中文乱码问题:请求中的中文乱码;(包括:【get:修改Tomcat配置文件】【post:web.xml中配置过滤器】【响应:Spring配置文件中配置转换器】)】的【frist-springmvc项目】;

(3)本篇博客涉及到了JSP的一些内容,如有需要可以快速参考【(4)JavaWeb基础(网页搭建与JavaWeb基础)】中的相关内容;

(4)本篇博客的内容:

          ● 简单介绍了@ResponseBody,具体ResponseBody在实际开发中常用的场景,有待积累和总结;

          ● 引入了ModelAndView对象,有关该对象的详细内容,会在下篇博客中介绍;

目录

一:响应产生结果的两种方式:简介;(@ResponseBody注解,ModelAndView对象)

二:第一种方式:@ResponseBody注解;

1.@ResponseBody简介; 

2.@ResponseBody演示;返回的HTML字符串,会被浏览器解释、渲染,然后显示;

三:第二种方式:ModelAndView对象;

1.ModelAndView对象简介;

2.ModelAndView的一个入门案例;

(1)最简单的一个案例:后端没有传递数据:仅仅演示一下页面的跳转;

(2) 稍微复杂的一个案例:后端传递了数据;


一:响应产生结果的两种方式:简介;(@ResponseBody注解,ModelAndView对象)

说明:

(1)第一种:@ResponseBody:在Controller的方法上,使用@ResponseBody注解,直接产生响应文本;前面接触过很多次,如下图;

(2)第二种:ModelAndView:

         ● 但有的时候,【响应中只包含文本,即浏览器只显示一个文本】是不够的;

         ● 后端在处理请求后,往往需要跳转到一个新的页面,然后这个新的页面获取响应中的数据并展示(这个页面也称作View视图),为此就需要【响应包含一些比较复杂的、有组织的数据】;

         ● 在Spring MVC中,可以利用【ModelAndView对象】(承载数据),再结合【模板引擎】(JSP或FreeMarker等),在前端生成对应的页面;


二:第一种方式:@ResponseBody注解;

1.@ResponseBody简介; 

说明:

(1)Controller方法直接return一个字符串,这个返回的字符串就是单纯给前端浏览器显示的,不涉及任何模板引擎的内容;

(2)在实际开发中,Controller方法return的字符串,一般是JSON格式的字符串;

(3)

         ● 在【SpringMVC入门与数据绑定10:中文乱码问题:请求中的中文乱码;(包括:【get:修改Tomcat配置文件】【post:web.xml中配置过滤器】【响应:Spring配置文件中配置转换器】)】知道,StringHTTPMessageConverter是Spring MVC定义的一个转换器,这个转换器的作用是解决响应中的中文乱码;

         ● 响应中的文本信息(字符串、JSON、XML等)都会被StringHttpMessageConverter的配置所影响;

         ● 自然,Controller方法return的字符串,会被StringHttpMessageConverter所影响;

2.@ResponseBody演示;返回的HTML字符串,会被浏览器解释、渲染,然后显示;

启动Tomcat,观察效果;

说明:

(1)在实际开发中,后端一般不返回HTML片段;因为,这种方式太笨了;尤其对于复杂的页面,这样做的工作量太大了;

(2)在实际工作中,一般采用的策略:【后端产生数据】+【前端的模板引擎】,得到最终的前端页面;

注:虽然,目前看来@ResponseBody在【显示前端页面】上不太适合;但,@ResponseBody还是有很多适用的场景的;


三:第二种方式:ModelAndView对象;

1.ModelAndView对象简介;

 说明:

(1)ModelAndView:通过名字可知,是Model和View的意思;

(2)ModelAndView对象的目的,就是将【数据对象】和【模板引擎】进行绑定;

(3)Spring MVC默认的模板引擎是JSP;自然,也可以通过配置,使用FreeMarker等其他模板引擎;

2.ModelAndView的一个入门案例;

通过一个简单的入门案例,演示通过ModelAndView如何实现【页面的跳转】和【使用JSP显示后端产生的数据】;

(1)最简单的一个案例:后端没有传递数据:仅仅演示一下页面的跳转;

首先,在URLMappingController中定义一个后端的方法;

package com.imooc.springmvc.controller;

import com.imooc.springmvc.entity.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.scheduling.support.SimpleTriggerContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.swing.*;
import java.util.Date;

@Controller
@RequestMapping("um")
public class URLMappingController {

    @GetMapping("/view")
    public ModelAndView showView() {
        ModelAndView mav = new ModelAndView("/view.jsp");
        return mav;
    }
}

然后,编写要跳转到的前端页面view.jsp;

启动Tomcat,观察效果;

说明:

(1)上面的案例,只是演示了一下【使用ModelAndView对象方式的时候,如何实现页面的跳转】,并没有传递数据。而在实际开发中,一般后端会传递数据的。

…………………………………………………… 

(2) 稍微复杂的一个案例:后端传递了数据;

首先,在URLMappingController中,编写一个有传递数据的方法;

package com.imooc.springmvc.controller;

import com.imooc.springmvc.entity.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.scheduling.support.SimpleTriggerContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.swing.*;
import java.util.Date;

@Controller
@RequestMapping("um")
public class URLMappingController {

    @GetMapping("/view")
    public ModelAndView showView(Integer userId) {
        ModelAndView mav = new ModelAndView("/view.jsp");
        User user = new User();
        if (userId == 1) {
            user.setUsername("zhang");
        } else if (userId == 2) {
            user.setUsername("li");
        }
        mav.addObject("u", user);
        return mav;
    }
}

然后, 在前端的view.jsp中接收后端传过来的数据;

启动Tomcat,观察效果;

说明: 

(1)有关JSP的EL表达式等内容, 如有需要可以快速参考【(4)JavaWeb基础(网页搭建与JavaWeb基础)】中的相关内容;

(2)上面的案例可以看到:

          ● 【数据:是后端Controller动态产生的】,【界面:是由JSP动态渲染的】;

          ● 上面的案例也体现了MVC的设计理念:视图和模型解耦;

          ● 而在Spring MVC中,就通过ModelAndView对象,来实现【视图和模型的解耦】,即【“数据产生的过程”和“界面展现的过程”,实现了解耦】;(已经知道,在没有Spring MVC的时候,我们一般把数据放在Servlet/Session/Context对象中;而这儿,我们把数据放在了ModelAndView对象中,可以感受到Spring MVC作了封装~~)

          ● 即在Spring MVC中,通过ModelAndView对象,就能很好的贯彻【MVC的设计理念】;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值