在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據通過業務處理層處理以後封裝成一個Model ,而後再把該Model 返回給對應的View 進行展現。java
controller方法中定義ModelAndView對象並返回,對象中可添加model數據、指定view。web
package com.cyb.ssm.controller; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.cyb.ssm.po.Item; import com.cyb.ssm.service.ItemService; @Controller public class ItemController { @Autowired private ItemService Service; @RequestMapping("queryItem") public ModelAndView queryItem() { List<Item> itemList = Service.queryItemList(); ModelAndView mvAndView = new ModelAndView(); mvAndView.addObject("itemList", itemList); mvAndView.setViewName("item/item-list"); return mvAndView; } }
在controller方法形參上能夠定義request和response,使用request或response指定響應結果:spring
void service(HttpServletRequest request,HttpServletResponse response){}
一、使用request轉發向頁面,以下:json
request.getRequestDispatcher("頁面路徑").forward(request, response);
二、也能夠經過response頁面重定向:數組
response.sendRedirect("url")
三、也能夠經過response指定響應結果,例如:瀏覽器
response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json串");
return "item/item-list";
return "redirect:testRedirect";
redirect:app
至關於「response.sendRedirect()」模塊化
遊覽器URL發生改變url
Request域不能共享spa
return "forward:testForward";
forward:
至關於「request.getRequestDispatcher().forward(request,response)」
瀏覽器URL不發送改變
Request域能夠共享
@ResponseBody的做用:
ResponseBody註解能夠經過內置9種HttpMessageConverter,匹配不一樣的Controller返回值類型,而後進行不一樣的消息轉換處理
將轉換以後的數據放到HttpServletResponse對象的響應體返回到頁面,
不一樣的HttpMessageConverter處理的數據,指定的ContentType值也不一樣。
@RequestBody註解的做用和@ResponseBody註解正好相反,它是處理請求參數的Http消息轉換的。
MappingJacksonHttpMessageConverter處理POJO類型返回值
MappingJacksonHttpMessageConverter是專門處理POJO類型的。
默認使用MappingJackson的JSON處理能力,將後臺返回的Java對象(POJO類型),轉爲JSON格式輸出到頁面。
將響應體的Content-Type設置爲application/json;charset=utf-8
StringHttpMessageConverter處理String類型返回值
StringHttpMessageConverter是專門處理String類型的。
調用response.getWriter()方法將String類型的字符串寫回給調用者。
將響應體的Content-Type設置爲text/plain;charset=utf-8
經過RequestMapping註解能夠定義不一樣的處理器映射規則
@RequestMapping(value="/item")或@RequestMapping("/item")
value的值是數組,能夠將多個url映射到同一個方法
@RequestMapping(value={"/item","/queryItem"})
在class上添加@RequestMapping(url)指定通用請求前綴,限制此類下的全部方法的訪問請求url必須以請求前綴開頭,經過此方法對url進行模塊化分類管理。
商品模塊
/item/add
/item/update
/item/delete
用戶模塊
/user/add
/user/update
/user/delete
@RequestMapping(method=RequestMethod.GET)
若是經過Post訪問則報錯:
HTTP Status 405 - Request method 'POST' not supported
例如:
@RequestMapping(value="/editItem",mtthod=RequestMethod.GET)
@RequestMapping(method=RequestMethod.POST)
如何經過Post訪問則報錯:
HTTP Status 405 - Request method 'GET' not supported
@RequestMapping(mthod={RequestMethod.GET,RequestMethod.POST})