原理性的内容就不赘述了,这里直接总结开发时要做的事,首先我们数据响应一般分为两大类,视图跳转和数据回写,也就是当浏览器对服务器发出某特定请求时,服务器会给他跳转一个页面或者返回一些数据给他,跳转页面比较好理解,至于返回的数据怎么用就需要用到交互的方法来接收数据和渲染了,这个后面再继续说明
目录
1. 视图跳转
1.1页面跳转
一般的页面跳转比较简单,接上期代码,我们在controller类里写了一个方法,返回了一个字符串格式的内容,其实那就是页面的跳转,字符串的内容就是这个页面的路径,而这个路径又分为基于当前或者是基于整个应用(webapp包):
这里就是一个基于应用的一个路径,可以看到我在这个类上也设置了一个/user的映射,他的作用是区分开我们的controller,因为有时候不只有一个controller,而这样使用后,若我们返回字符串中的路径不是基于应用的(在开头不加”/“),则他会从我们父映射的文件夹下面寻找,若没有父映射就从当前页面的路径往下找,一般可以用基于webapp的路径,避免出错又简单,而且后期维护解耦也方便。
1.2 使用ModelAndView进行页面跳转
这种跳转我们甚至可以带着数据进行页面跳转,方法如下:
@RequestMapping("/quick2")
public ModelAndView save2(){
/*
Model:模型 封装数据
View: 视图 展示数据
*/
ModelAndView modelAndView = new ModelAndView();
//设置模型数据
modelAndView.addObject("username","dzy");
//设置视图名称
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
这里我们相当于返回了ModelAndView的对象,设置返回的键值对数据和页面,而这个数据是可以通过EL表达式在jsp中进行渲染的:
<%@ page isELIgnored ="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--这个$叫EL表达式,有些默认忽略了需要在上面设置isELIgnored ="false"--%>
<h1>success! ${username}</h1>
</body>
</html>
若发现$取不出值请加上这句:<%@ page isELIgnored ="false" %>
然后我们请求的这个映射后就可以跳转到我们想要的页面并且进行一个简单的数据渲染了。
可不可以不带数据纯跳转?
1. 想纯跳转直接返回字符串形式就行,这样多此一举
2. 也可以,给ModelAndView的对象不用addObject的方法就行了
以上就是需要用到的跳转页面的方式,还有一些简便的可以免设计前后缀的配置没有很常用,实际开发中情况复杂,况且这些跳转方式的代码量已经很小,不如就用这种精确易检查的方法,效率并不低,也能解耦,也能维护,何乐不为。
2. 回写数据
当我们需要回写数据时,提前准备好两步
1. 给回写数据的方法上加上@ResponseBody的注解
2.在spring-mvc.xml里配置<mvc:annotation-driven/>和它的命名空间
下面具体说怎么操作配置
2.1. 回写普通数据
@RequestMapping("/quick4")
@ResponseBody//告诉框架不进行页面跳转,直接返回数据,重点
public String save4(){
return "返回字符串";
}
这里很简单,上文提到的要加上的注解看看注释就明白了,也就是一个控制作用,告诉框架我这里不是要跳转,如果想返回整数,改为Int类型就行,其他数据类型一样的格式,至于内容就是框架以外的事情了,框架这里只管接收。
2.2. 以json数据形式回写集合、对象
有三种方法
1. 自己将各种数据并且为json数据的字符串,再按普通数据一样返回
2. 导入jackson的json转换工具,在方法里使用里面对象的方法,将其他对象或者集合转换为json字符串,然后返回这个对象即可
3. 就是我们着重需要掌握的方法了,使用框架的注解驱动配置,也就是配置一下,可以让我们的spring-mvc框架自动在底层给我们用上json转换工具,我们只需要返回我们想返回的对象或者集合就行。
下面着重第3方法:
在spring-mvc.xml文件里,首先是命名空间的设置:
红线的这两条语句写上即可,有一定格式和规律,可以模仿已存在的beans的那个语句,将所有的beans换为mvc即可。
命名空间定好后在beans里添加这个语句就行:
<!-- 配置注解驱动,默认底层使用json转换器:重要又关键,开发mvc时一开始即写上,命名空间方法掌握-->
<mvc:annotation-driven/>
然后就可以了,我们来到controller,写下面的测试映射:
@RequestMapping("/quick7")
@ResponseBody
//spring-mvc自动将user转换成json格式字符串
public User save7() throws JsonProcessingException {
User user =new User();
user.setUsername("dzy");
user.setAge(20);
return user;
}
访问这个映射后,我们可以看到返回的这个user对象已经被自动转为了json格式的数据,非常方便。
注意@ResponseBody只要是回写数据都要加上。