SpringMVC快速入门第七讲——Controller类的方法返回值

本讲所有案例代码的编写均建立在前文《SpringMVC快速入门第六讲——SpringMVC高级参数绑定与@RequestMapping注解》的案例基础之上,因此希望读者能仔细阅读这篇文章。

返回ModelAndView

在Controller类方法中定义ModelAndView对象并返回,该对象可添加Model数据以及指定View。之前我就已讲过,所以在此并不过多赘述。

返回void

在Controller类方法形参上可以定义request和response,并使用request或response响应用户请求。

  1. 使用request来跳转页面,例如:
    在这里插入图片描述
    如果现在Controller类方法的返回值是void,那么在Controller类方法中就应使用request来跳转页面。所以,我们可以在ItemController类中编写一个返回值是void的如下方法。
    @RequestMapping("queryVoid")
    public void queryVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
    	//request响应用户请求
    	request.setAttribute("msg", "这个是requst响应的消息");
    	request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request, response);
    }
    
    然后,在WebContent/WEB-INF/jsp目录下创建一个msg.jsp页面。
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>温馨提示</title>
    </head>
    <body>
    	${msg }
    </body>
    </html>
    
    接着,发布咱们的项目到Tomcat服务器上,并启动Tomcat服务器,在Google Chrome浏览器地址栏中输入http://localhost:8080/04-springmvc-mybatis/queryVoid.action这样的url地址,就能看到如下图所示的效果了。
    在这里插入图片描述
    温馨提示:如果使用原始的方式做页面跳转,那么必须给定jsp页面的完整路径。
  2. 通过response实现页面重定向,例如:
    在这里插入图片描述
    此时,在浏览器地址栏中输入http://localhost:8080/04-springmvc-mybatis/queryVoid.action这样的url访问地址进行访问,你就会看到如下图所示的效果了。
    在这里插入图片描述
    当然了,我们也可以通过response来指定响应结果,例如响应一串字符串,就像下面这样。
    在这里插入图片描述
    此时,在浏览器地址栏中输入http://localhost:8080/04-springmvc-mybatis/queryVoid.action这样的url访问地址进行访问,你就会看到如下图所示的效果了。
    在这里插入图片描述

返回字符串

逻辑视图名

Controller类中的方法返回字符串可以指定逻辑视图名,然后通过视图解析器解析为物理视图地址。
在这里插入图片描述

重定向(redirect)

Contrller类方法返回结果可以重定向到一个url地址,例如商品信息修改提交后需要重定向到商品列表查询方法,但是请注意参数是无法直接带到商品列表查询方法中的。

@RequestMapping(value="updateItem", method={RequestMethod.POST, RequestMethod.GET})
public String updateItem(Item item) {
	itemService.updateItem(item);
	return "redirect:itemList.action";//请求重定向
}

其实,以上redirect方式相当于response.sendRedirect(…),请求重定向后浏览器的地址栏变为重定向后的地址,因为请求重定向即执行了一个新的request和response。由于新发起了一个request,所以原来的参数在请求重定向时就不能传递到下一个url了。如果要继续传递参数,那么可以在itemList.action后边加参数,就像下面这样。

return "redirect:itemList.action?id=xxx&name=xxx";

在这里插入图片描述
但如果你使用的是Model接口,那么SpringMVC框架会自动将Model中的数据拼装到itemList.action后面。

转发(forward)

转发意味着Controller类方法执行后可以继续执行另一个Controller类方法,例如商品信息修改提交后转发到商品列表页面,这时,修改商品的id参数等可以直接带到商品列表查询方法中。

@RequestMapping(value="updateItem", method={RequestMethod.POST, RequestMethod.GET})
public String updateItem(Item item) throws IOException {
	itemService.updateItem(item);
	//请求转发到itemList.action
	return "forward:itemList.action";//请求转发,可以带上request参数
}

其实,forward方式相当于request.getRequestDispatcher(…).forward(request,response),请求转发后浏览器地址栏还是原来的地址。请求转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。
在这里插入图片描述

  • 15
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李阿昀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值