1、Spring MVC基礎(chǔ)
1.1 請(qǐng)求追蹤
- 用戶(hù)點(diǎn)擊鏈接或提交表單:請(qǐng)求開(kāi)始
- step1:Spring的DispatcherServlet前端控制器,將請(qǐng)求發(fā)送給spring mvc控制器(controller)【通過(guò)處理器映射
handler mapping確定走向哪個(gè)控制器】 - step2:控制器處理請(qǐng)求,請(qǐng)求卸下負(fù)載并等待返回信息
- step3:控制器對(duì)model加工打包,返回模型和視圖名給dispatcherservlet
- step4:dispatcherservlet使用視圖解析器
view resolver根據(jù)視圖名匹配視圖實(shí)現(xiàn) - step5:視圖使用模型數(shù)據(jù)渲染輸出并傳遞給客戶(hù)端
1.2 配置dispatcherservlet
繼承 AbstractAnnotationConfigDispatcherServletInitializer getServletMappings() //映射 getServletConfigClasses() //指定配置類(lèi)
1.3 測(cè)試
- 將controller忽略注解,當(dāng)成pojo來(lái)測(cè)試
- 按照控制器的方法測(cè)試:
TestController controller = new TestController(); MockMvc mockMvc = standaloneSetup(controller).build(); mockMvc.perform(get("/")).addExpect(view().name("home"));//對(duì)“/”進(jìn)行g(shù)et請(qǐng)求并預(yù)期的home視圖
1.4 查詢(xún)參數(shù)
/spittles/show?spittle_id=12345 從面向資源的角度來(lái)看這并不理想,在理想的情況下,要識(shí)別的資源應(yīng)該通過(guò)URL路徑進(jìn)行標(biāo)示,而不是通過(guò)查詢(xún)參數(shù),相比來(lái)說(shuō)少了參數(shù)解析,性能要高
@RequestMapping(value="/{spittleId}", method=RequestMethod.GET) public String spittle(@PathVariable("spittleId") long spittleId, Model model) { //**** }
2
2.1 導(dǎo)向
- redirect:重定向規(guī)則
- forward:前往指定URL,而不是重定向
2.2 校驗(yàn)
Spring對(duì)java的校驗(yàn)支持:Java Validation API, JSR-303
- javax.validation.constraints
@AssertFalse:必須是Boolean:false @AssertTrue:Boolean:true @DecimalMax:數(shù)字,小于等于給定BigDecimalString @DecimalMin:數(shù)字,大于等于給定的BigDecimalString值 @Digits:數(shù)字,指定的位數(shù) @Futrue:將來(lái)的日期 @Max:數(shù)字,小于等于該值 @Min:數(shù)字,大于等于該值 @NotNull:不能為null @Null:必須為null @Past:已過(guò)去的日期 @Pattern:正則表達(dá) @Size:String/集合/數(shù)組:長(zhǎng)度符合范圍
- 應(yīng)用校驗(yàn):
public String processRegist(@Valid User user,Errors errors){ //errors.hasErrors()判讀是否出錯(cuò) }
errors參數(shù)緊跟@Valid注解的參數(shù)后面