1、傳回ModelAndView
controller方法中定義ModelAndView對象并傳回,對象中可添加model資料、指定view。
@Controller
public class ItemController {
// @RequestMapping:裡面放的是請求的url,和使用者請求的url進行比對
// action可以寫也可以不寫
@RequestMapping("/itemList.action")
public ModelAndView queryItemList() {
// 建立頁面需要顯示的商品資料
List<Item> list = new ArrayList<>();
list.add(new Item(1, "1華為 榮耀8", 2399, new Date(), "品質好!1"));
list.add(new Item(2, "2華為 榮耀8", 2399, new Date(), "品質好!2"));
list.add(new Item(3, "3華為 榮耀8", 2399, new Date(), "品質好!3"));
list.add(new Item(4, "4華為 榮耀8", 2399, new Date(), "品質好!4"));
list.add(new Item(5, "5華為 榮耀8", 2399, new Date(), "品質好!5"));
list.add(new Item(6, "6華為 榮耀8", 2399, new Date(), "品質好!6"));
// 建立ModelAndView,用來存放資料和視圖
ModelAndView modelAndView = new ModelAndView();
// 設定資料到模型中
modelAndView.addObject("list", list);
// 設定視圖jsp,需要設定視圖的實體位址
modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
return modelAndView;
}
}
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}");
3、傳回字元串
3.1 邏輯視圖名:controller方法傳回字元串可以指定邏輯視圖名,通過視圖解析器解析為實體視圖位址。
//指定邏輯視圖名,經過視圖解析器解析為jsp實體路徑:/WEB-INF/jsp/itemList.jsp
return "itemList";
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方法
/**
* 更新商品
*
* @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";