SpringMVC筆記
再次學習開濤SpingMVC,總結此筆記,鳴謝開濤:
- 1.SpringMVC簡介
- 2.Spring MVC-HelloWorld
- 3.DispatcherServlet理解
- 4.Controller接口詳解
- 5.Controller攔截器詳解
- 6.Controller註解詳解
- 6.1 Controller註解——生產者消費者模式
- * 未完 *
1.SpingMVC簡介
- 1.請求-響應模型
- 2.標準MVC模型
- 3.WebMVC模型
- 4.Web發展流程
- CGI、Servlet、JSP、Model1(JSP+JavaBean)、Model2(Web MVC)
- 5.WebMVC特點、各模塊特點
2.SpringMVC-HelloWrold
- 1.SpringMVC是什麼、有什麼用
- 2.SpingMVC架構——請求處理流程(**)
- 3.優勢
- 4.HelloWorld(**)
- 流程分析,亂碼配置(Post亂碼配置)
- 5.SpringMVC特性(*),即註解配置
- 常用註解;RestFul註解配置;其他註解配置
3. DispatcherServlet詳解
- 1.dispatcherServlet 作用
- 2.web.xml配置
- 3.上下文關係、調用順序等等(**)
- 4.初始化順序;
- 5.默認配置
4.Controller接口詳解
- 1.Controller作用
- 2.Controller類圖、接口等
- 3.AbstractController用法
- 通過response 寫響應;
- 在xml中,在Controller的配置屬性property設置:
強制請求方法類型爲post或get;
強制要求請求有session,串行訪問;
設置客戶端緩存時間;客戶端不緩存;
ETag(實體標記)緩存機制;(客戶端第一次請求時,服務器給客戶端一個ETag,當客戶端第二次請求時,服務器端計算ETag,沒有變化,則http響應頭狀態爲304; - 4.ServletForwardingController
- 客戶端請求這個Controller時,這個Controller可以將請求Forward到一個Servlet
- 5.AbstractCommandController——命令控制器(廢除)
- 客戶端請求 user.name,user.pwd時,該控制器能自動裝配user bean
- 6.SimpleFormController(表單控制器)
- 寫一個自定義控制器,實現該接口,其中實現 formBackObject 和referenceData 方法,這兩個方法返回的Object就是 你要提交的表單數據對象;
- 7.CancellableFormController
- 和上面類似,實現 OnCancel()方法,
- 8.AbstractWizardFormController——嚮導控制器
- 寫一個自定義控制器,實現該接口,其中實現 referenceData() _實現邏輯,第一頁返回啥,第二頁返回啥
processFinish()_結束後返回啥
processCancel()_取消後返回啥
方法,並在xml中配置即可,即可實現一步一步的引導功能; - 9.AbstractUrlViewController
- 在xml文件中配置的類,將請求的Url轉換成爲返回視圖
/index/*,可以匹配 /index/demo
/index/**,可以匹配index下的所有目錄,包括/index/demo,index/xxx/demo
/*.html,匹配abc.html
?,匹配一個字符,/index?,匹配 /index1,但是不匹配/index,/index12
,匹配零個或多個字符,如/index/,可以匹配一個/index/demo,但不匹配 /index/demo/demo
**,可以匹配/index/demo/demo
最長匹配優先 - 10.MultiActionController——廢除
- 場景,每一個功能對應一個控制器,如CRUD操作。
用法:
public (ModelandView | Map | String | void) actionName (httpServletRequest request,HttpServletRespose response, HttpSession session, AnyObject)
實現上述的方法即可,注意參數是可選的
然後在xml文件中配置,引用的類<bean id ="xx" class = "org.xx.xx.MethodNameParse“>
根據請求的方法名解析成相應方法
<bean id ="xx" class="org.xx.xx.PropertiesMethodNameReslover>
根據配置的屬性映射 - 11.ResqusetToViewNameTranslator
- 直接將請求轉換成爲 返回的邏輯視圖名
- 12.數據類型轉換
-
寫一個屬性轉換編輯器,繼承PropertyEditorSupport;
寫一個Controller,繼承AbstractCommandController,在其中某一個方法中綁定註冊屬性(例如針對電話號碼類轉換,就使用CustomDateEditor)轉換編輯器;
在xml中註冊這個Controller即可;如果使用WebDataBinder,而不是CustomDateEditor,則註冊的這個屬性轉換器是這個Controller所獨享,如果不想獨享,使用WebBindingInitializer註冊即可。
PropertyEditor 被限制爲只能 String<——>Object 之間轉換, 不能 Object<——>Object, Spring3 提供了更強大的類 型轉換( Type Conversi on) 支持, 它可以在任意對象之間進行類型轉換, 不僅僅是 String<——>Object。 - 13.數據驗證(**)
- 流程:
1、 首先進行數據綁定驗證,如果驗證失敗會通過 MessageCodesResolver 生成錯誤碼放入 Errors 錯誤
2、 數據不合法驗證, 通過自 定義的驗證器驗證,如果失敗需要手動將錯誤碼放入 Errors 錯誤對象;錯誤對象和錯誤消息:什麼場景下使用和怎麼使用
數據綁定失敗的處理方法
數據不合法時候的處理方法:實現Validator接口,實現其中的supports()和validate()方法即可;
5. 處理器攔截器詳解(**)
- 1.類似於Servlet中的filter過濾器
- 2.應用場景
- 日誌記錄(信息統計,計算PV);
權限檢查(登錄認證);
性能監控;
通用行爲;
OpenSessionInView - 3.攔截器接口和適配器
- HanderInterceptorAdapter,其中preHander(),postHander(),afterCompletion
實現這個接口,並在xml中在Controller下的屬性中進行相應的配置即可達到目的
舉例:性能監控,記錄這個Controller耗時情況(); 登錄認證():
6. 註解式控制器詳解
- 1.常見的註解;
- 2.註解式控制器運行流程及處理器定義
- @Controller
- @RequestMapping
- 窄化請求映射:在類名上爲父,在方法上爲子;
- 請求映射規格:URL路徑映射(普通URL映射;URI映射;Ant風格映射;正則表達式映射;或 映射)
- 請求方法限定:限定爲post或者get ,@RequestMapping(value=”create”,method = RequestMethod.POST)
請求參數數據限定:@RequestMapping(Params=”create”),匹配 http://xx/params1?create - 請求數據中指定參數名和沒有指定參數名
- 請求數據中指定參數名=數據和!=數據
- 請求數據中參數名之間是”且“關係
- 請求頭(header)數據和上面類似
: 請求數據中指定參數名和沒有指定參數名; 請求數據中指定參數名=數據和!=數據; 請求數據中參數名之間是”且“關係;
第六章 註解式控制器詳解 ——生產者消費者模式
- 1.基本概念(Http中傳輸的類型)
- Media Type 媒體類型——即請求的內容類型或響應的內容類型
- Context-Type內容類型:請求頭的內容類型,即發送到服務器的內容數據的媒體類型
(key/Value數據類型、JSON數據類型)
@RequestMapping(value=”/response/Content-Type“,headers=”Content-Type = application/json”) - Accept:告訴服務器,我需要什麼樣的媒體類型(舉例:xml數據和Json數據)
@RequestMapping(value=”/response/Content-Type“,headers=”Accept = application/json”) - 2.生產者消費者流程圖
- 生產者和消費者的理解:誰產生數據、封裝數據,誰就是生產者,反之,誰就是消費者
- 1.生產者、消費者註解使用前提:在xml中配置
- 2.功能處理方法是消費者時:
@RequestMapping(value=”/consumes”,consumes=”{application/json}”),consumes表示消費者
@RequestMapping(value=”produces”,produces=”{application/json}”), - 3.窄化時是覆蓋,而不是繼承:
即在生產者、消費者模式下,方法級別的映射覆蓋類級別的映射;在其他模式下,方法級別的映射 繼承消費級別的映射; - 4.組合使用的是“或”關係