天天看點

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的底層實作方式

繼續閱讀