本章基于上一章spring mvc获取请求参数 https://blog.csdn.net/qq_34598667/article/details/84075770 案例
本章主要讲解Controller中方法的返回值的使用类型:
- ModelAndView
- void
- String
- 逻辑视图名
- Redirect重定向
- forward转发
ModelAndView
Controller类方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。
在/WEB-INF/jsp下新建demo.jsp
<body>
This is demoController!!!
获取绑定数据:${msg }
</body>
1)可以使用有参构造直接返回一个视图名指定view,不绑定数据
在controller包下新建DemoController:
@Controller
@RequestMapping("/demo")
public class DemoController {
@RequestMapping("/demo01.do")
public ModelAndView demo01(){
//直接返回一个视图名
return new ModelAndView("jsp/demo");
}
}
2)可以使用ModelAndView同时绑定数据以及指定view
在Controller中添加demo02方法:
@RequestMapping("/demo02.do")
public ModelAndView demo02(){
//返回一个ModelAndView并绑定一个数据
ModelAndView model = new ModelAndView("jsp/demo");
model.addAttribute("msg","READ ME!");
return model;
}
测试,在浏览器访问:
void无返回值
使用SpringMVC框架默认支持的参数request和response来完成响应:
1)使用request实现转发
添加demo03方法
@RequestMapping("/demo03.do")
public void demo03(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
//绑定转发数据
request.setAttribute("msg", "READ ME AGAIN!");
//获得转发器 执行转发--需指定转发完整路径
request.getRequestDispatcher("/WEB-INF/jsp/demo.jsp").forward(request, response);
}
2)使用response重定向
添加demo04方法:
@RequestMapping("/demo04.do")
public void demo04(HttpServletRequest request,HttpServletResponse response) throws IOException {
//重定向到demo03.do
response.sendRedirect(request.getContextPath()+"/demo/demo03.do");
}
3)使用response做出响应结果(JSON、AJAX请求等)
添加demo05方法:
@RequestMapping("/demo05.do")
public void demo05(HttpServletRequest request,HttpServletResponse response) throws IOException {
//响应数据
PrintWriter out=response.getWriter();
out.write("This is response!");
out.close();
}
返回字符串
返回的字符串可以有三种解读
1)返回逻辑视图名
字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
在Controller中添加方法demo06:
@RequestMapping("/demo06.do")
public String demo06(Integer id){
System.out.println(id);
//返回逻辑视图名
return "jsp/demo";
}
返回的“jsp/demo”,会经过视图解析器解析为jsp物理路径,功能相当于new ModelAndView()
2)"forward: " 转发
forward方式相当于“request.getRequestDispatcher().forward(request,response)”,功能完全一样,所以转发前请求的参数在转发后仍然可以读取到。
在controller中添加demo07方法:
@RequestMapping("/demo07.do")
public String demo07(Integer id){
//转发
return "forward:/demo/demo06.do";
}
3)"redirect: " 重定向
redirect方式相当于“response.sendRedirect()”,功能完全一样。如果要把参数传到下一个请求可是使用路径传参。
在controller中添加方法demo08:
@RequestMapping("/demo08.do")
public String demo08(Integer id){
//重定向
return "redirect:/demo/demo07.do?id="+id;
}