Controller層註解
@Controller: 控制器(注入服務) @Service: 服務(注入dao) @Repository:(實現dao訪問) @Component: 以上4個註解都是實例化bean的功能,相當於配置文件中的<bean id="" class=""/>,後期spring可能會擴展其他功能。
@RequestMapping:
url映射
定義controller方法對應的url,進行處理器映射使用。
窄化請求映射
在controller上加上該註解,方便對url分類管理。
限制http請求方法
出於安全性考慮,對http的鏈接進行方法限制。
如果限制請求爲post方法,進行get請求就會報錯:
@RequestMapping(value = "/editItems", method = { RequestMethod.POST,RequestMethod.GET })
Controller方法的返回值
1、返回ModelAndView
需要方法結束時,定義ModelAndView,將model和view分別進行設置。
ModelAndView modelAndView = new ModelAndView(); // 相當 於request的setAttribut,在jsp頁面中通過itemsList取數據 modelAndView.addObject("itemsList", itemsList); // 指定視圖 // 如果在視圖解析器中沒有配置jsp路徑的前綴和jsp路徑的後綴,則爲 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); // 配置了jsp路徑的前後綴,則爲 modelAndView.setViewName("items/itemsList");
2、返回string
如果controller方法返回string,
(1)表示返回邏輯視圖名。
真正視圖(jsp路徑)=前綴+邏輯視圖名+後綴
@RequestMapping(value = "/editItems", method = { RequestMethod.POST,RequestMethod.GET }) public String editItems(Model model)throws Exception { // 調用service根據商品id查詢商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(1); model.addAttribute("items", itemsCustom); return "items/editItems"; }
(2)redirect重定向
商品修改提交後,重定向到商品查詢列表。
redirect重定向特點:瀏覽器地址欄中的url會變化。修改提交的request數據無法傳到重定向的地址。因爲重定向是發送了兩次請求(request無法共享)
return "redirect:/items/queryItems.action";
(3)forward頁面轉發
通過forward進行頁面轉發,瀏覽器地址欄url不變,request可以共享。
return "forward:/items/queryItems.action";
3、返回void
在controller方法形參上可以定義request和response,使用request或response指定響應結果:
(1)使用request轉向頁面,如下:
request.getRequestDispatcher("頁面路徑").forward(request, response);
request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
(2)也可以通過response頁面重定向:
response.sendRedirect("url");
response.sendRedirect("/WEB-INF/jsp/items/itemsList.jsp");
也可以通過response指定響應結果,例如響應json數據如下:
response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json串");