1. 返回ModelAndView
controller方法中定義ModelAndView對象並返回,對象中可添加model數據、指定view。
//入門程序 第一 包類 + 類包 + 方法名 @RequestMapping(value = "/item/itemlist.action") public ModelAndView itemList(){ // 創建頁面需要顯示的商品數據 List<Items> list = new ArrayList<Items>(); list.add(new Items(1, "1華為 榮耀8", 2399f, new Date(), "質量好!1")); list.add(new Items(2, "2華為 榮耀8", 2399f, new Date(), "質量好!2")); list.add(new Items(3, "3華為 榮耀8", 2399f, new Date(), "質量好!3")); list.add(new Items(4, "4華為 榮耀8", 2399f, new Date(), "質量好!4")); list.add(new Items(5, "5華為 榮耀8", 2399f, new Date(), "質量好!5")); list.add(new Items(6, "6華為 榮耀8", 2399f, new Date(), "質量好!6")); ModelAndView mav = new ModelAndView(); //數據,也就是跳轉到下面的頁面時候顯示的頁面 mav.addObject("itemList", list); mav.setViewName("/WEB-INF/jsp/itemList.jsp"); return mav; }
參考http://www.cnblogs.com/qlqwjy/p/7214231.html
2. 返回void
在Controller方法形參上可以定義request和response,使用request或response指定響應結果:
1、使用request轉發頁面,如下:
request.getRequestDispatcher("頁面路徑").forward(request, response);
request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
2、可以通過response頁面重定向:
response.sendRedirect("url")
response.sendRedirect("/springmvc-web2/itemEdit.action");
3、可以通過response指定響應結果,例如響應json數據如下:
response.getWriter().print("{\"abc\":123}");
(1) 代碼演示
以下代碼一次測試,演示上面的效果
/** * 返回void測試 * * @param request * @param response * @throws Exception */ @RequestMapping("queryItem") public void queryItem(HttpServletRequest request, HttpServletResponse response) throws Exception { // 1 使用request進行轉發 // request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, // response); // 2 使用response進行重定向到編輯頁面 // response.sendRedirect("/springmvc-web2/itemEdit.action"); // 3 使用response直接顯示 response.getWriter().print("{\"abc\":123}"); }
3. 返回字符串
3.1. 邏輯視圖名
controller方法返回字符串可以指定邏輯視圖名,通過視圖解析器解析為物理視圖地址。
//指定邏輯視圖名,經過視圖解析器解析為jsp物理路徑:/WEB-INF/jsp/itemList.jsp return "itemList";
例如:
/** * 根據id查詢商品,使用ModelMap * * @param request * @param model * @return */ @RequestMapping("/itemEdit") public String queryItemById(HttpServletRequest request, ModelMap model) { // 從request中獲取請求參數 String strId = request.getParameter("id"); Integer id = Integer.valueOf(strId); // 根據id查詢商品數據 Item item = this.itemService.queryItemById(id); // 把商品數據放在模型中 model.addAttribute("item", item); return "itemEdit"; }
/** * 包裝類型 綁定數組類型,可以使用兩種方式,pojo的屬性接收,和直接接收 * * @param queryVo * @return */ @RequestMapping("queryItem") public String queryItem(QueryVo queryVo, Integer[] ids) { System.out.println(queryVo.getItem().getId()); System.out.println(queryVo.getItem().getName()); System.out.println(queryVo.getIds().length); System.out.println(ids.length); return "success"; }
3.2. Redirect重定向
Contrller方法返回字符串可以重定向到一個url地址
如下商品修改提交后重定向到商品編輯頁面。
/** * 更新商品 * * @param item * @return */ @RequestMapping("updateItem") public String updateItemById(Item item) { // 更新商品 this.itemService.updateItemById(item); // 修改商品成功后,重定向到商品編輯頁面 // 重定向后瀏覽器地址欄變更為重定向的地址, // 重定向相當於執行了新的request和response,所以之前的請求參數都會丟失 // 如果要指定請求參數,需要在重定向的url后面添加 ?itemId=1 這樣的請求參數 return "redirect:/itemEdit.action?itemId=" + item.getId(); }
3.3. forward轉發
Controller方法執行后繼續執行另一個Controller方法
如下商品修改提交后轉向到商品修改頁面,修改商品的id參數可以帶到商品修改方法中。
/** * 更新商品 * * @param item * @return */ @RequestMapping("updateItem") public String updateItemById(Item item) { // 更新商品 this.itemService.updateItemById(item); // 修改商品成功后,重定向到商品編輯頁面 // 重定向后瀏覽器地址欄變更為重定向的地址, // 重定向相當於執行了新的request和response,所以之前的請求參數都會丟失 // 如果要指定請求參數,需要在重定向的url后面添加 ?itemId=1 這樣的請求參數 // return "redirect:/itemEdit.action?itemId=" + item.getId(); // 修改商品成功后,繼續執行另一個方法 // 使用轉發的方式實現。轉發后瀏覽器地址欄還是原來的請求地址, // 轉發並沒有執行新的request和response,所以之前的請求參數都存在 return "forward:/itemEdit.action"; }
//結果轉發到editItem.action,request可以帶過去
return "forward: /itemEdit.action";
需要修改之前編寫的根據id查詢商品方法
因為請求進行修改商品時,請求參數里面只有id屬性,沒有itemId屬性
修改,如下圖::

