天天看点

SpringMVC的响应数据的返回值分类

响应数据的返回值分类

  1. 1. 返回字符串

    Controller方法返回值是字符串,可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

    1. @RequestMapping(value="/hello")
            public String sayHello() {
                System.out.println("Hello SpringMVC!!");
                // 跳转到页面
                return "success";
            }
                 
    2. 具体的应用场景
      @Controller
      @RequestMapping("/user")
      public class UserController {
      	
      	/**
      	 * 请求参数的绑定
      	 */
      	@RequestMapping(value="/initUpdate")
      	public String initUpdate(Model model) {
      		// 模拟从数据库中查询的数据
      		User user = new User();
      		user.setUsername("张三");
      		user.setPassword("123");
      		user.setMoney(100d);
      		user.setBirthday(new Date());
      		model.addAttribute("user", user);
      		return "update";
      	}
      	
      }
      
      	<h3>修改用户</h3>
      	${ requestScope }
      	<form action="user/update" method="post">
      		姓名:<input type="text" name="username" value="${ user.username }"><br>
      		密码:<input type="text" name="password" value="${ user.password }"><br>
      		金额:<input type="text" name="money" value="${ user.money }"><br>
      		<input type="submit" value="提交">
      	</form>
                 
    2. 返回值是void
    1. 如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。

      默认会跳转到@RequestMapping(value="/initUpdate") initUpdate的页面。

    2. 可以使用请求转发或者重定向跳转到指定的页面
      @RequestMapping(value="/initAdd")
      	public void initAdd(HttpServletRequest request,HttpServletResponse response) throws Exception {
      		System.out.println("请求转发或者重定向");
      		// 请求转发
      		// request.getRequestDispatcher("/WEB-INF/pages/add.jsp").forward(request, response);
      		// 重定向
      		// response.sendRedirect(request.getContextPath()+"/add2.jsp");
      		
      		response.setCharacterEncoding("UTF-8");
      		response.setContentType("text/html;charset=UTF-8");
      		
      		// 直接响应数据
      		response.getWriter().print("你好");
      		return;
      	}
                 

3.返回值是ModelAndView对象

ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图

/**
	 * 返回ModelAndView对象
	 * 可以传入视图的名称(即跳转的页面),还可以传入对象。
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value="/findAll")
	public ModelAndView findAll() throws Exception {
		ModelAndView mv = new ModelAndView();
		// 跳转到list.jsp的页面
		mv.setViewName("list");
		
		// 模拟从数据库中查询所有的用户信息
		List<User> users = new ArrayList<>();
		User user1 = new User();
		user1.setUsername("张三");
		user1.setPassword("123");
		
		User user2 = new User();
		user2.setUsername("赵四");
		user2.setPassword("456");
		
		users.add(user1);
		users.add(user2);
		// 添加对象
		mv.addObject("users", users);
		
		return mv;
	}




跳转的页面:
	
	<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!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>Insert title here</title>
</head>
<body>

	<h3>查询所有的数据</h3>
	<c:forEach items="${ users }" var="user">
		${ user.username }
	</c:forEach>

</body>
</html>
           

小结:

 SpringMVC的响应数据分为三类,String,void和ModelAndView

1,返回值是String时,会将数据封装成一个实例对象

2,返回值是void时,有请求转发/重定向/直接响应三种情况

3,返回值是ModelAndView时,也就是返回值是String的底层实现方式

继续阅读