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"%>
    
    <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地址,就能看到如下图所示的效果了。
    SpringMVC快速入门第七讲——Controller类的方法返回值_第1张图片
    温馨提示:如果使用原始的方式做页面跳转,那么必须给定jsp页面的完整路径。
  2. 通过response实现页面重定向,例如:
    在这里插入图片描述
    此时,在浏览器地址栏中输入http://localhost:8080/04-springmvc-mybatis/queryVoid.action这样的url访问地址进行访问,你就会看到如下图所示的效果了。
    SpringMVC快速入门第七讲——Controller类的方法返回值_第2张图片
    当然了,我们也可以通过response来指定响应结果,例如响应一串字符串,就像下面这样。
    SpringMVC快速入门第七讲——Controller类的方法返回值_第3张图片
    此时,在浏览器地址栏中输入http://localhost:8080/04-springmvc-mybatis/queryVoid.action这样的url访问地址进行访问,你就会看到如下图所示的效果了。
    SpringMVC快速入门第七讲——Controller类的方法返回值_第4张图片

返回字符串

逻辑视图名

Controller类中的方法返回字符串可以指定逻辑视图名,然后通过视图解析器解析为物理视图地址。
SpringMVC快速入门第七讲——Controller类的方法返回值_第5张图片

重定向(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";

SpringMVC快速入门第七讲——Controller类的方法返回值_第6张图片
但如果你使用的是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。所以转发前请求的参数在转发后仍然可以读取到。
SpringMVC快速入门第七讲——Controller类的方法返回值_第7张图片

你可能感兴趣的:(SpringMVC快速入门第七讲——Controller类的方法返回值)