
1.靜態(tài)資源規(guī)則與定制化
1.1靜態(tài)資源目錄
只要將靜態(tài)資源放在類路徑下: called?/static?(or?/public?or?/resources?or?/META-INF/resources
便可以這樣訪問(wèn) : 當(dāng)前項(xiàng)目根路徑/ + 靜態(tài)資源名(例如https://localhost/8080/資源名)
如果要改變靜態(tài)資源的默認(rèn)路徑:只需在總配置文件中配置如下,便可將默認(rèn)路徑變?yōu)閟taticresources。

如果要改變靜態(tài)資源所在的文件夾,可以如下配置,則指定在haha文件夾里的資源都是靜態(tài)資源:

1.2welcome頁(yè):
靜態(tài)資源路徑下的index.html或controller處理index請(qǐng)求都會(huì)被當(dāng)成welcome頁(yè)
1.3Favicon:靜態(tài)圖標(biāo)
將favicon.ico 放在靜態(tài)資源目錄下即可。

1.4靜態(tài)資源配置原理
SpringMVC功能的自動(dòng)配置類是WebMvcAutoConfiguration。
如下配置可以禁用所有靜態(tài)資源。

1.5Rest映射及源碼解析
想在SB中開啟Rest的頁(yè)面表單功能,必須在總配置文件中作如下聲明:

Rest原理(表單提交要使用REST的時(shí)候):
表單提交會(huì)帶上_method=PUT;
請(qǐng)求過(guò)來(lái)被HiddenHttpMethodFilter攔截;
請(qǐng)求是否正常,并且是POST;
獲取到_method的值。;
兼容以下請(qǐng)求;PUT.DELETE.PATCH;
原生request(post),包裝模式requesWrapper重寫了getMethod方法,返回的是傳入的值;
過(guò)濾器鏈放行的時(shí)候用wrapper。以后的方法調(diào)用getMethod是調(diào)用requesWrapper的。
Rest使用客戶端工具
如PostMan直接發(fā)送Put、delete等方式請(qǐng)求,無(wú)需Filter。
1.6請(qǐng)求映射原理

SpringMVC功能分析都從 org.springframework.web.servlet.DispatcherServlet——>doDispatch()
所有的請(qǐng)求映射都在HandlerMapping中。
比如:SpringBoot自動(dòng)配置歡迎頁(yè)的 WelcomePageHandlerMapping 。訪問(wèn) /能訪問(wèn)到index.html;
SpringBoot自動(dòng)配置了默認(rèn) 的 RequestMappingHandlerMapping
請(qǐng)求進(jìn)來(lái),挨個(gè)嘗試所有的HandlerMapping看是否有請(qǐng)求信息。如果有就找到這個(gè)請(qǐng)求對(duì)應(yīng)的handler,如果沒(méi)有就是下一個(gè) HandlerMapping。
我們需要一些自定義的映射處理,我們也可以自己給容器中放HandlerMapping。自定義 HandlerMapping
1.7Web場(chǎng)景常用的參數(shù)注解
顧名思義,參數(shù)注解就是在Controller里用在方法參數(shù)上的注解。
1.7.1@PathVariable:在Rest風(fēng)格的url中,可以動(dòng)態(tài)地來(lái)獲取參數(shù),例如下面圖片所示:

在/car/{id}/owner/{username}這條網(wǎng)址中,id和username的獲取是動(dòng)態(tài)的,如果用戶訪問(wèn)了car/3/owner/lsl,那么在這個(gè)Controller方法中,獲取的id值便為3,username為lsl;

此外,@PathVariable還可以用一個(gè)Map<String,String>來(lái)獲取所有的設(shè)置了此注解的參數(shù)及參數(shù)值。
1.7.2@RequestHeader:獲取請(qǐng)求頭
如圖所示,第一行可以獲取名為“User-Agent”的請(qǐng)求頭內(nèi)容,第二行的Map可以獲取所有設(shè)置了此注解的參數(shù)內(nèi)容。

1.7.3@RequestParam:獲取url中的參數(shù)內(nèi)容

如圖所示,可以獲取url中參數(shù)age的內(nèi)容,比如用戶訪問(wèn)/car/3/owner/lsl?age=18,Controller方法中便可以獲得age參數(shù)的內(nèi)容。@RequestParam中也可以通過(guò)一個(gè)Map獲取所有設(shè)置了此注解的參數(shù)內(nèi)容。
1.7.4@CookieValue:獲取頁(yè)面cookie的內(nèi)容

如圖所示,可以獲取指定的內(nèi)容,@CookieValue中也可以通過(guò)一個(gè)Map獲取所有設(shè)置了此注解的參數(shù)內(nèi)容。
1.7.5@RequestBody:獲取請(qǐng)求體,用于表單提交

如圖所示可以獲取全部的提交的表單內(nèi)容。
1.7.6@RequestAttribute:獲取請(qǐng)求域中的信息。

如圖所示,在/goto的cntroller中設(shè)置了attribute后,在跳轉(zhuǎn)后的頁(yè)面的controller中可以通過(guò)@RequestAttribute注解直接訪問(wèn)這些信息。
1.7.7@MatrixVariable:
需要先在配置類中進(jìn)行如下配置,開啟矩陣分析。

這樣一來(lái),通過(guò)如下的代碼便可以讀取這樣一個(gè)url中分號(hào)后面的值:cars/sell;price=300000;brand=audi,顯示如下面的第二張圖。


1.8Web場(chǎng)景把前端提交的表單內(nèi)容綁定到自定義類
如圖1所示,在前端提交這樣一個(gè)表單,在controller方法里面可以直接采用圖2所示的方式將其綁定到我們所寫的Person類,如圖3所示。



此外,假設(shè)Person養(yǎng)了寵物,如下圖1、2所示,則前端傳輸數(shù)據(jù)的時(shí)候需要級(jí)聯(lián),如圖3所示。


