SpringMVC跳转,响应返回json
1:Springmvc响应跳转方式
回顾:
1:springmvc执行的原理
2:springmvc如何接受用户传递过来的参数 -- 通过方法的形参,方法的参数列表中进行声明即可。
3:springmvc如何解决参数的key和形参不一致的情况, requestParam可以解决,有value, required, default
4:如果客户端传递过来的参数比较多,springmvc如何接受, 判断下,能不能封装成一个对象,可以的话,就用对象,HashMap
5:用户的请求到底是如何到达指定的方法的, 请求映射注解,requestMapping, 类 + 方法
6: requestParam作用,接受参数的,如果没有value,则表示接受所有的参数,如果有value,则表示接受指定的参数并完成封装
7:requestMapping作用, 1: 请求映射, 2:限制客户端的请求方式、
8:springmvc和struts区别
转发:
1:添加成功跳转到成功页面,给出提示,失败跳转到失败页面 ---- jsp
2:添加成功后,跳转到查询的controller中 -- 另外一个程序,添加完成之后,执行查询所有的操作,跳转到所有的用户列表
3:在查询的controller中是否能够获取第一个controller中传递的参数
重定向:
1:添加成功之后重定向到页面,失败后也是定向到失败页面
2:使用重定向,跳转到controller中的其他方法
3:重定向跳转到第二个controller中,获取参数
1:转发
1:转发到页面
注意:springmvc默认使用的就是转发技术,
完整的写法是:return “forward:/xx.jsp”; / - 指的是web目录,一层一层往下查找,注意:此时不走springmvc的试图解析器。
如果希望返回时走试图解析器的话,直接写一个简单的字符串即可,如:return “hello”;此时就会做视图的拼接。
2:转发到controller
转发到其他的方法:
完整的写法为: return “forward:/类上的路径/方法上的路径.do”; 这个是通用
如果调用方法和目标方法在同一个类中,则可以简化写法:return “方法上的路径.do”;
3:转发携带参数
可以使用request对象来传递参数
/*
* 需求 : 添加员工信息,
* 成功,--- 》 转发到某一个具体的页面 ---- 》 恭喜你,添加成功了
* 失败了 --- 》 控制台打印添加失败,页面跳转到首页 ---- 》 首页展示的是所有员工信息,调用的是一个查询所有的方法
* 转发带参数的问题,如果是转发的话,如何在另外一个程序中获取第一个程序存储的参数
*
* */
@RequestMapping("/addEmp.do")
public String addEmp(String chineseName, String englishName , String pwd, HttpServletRequest request){
// 我现在有一个员工的集合,如果用户输入的内容已经存在了,就不让他添加了
List emps = new ArrayList();
emps.add("lili");
emps.add("xiaoli");
emps.add("wenwen");
emps.add("ming");
boolean b = emps.contains(englishName); // 如果有的话则返回true
if(!b){
//添加成功
System.out.println("ok!!!!");
// 默认使用的就是转发,转发到具体的页面 ,
// 如果是一个简单的字符串的话,则表示的是视图的名称,会走视图解析器进行视图的拼接
// return "ok"; // 和下面的写法效果是一样的,这个是走视图解析器的,
// return "forward:/WEB-INF/views/ok.jsp"; // 不走视图解析器,
// 访问另外一个方法的时候,携带参数的
// 转发 : 如何将这个方法中的参数,写到到另外一个方法中 ?
// 使用request
Emp emp = new Emp(chineseName,englishName,pwd);
request.setAttribute("emp",emp);
return "forward:/getEmps.do";
}else{
//失败了
// 如果不希望你的程序走视图解析器的话,则必须要使用完整的写法
// forward:/ == /表示的是web这个文件夹
// 不能直接的回到首页,因为首页没有数据
// 如果需要首页有数据的话,应该调用下面的查询所有的方法,查询所有的方法执行完成之后,返回首页
// return "forward:/index.jsp"; // 转发到页面
//转发到方法 , 执行其他方法 ,
// 如果是转发的话,则语法是 : forward:/ 类上的mapping/方法上的mapping
return "forward:/getEmps.do";
}
}
//查询所有的方法
@RequestMapping("/getEmps.do")
public String getEmps(HttpServletRequest request){
System.out.println("getEmps.do -----------");
List emps = new ArrayList();
Emp e1 = new Emp("丽丽","lili","lili");
Emp e2 = new Emp("琪琪","qiqi","qiqi");
Emp e3 = new Emp("肖肖","bigxiao","smallxiao");
emps.add(e1);
emps.add(e2);
emps.add(e3);
Object emp = request.getAttribute("emp");
System.out.println(emp);
emps.add(emp); // 将用户输入的emp对象添加到容器中
request.setAttribute("emps",emps);
return "forward:/index.jsp";
}
2:重定向
1:重定向到页面
语法 : return “redirect:/xxx.jsp”
注意:重定向也需要 /
需求:用户登录错误之后重定向到登录页面
2:重定向到controller
return “redirect:/类上的requestMapping / 方法上的requestMapping ”
需求:登录成功之后,重定向到另外一个controller中的查询所有用户的方法,返回所有用户的列表
3:重定向携带参数问题
1:url的拼接
2:使用session传递具体的值
3:使用redirectAttributes 这个接口,在接受方法参数的前面要使用@ModelAttribute("key")来接受
3:springmvc两种跳转方式总结
转发:
转发到页面:return “forward:/具体的页面.jsp”; 如果配置了视图解析器的话同时页面也在指定的位置,return “视图名称”;
转发到方法:return “forward:/类上的路径/方法上的路径.do”, 如果目标方法是在一个类中的,可以直接写方法上的路径,return “queryUsers.do”;
参数携带:request,sesssion
重定向:
重定向到页面: return “redirect:/具体的页面.jsp”
重定向到方法: return “redirect:/类上的路径/方法上路径”;
参数的携带:1,url的拼接,2:session, 3:RedirectAttributes,在接受的时候要使用@ModelAttribute("key")
2:响应时返回json
使用jackson , 使用的时候需要导包
可以将java对象转换为json对象,在方法上添加@ResponseBody 注解即可
作用:java对象 --- 》 json对象
Java集合 -- 》 json数组
补充:如果前端传递过来的是json对象呢
Json -- > java 对象 需要使用一个注解 @RequestBody
-1、导包
-2、使用提供的方法进行转换
@requestBody json对象 -- 》 java对象
@responseBody java对象 ---》json对象
1、下载jaskson的依赖
2、使用
1)前端发送ajax请求, - 添加用户,事件,获取每一个输入框的值,封装成json, --- > 访问服务器
Controller中接受前端传递的json数据,将json对象转换为java对象即可,打印
2)发送查询所有的请求,查询所有数据(controller中准备一个集合),转换为json对象数组,然后在
浏览器上打印出来即可。

浙公网安备 33010602011771号