Controller类中方法返回值详解

本章基于上一章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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robona

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值