1. Spring MVC執行過程 1. 客戶端的請求提交到dispatcherServlet 2. DispatcherServlet查詢一個或者多個handlermapping ,找請求的Controller 3. DispatcherServlet將請求提交給Controller, Contr ...
Spring MVC執行過程
客戶端的請求提交到dispatcherServlet
DispatcherServlet查詢一個或者多個handlermapping ,找請求的Controller
DispatcherServlet將請求提交給Controller, Controller調用完畢後返回modelAndView
DispatcherServlet查詢一個或多個對應的前端控制器,將modelAndView傳遞給指定的前端控制器
將渲染完的視圖返回給客戶端
SpringMVC的Controller為單例的儘量不要設置屬性,而是在方法中
@RequestMapping註解用在類上面代表該類方法的父路徑
SpringMVC與Struts2的主要區別
SpringMVC的前端控制器為一個Servlet 而Struts為Filter
SpringMVC的Controller為單例,而Struts2的Action為多例
SpringMVC沒有值棧的概念,Struts有值棧
- SpringMVC是方法參數綁定,而Struts是屬性綁定
SpringMVC的攔截器
類實現介面HandlerInterceptor,實現方法,方法分別對應方法執行前 , 執行後 , 頁面渲染後
然後在配置文件中配置攔截器
多個攔截器一起執行的時候preHandler按照配置的順序執行,剩下的兩個攔截器都要在preHandler返回為True時才能執行.
postHandler和afterCompletion按照配置順序的逆序調用
json
@ResponseBody 輸出json
@requestbody 接受json 轉化為pojo
上傳文件
前端規則
在配置文件中配置多媒體
在Controller中用MultipartFile來接受文件
三大組件和核心
核心 : DispatcherServlet(前端控制器)
三大組件 :
ViewResolver : 視圖解析器()
HandlerMapping : 處理器映射器組件(查找路徑名對應的Handler)
HandlerAdapter : 處理器適配器組件(執行Handler)
主要的註解
@requestmapping() // 方法的訪問路徑value,method=post 限制請求的方式為get/post
@Controller
@ResponseBody
@RequestBody
攔截規則
/* 攔截所有,包括jsp
/ 攔截除了jsp以外的資源
Controller的返回值
ModelAndView : 返回視圖和參數
Model : 在方法中傳遞Model,返回值為String , 直接return 視圖
Void : 什麼也不反回
重定向和請求轉發
- 在路徑前面添加關鍵字
return 'redirect:/item/itemlist.action'
return 'forward:/item/itemlist.action'
- 在路徑前面添加關鍵字
參數綁定
public ModelAndView toEdit(Integer id,HttpServletRequest request,HttpServletResponse response,HttpSession session)
異常處理
繼承HandlerExceptionResolver 實現對應的方法,對錯誤進行處理
springmvc配置
<bean class="com.lyh.exception.CustomerException"></bean>
攔截提交參數中包含"type=test"字元串
可以在@RequestMapping註解裡面加上params="type=test"
SpringMvc用什麼對象從後臺向前臺傳遞數據的
- 通過ModelMap對象,可以在這個對象裡面用put方法,把對象加到裡面,前臺就可以通過el表達式拿到
怎麼樣把ModelMap裡面的數據放入Session裡面
- 可以在類上面加上@SessionAttributes註解,裡面包含的字元串就是要放入session裡面的key
SpringMvc的控制器是不是單例模式,如果是,有什麼問題,怎麼解決
- 是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器裡面不能寫欄位