|
写在前面: 记录自己的SpringMVC学习之旅,若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用!
2.3 数据响应
2.3.1 数据响应方式
主要分为两种,即
- 页面跳转。直接返回字符串,并通过ModelAndView对象返回
- 回写数据。直接返回字符串,返回对象集合
2.3.2 页面跳转
2.3.2.1 返回字符串形式
直接返回字符串:此方式将返回的字符串与视图解析器的前后缀拼接后跳转 比如:
控制器某方法return success
转发资源地址:/jsp/success.jsp
<property name=prefix value =/jsp/><property name=suffix value =.jsp>
返回带有前缀的字符串: -重定向:redirect:/sucess.jsp
- 转发:forward:/jsp/success.jsp
2.3.2.2 返回ModelAndView对象
2.3.2.2.1 ModelAndView对象
ModelAndView对象是一个封装好的模型数据视图对象,可以理解为Model+View的集合体。此对象可以设置模型数据,设置将要跳转的视图名称。另外,Model也可以单独来使用。
2.3.2.2.2 用法
一般在UserController类中的方法使用,有两种用法,如下:
@RequestMapping("/demo1")
public ModelAndView UsingModelAndView()
{
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("userName","demo");
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping("/demo2")
public ModelAndView UsingModelAndView1(ModelAndView modelAndView)
{
modelAndView.addObject("userName","modelAndView1");
modelAndView.setViewName("success");
return modelAndView;
}
备注:其中的Model也可以单独来使用,如下
@RequestMapping("/demo3")
public String UsingModelAndView2(Model model)
{
model.addAttribute("userName","使用Model");
return "success";
}
2.3 回写数据
2.3.1 直接返回字符串
Web基础阶段:使用
response.getWrite().print("Hello World");
可以将字符串直接返回给服务器! 在Controller层中直接会写字符串方法:
- 使用基础方法。通过SpringMVC框架注入的Response对象,使用response.getWrite().print(“xxx”)回写数据,此时不需要视图跳转,业务方法返回值为void。如下:
@ReuqestMapping("/backwrite1")
public void backWrite1(HttpServletResponse response) throws Exception
{
response.getWrite().print("Hello World");
}
2.3.2 返回对象或集合
使用处理器转换器RequestMappingHandlerAdapter进行自动配置,配置如下:
<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>
而控制器方法只返回对象即可,如图![![[Pasted image 20211128204856.png]]](https://img-blog.csdnimg.cn/a1ead27f551f4d6f9f7ad1449301638b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx6Iqx55qE5bCP6ISR55Oc,size_16,color_FFFFFF,t_70,g_se,x_16) 优化: 在方法上添加@ResponseBody可以直接返回JSON格式字符串,但xml配置太麻烦,可用注解直接来替代繁琐的xml配置,即<mvc:annotation-driven/>。 注意: 处理映射器,处理适配器,视图解析器是SpringMVC的三大组件。使用<mvc:annotation-driven/>自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在springmvc中xml配置文件中替代注解处理映射器和适配器的配置。而且使用<mvc:annotation-driven/>默认底层会集成Jackson进行对象或集合的JSON格式字符串转换。
2.4 代码操作
2.4.1 项目准备
还是使用上一节SpringMVC简介中的项目。
2.4.2 使用返回ModelAndView对象
在UserController类中新建一方法,设置ModelAndView对象,代码如下:
@RequestMapping("/demo1")
public ModelAndView UsingModelAndView()
{
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("userName","demo");
modelAndView.setViewName("success");
return modelAndView;
}
更改success视图页面,如图![![[Pasted image 20211126205820.png]]](https://img-blog.csdnimg.cn/e6bbb87e51944037a9ec34a7fb0579d2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx6Iqx55qE5bCP6ISR55Oc,size_15,color_FFFFFF,t_70,g_se,x_16)
2.4.3 回写数据
2.4.3.1 资源准备
在pom文件中加入servlet-api及jackson相关的依赖,如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
在根目录新建实体类User,用于对象返回。如图![![[Pasted image 20211128195741.png]]](https://img-blog.csdnimg.cn/5f28ed17cdef487cb4bbd9ea241d6c45.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx6Iqx55qE5bCP6ISR55Oc,size_20,color_FFFFFF,t_70,g_se,x_16)
2.4.3.2 代码实现回写字符串
回写字符串主要有两种,即普通Web基础的和SpringMVC框架的,如下:
- 方法一。在UserController类中写入方法,如图
![![[Pasted image 20211128194304.png]]](https://img-blog.csdnimg.cn/b3d4b9836b6146838f0e768175512dce.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx6Iqx55qE5bCP6ISR55Oc,size_20,color_FFFFFF,t_70,g_se,x_16) - 方法二。将需要回写的字符串直接返回,此时需要通过@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳转,而是直接在Http响应体中 返回,代码如下:
@ResponseBody
public String backWrite2()
{
return "Hello ,Spring MVC!";
}
2.4.3.3 回写对象或集合
对象或集合的返回一般都是以JSON字符串的方式进行返回,代码如下:
@RequestMapping("backwrite3")
@ResponseBody
public String backWrite3() throws Exception
{
User user = new User();
user.setName("tom");
user.setAge(20);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
return json;
}
@RequestMapping("backwrite4")
@ResponseBody
public User backWrite4() throws Exception
{
User user = new User();
user.setName("tom");
user.setAge(20);
return user;
}
2.5 测试
2.5.1 测试ModelAndView对象
运行项目后,依旧如图操作![![[Pasted image 20211126205609.png]]](https://img-blog.csdnimg.cn/a4332b77a8614ce281e62ad3e992181c.png) 会跳转到成功页面,如图![![[Pasted image 20211126211257.png]]](https://img-blog.csdnimg.cn/eb8a80233c10481aa40126dd2994bf52.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx6Iqx55qE5bCP6ISR55Oc,size_20,color_FFFFFF,t_70,g_se,x_16) 若看不到userName值的话,就在success.jsp加入如图语句![![[Pasted image 20211126211223.png]]](https://img-blog.csdnimg.cn/dc224bba6936496ead8e8f5b789f353c.png)
2.5.2 测试回写数据
同上操作,可在浏览器页面看见意料中的文字,结果依次如图 ![![[Pasted image 20211127221306.png]]](https://img-blog.csdnimg.cn/c3489288c9914912bde0f01cc0790a81.png)   
|