javascript
后端学习 - SpringMVC
文章目錄
- 一 SpringMVC 簡(jiǎn)介
- 1 MVC
- 2 SpringMVC
- 3 創(chuàng)建第一個(gè) SpringMVC 項(xiàng)目
- 二 @RequestMapping
- 1 注解類與方法的區(qū)別
- 2 value 屬性
- 3 method 屬性
- 4 params 屬性
- 5 headers 屬性
- 6 SpringMVC 支持路徑中的占位符
- 三 獲取 Request 的一系列參數(shù)
- 1 通過(guò)控制器方法的形參
- 2 控制器方法形參 映射 Request 參數(shù) - @RequestParam
- 3 控制器方法形參 映射 Request 請(qǐng)求頭 - @RequestHeader
- 4 控制器方法形參 映射 cookie數(shù)據(jù) - @CookieValue
- 5 通過(guò) POJO 獲取 Request 參數(shù)
- 6 解決獲取參數(shù)的亂碼問(wèn)題
- 四 域?qū)ο蠊蚕頂?shù)據(jù)
- 1 使用 ServletAPI 向 request 域?qū)ο蠊蚕頂?shù)據(jù)(不建議)
- 2 使用 ModelAndView 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 3 使用 Model 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 4 使用 Map 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 5 使用 ModelMap 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 6 使用 ServletAPI 向 Session 域?qū)ο蠊蚕頂?shù)據(jù)
- 7 使用 ServletAPI 向 Application 域?qū)ο蠊蚕頂?shù)據(jù)
- 五 SpringMVC 視圖
- 1 Thymeleaf 視圖
- 2 轉(zhuǎn)發(fā)視圖
- 3 重定向視圖
- 4 使用 view-controller 代替 控制器方法
- 六 RESTful
- 七 HttpMessageConverter
- 1 @RequestBody
- 2 RequestEntity
- 3 @ResponseBody
- 4 ResponseEntity
- 5 RestController
- 八 攔截器
- 1 配置方法
- 2 HandlerInterceptor 接口的三個(gè)方法
- 3 多個(gè)攔截器的執(zhí)行順序
- 九 異常處理器
- 1 基于配置
- 2 基于注解
- 十 使用注解配置 SpringMVC
- 1 初始化類:代替 web.xml
- 2 SpringConfig 類:代替 Spring 配置文件(略)
- 3 WebConfig 類:代替 SpringMVC 配置文件
- 十一 SpringMVC 執(zhí)行流程
- 1 常用組件
- 2 流程總結(jié)
一 SpringMVC 簡(jiǎn)介
1 MVC
- Model 模型層:工程中的 JavaBean,包含實(shí)體 Bean(Customer、Student…) 和 業(yè)務(wù)處理 Bean(Service、DAO)
- View 視圖層:指工程中的 html 或 jsp 等頁(yè)面,與用戶進(jìn)行交互,展示數(shù)據(jù)
- Controller 控制層:指工程中的 servlet,作用是接收請(qǐng)求和響應(yīng)瀏覽器
- MVC 的工作流程 View <—> Controller <—> Model :用戶通過(guò)視圖層發(fā)送請(qǐng)求到服務(wù)器,在服務(wù)器中請(qǐng)求被Controller接收,Controller 調(diào)用相應(yīng)的 Model 層處理請(qǐng)求,處理完畢將結(jié)果返回到 Controller,Controller 再根據(jù)請(qǐng)求處理的結(jié)果找到相應(yīng)的 View 視圖,渲染數(shù)據(jù)后最終響應(yīng)給瀏覽器
2 SpringMVC
- 是 Spring 的子項(xiàng)目
- 主要作用是在 Spring 項(xiàng)目中進(jìn)行表述層開(kāi)發(fā)(是三層架構(gòu)中的概念,三層架構(gòu):表述層(或表示層)、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層,表述層表示前臺(tái)頁(yè)面和后臺(tái) servlet)
3 創(chuàng)建第一個(gè) SpringMVC 項(xiàng)目
目錄結(jié)構(gòu)如下
總結(jié):
- 瀏覽器發(fā)送請(qǐng)求,若請(qǐng)求地址符合前端控制器的url-pattern,該請(qǐng)求就會(huì)被前端控制器 DispatcherServlet 處理
- 前端控制器會(huì)讀取 SpringMVC 的核心配置文件,通過(guò)掃描組件找到控制器,將請(qǐng)求地址和控制器中@RequestMapping 注解的 value 屬性值進(jìn)行匹配(要求每個(gè)方法的 value 值唯一)
- 若匹配成功,該注解所標(biāo)識(shí)的控制器方法就是處理請(qǐng)求的方法,處理請(qǐng)求的方法需要返回一個(gè)字符串類型的視圖名稱
- 該視圖名稱會(huì)被視圖解析器解析,加上前綴和后綴組成視圖的路徑,通過(guò) Thymeleaf 對(duì)視圖進(jìn)行渲染,最終轉(zhuǎn)發(fā)到視圖所對(duì)應(yīng)頁(yè)面
二 @RequestMapping
作用是關(guān)聯(lián) 請(qǐng)求 和 處理請(qǐng)求的控制器方法。SpringMVC 接收到指定的請(qǐng)求,就會(huì)來(lái)找到在映射關(guān)系中對(duì)應(yīng)的控制器方法來(lái)處理這個(gè)請(qǐng)求。
1 注解類與方法的區(qū)別
- @RequestMapping標(biāo)識(shí)一個(gè)類:設(shè)置映射請(qǐng)求的請(qǐng)求路徑的初始信息
- @RequestMapping標(biāo)識(shí)一個(gè)方法:設(shè)置映射請(qǐng)求請(qǐng)求路徑的具體信息
2 value 屬性
- 通過(guò)請(qǐng)求的請(qǐng)求地址匹配請(qǐng)求映射
- 是一個(gè)字符串類型的數(shù)組,和其中任意字符串匹配則選擇該方法,滿足其中一個(gè)即可
- @RequestMapping 必須設(shè)置的屬性
3 method 屬性
- 根據(jù)請(qǐng)求方法 GET / POST / PUT / DELETE匹配請(qǐng)求映射
- 默認(rèn)任意請(qǐng)求方式均可匹配
- 是RequestMethod 枚舉類型的數(shù)組,表示該請(qǐng)求映射能夠匹配多種請(qǐng)求方式的請(qǐng)求,滿足其中一個(gè)即可
- @RequestMapping(value="/idx", method={RequestMethod.GET}) 等于 @GetMapping(value="/idx"),其它方式同理
- 如果 value 匹配而 method 不匹配,出現(xiàn)405錯(cuò)誤
4 params 屬性
- 根據(jù)請(qǐng)求攜帶的的參數(shù)匹配請(qǐng)求映射
- 是一個(gè)字符串類型的數(shù)組,需要同時(shí)滿足所有條件,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求參數(shù)和請(qǐng)求映射的匹配關(guān)系:
“param”:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 param 請(qǐng)求參數(shù)
“!param”:要求請(qǐng)求映射所匹配的請(qǐng)求必須不能攜帶 param 請(qǐng)求參數(shù)
“param=value”:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 param 請(qǐng)求參數(shù)且 param=value
“param!=value”:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 param 請(qǐng)求參數(shù)但 param!=value
5 headers 屬性
- 根據(jù)請(qǐng)求的請(qǐng)求頭信息匹配請(qǐng)求映射
- 類似 params 屬性,是一個(gè)字符串類型的數(shù)組,需要同時(shí)滿足所有條件,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求參數(shù)和請(qǐng)求映射的匹配關(guān)系:
“header”:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 header 請(qǐng)求頭信息
“!header”:要求請(qǐng)求映射所匹配的請(qǐng)求必須不能攜帶 header 請(qǐng)求頭信息
“header=value”:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 header 請(qǐng)求頭信息且 header=value
“header!=value”:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 header 請(qǐng)求頭信息且 header!=value
6 SpringMVC 支持路徑中的占位符
- 將請(qǐng)求攜帶的參數(shù)以請(qǐng)求路徑的形式,向服務(wù)器傳遞參數(shù)
- 如果 @RequestMapping 的 value 屬性中有路徑的占位符,則請(qǐng)求時(shí)必須有占位符對(duì)應(yīng)的參數(shù),否則出現(xiàn)404
三 獲取 Request 的一系列參數(shù)
1 通過(guò)控制器方法的形參
- 將形參名和 Request 參數(shù)名對(duì)應(yīng)即可(如果不同名,則需要使用 @RequestParam),如此只能獲取 Request 參數(shù),而不能獲得請(qǐng)求頭信息等
- 如果有多個(gè)同名的參數(shù),則將形參類型設(shè)置為字符串?dāng)?shù)組
2 控制器方法形參 映射 Request 參數(shù) - @RequestParam
- value:Request 中的參數(shù)的 name 屬性
- required:標(biāo)明該參數(shù)是否必須,如果是必須且未設(shè)置 defaultValue,則必須由 Request 傳入
- defaultValue:默認(rèn)值
3 控制器方法形參 映射 Request 請(qǐng)求頭 - @RequestHeader
- 同樣具有 value, required, defaultValue,用法相同
4 控制器方法形參 映射 cookie數(shù)據(jù) - @CookieValue
- 同樣具有 value, required, defaultValue,用法相同
5 通過(guò) POJO 獲取 Request 參數(shù)
將控制器方法形參設(shè)置為實(shí)體類類型,此時(shí)若瀏覽器傳輸?shù)恼?qǐng)求參數(shù)的參數(shù)名,和實(shí)體類中的屬性名一致,那么請(qǐng)求參數(shù)就會(huì)為此屬性賦值
<form th:action="@{/testpojo}" method="post">用戶名:<input type="text" name="username"><br>密碼:<input type="password" name="password"><br>性別:<input type="radio" name="sex" value="男">男<input type="radio"name="sex" value="女">女<br>年齡:<input type="text" name="age"><br>郵箱:<input type="text" name="email"><br><input type="submit"> </form> @RequestMapping("/testpojo") public String testPOJO(User user){ // 根據(jù)request參數(shù)創(chuàng)建對(duì)象,前提是屬性名和請(qǐng)求參數(shù)名相同System.out.println(user); return "success"; }6 解決獲取參數(shù)的亂碼問(wèn)題
- GET 請(qǐng)求的亂碼問(wèn)題可以通過(guò)更改 Tomcat 的配置文件 server.xml 解決
- POST 請(qǐng)求的亂碼問(wèn)題必須在請(qǐng)求參數(shù)獲取之前設(shè)置編碼,要比 Servlet 啟動(dòng)更早
- 服務(wù)器啟動(dòng)時(shí),初始化順序是 Listener -> Filter -> Servlet,可以使用 Filter 設(shè)置編碼格式(不使用 Listener 是因?yàn)楸O(jiān)聽(tīng)器只執(zhí)行一次,負(fù)責(zé)初始化 / 銷毀的動(dòng)作,而 Filter 可以過(guò)濾所有符合路徑請(qǐng)求),在 web.xml 中配置,并設(shè)置為首個(gè) Filter
四 域?qū)ο蠊蚕頂?shù)據(jù)
域?qū)ο蟀捶秶鷱男〉酱蠓譃?#xff1a;Request、Session、Application(ServletContext)
1 使用 ServletAPI 向 request 域?qū)ο蠊蚕頂?shù)據(jù)(不建議)
@Controller public class TestController {@RequestMapping("/servlet")public String m1(HttpServletRequest httpServletRequest) {httpServletRequest.setAttribute("k", "v");return "index";} } index.html: <p th:text="${k}"></p>2 使用 ModelAndView 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 向 request 域?qū)ο蠊蚕頂?shù)據(jù)的所有方式,本質(zhì)是對(duì)使用 ModelAndView 進(jìn)行共享的一種封裝
- 方法的返回值必須是 ModelAndView 類型
3 使用 Model 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 類似于 ServletAPI
4 使用 Map 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
@Controller public class TestController {@RequestMapping("/map")public String m4(Map<String, Object> map) {map.put("k", "v");return "index";} }5 使用 ModelMap 向 request 域?qū)ο蠊蚕頂?shù)據(jù)
- 類似于 ServletAPI
6 使用 ServletAPI 向 Session 域?qū)ο蠊蚕頂?shù)據(jù)
@RequestMapping("/testSession") public String testSession(HttpSession session){session.setAttribute("testSessionScope", "hello,session");return "index"; }7 使用 ServletAPI 向 Application 域?qū)ο蠊蚕頂?shù)據(jù)
@RequestMapping("/testApplication") public String testApplication(HttpSession session){ServletContext application = session.getServletContext();application.setAttribute("testApplicationScope", "hello,application");return "index"; }五 SpringMVC 視圖
- 默認(rèn)的有:轉(zhuǎn)發(fā)視圖、重定向視圖
1 Thymeleaf 視圖
- 實(shí)現(xiàn)了轉(zhuǎn)發(fā)視圖的功能
- 當(dāng)控制器方法中所設(shè)置的視圖名稱沒(méi)有任何前綴時(shí),此時(shí)的視圖名稱會(huì)被 SpringMVC 配置文件中所配置的視圖解析器解析,視圖名稱拼接視圖前綴和視圖后綴所得到的最終路徑,會(huì)通過(guò)轉(zhuǎn)發(fā)的方式實(shí)現(xiàn)跳轉(zhuǎn)
Spring 配置文件中的視圖解析器:
<!-- 配置Thymeleaf視圖解析器 --><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="order" value="1"/><property name="characterEncoding" value="UTF-8"/><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><property name="prefix" value="/templates/"/><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8" /></bean></property></bean></property></bean>2 轉(zhuǎn)發(fā)視圖
- SpringMVC中默認(rèn)的轉(zhuǎn)發(fā)視圖是 InternalResourceView
- 當(dāng)控制器方法中所設(shè)置的視圖名稱以"forward:"為前綴時(shí),創(chuàng)建 InternalResourceView 視圖,此時(shí)的視圖名稱不會(huì)被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會(huì)將前綴"forward:"去掉,剩余部分作為最終路徑通過(guò)轉(zhuǎn)發(fā)的方式實(shí)現(xiàn)跳轉(zhuǎn)
3 重定向視圖
- SpringMVC 中默認(rèn)的重定向視圖是 RedirectView
- 當(dāng)控制器方法中所設(shè)置的視圖名稱以"redirect:"為前綴時(shí),創(chuàng)建 RedirectView 視圖,此時(shí)的視圖名稱不會(huì)被 SpringMVC 配置文件中所配置的視圖解析器解析,而是會(huì)將前綴"redirect:"去掉,剩余部分作為最終路徑通過(guò)重定向的方式實(shí)現(xiàn)跳轉(zhuǎn)
- 重定向視圖在解析時(shí),會(huì)先將 redirect: 前綴去掉,然后會(huì)判斷剩余部分是否以 / 開(kāi)頭,若是,則自動(dòng)拼接上下文路徑
4 使用 view-controller 代替 控制器方法
- 當(dāng)控制器方法中,僅僅用來(lái)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),即只需要設(shè)置視圖名稱時(shí),可以將處理器方法用 view-controller 標(biāo)簽表示
- 當(dāng)SpringMVC 中設(shè)置任何一個(gè) view-controller 時(shí),其他控制器中的請(qǐng)求映射將全部失效,可以使用標(biāo)簽<mvc:annotation-driven />開(kāi)啟
六 RESTful
- Representational State Transfer,表現(xiàn)層資源狀態(tài)轉(zhuǎn)移
- REST 風(fēng)格提倡 URL 地址使用統(tǒng)一的風(fēng)格設(shè)計(jì),從前到后各個(gè)單詞使用斜杠分開(kāi),不使用問(wèn)號(hào)鍵值對(duì)方式攜帶請(qǐng)求參數(shù),而是將要發(fā)送給服務(wù)器的數(shù)據(jù)作為 URL 地址的一部分,以保證整體風(fēng)格的一致性
- 對(duì)于 HTTP 的四種請(qǐng)求:
| HTTP 請(qǐng)求 | RESTful | |
| 插入 | POST | /user(請(qǐng)求為 POST) |
| 刪除 | DELETE | /user/id(請(qǐng)求為 DELETE) |
| 更新 | PUT | /user(請(qǐng)求為 PUT) |
| 查詢 | GET | /user/id(請(qǐng)求為 GET) |
- SpringMVC 中提供了兩個(gè)過(guò)濾器:CharacterEncodingFilter 和 HiddenHttpMethodFilter
- 使用 HiddenHttpMethodFilter 模擬 DELETE 和 PUT
- 在 web.xml 中注冊(cè)時(shí),必須先注冊(cè) CharacterEncodingFilter,再注冊(cè) HiddenHttpMethodFilter,因?yàn)镃haracterEncodingFilter要求前面不能有任何獲取請(qǐng)求參數(shù)的操作,而 CharacterEncodingFilter 獲取了 request 參數(shù)
七 HttpMessageConverter
- 報(bào)文信息轉(zhuǎn)換器,將 請(qǐng)求報(bào)文 轉(zhuǎn)換為Java對(duì)象,或?qū)ava對(duì)象轉(zhuǎn)換為 響應(yīng)報(bào)文
- HttpMessageConverter提供了兩個(gè)注解和兩個(gè)類型:@RequestBody,@ResponseBody,RequestEntity,ResponseEntity
1 @RequestBody
- @RequestBody 可以獲取請(qǐng)求體(僅僅是請(qǐng)求體而非整個(gè) HTTP 報(bào)文,POST 具有請(qǐng)求體,而 GET 不具有)
- 需要在控制器方法設(shè)置一個(gè)形參,使用 @RequestBody 進(jìn)行標(biāo)識(shí),當(dāng)前請(qǐng)求的請(qǐng)求體就會(huì)為當(dāng)前注解所標(biāo)識(shí)的形參賦值
- 可以將前端傳來(lái)的 json 轉(zhuǎn)為對(duì)象
2 RequestEntity
- RequestEntity 封裝 HTTP 請(qǐng)求報(bào)文,需要在控制器方法的形參中的 泛型位置 設(shè)置要將報(bào)文轉(zhuǎn)換的目標(biāo)類型,當(dāng)前請(qǐng)求的請(qǐng)求報(bào)文就會(huì)賦值給該形參
- 通過(guò) getHeaders() 獲取請(qǐng)求頭信息,通過(guò) getBody() 獲取請(qǐng)求體信息
3 @ResponseBody
- @ResponseBody 用于標(biāo)識(shí)一個(gè) 控制器方法,可以將該方法的 返回值 直接作為響應(yīng)報(bào)文的 響應(yīng)體 響應(yīng)到瀏覽器
- 如果需要以 json 格式,打印 Java對(duì)象的響應(yīng)體,需要導(dǎo)入 jackson 依賴并開(kāi)啟 mvc 注解驅(qū)動(dòng)
4 ResponseEntity
- 用于控制器方法的返回值類型,該控制器方法的返回值就是響應(yīng)到瀏覽器的響應(yīng)報(bào)文
- 可以實(shí)現(xiàn)文件下載的功能
5 RestController
- 復(fù)合注解,標(biāo)識(shí)控制器類,就相當(dāng)于為類添加了 @Controller 注解,并且為其中的每個(gè)方法添加了 @ResponseBody 注解
八 攔截器
- 攔截的是控制器方法執(zhí)行
- 和過(guò)濾器 filter 的主要區(qū)別是,filter 作用于瀏覽器到 Servlet 的過(guò)程中,而攔截器作用于 Controller 執(zhí)行前(Servlet 到 Controller 的過(guò)程中),以及 Controller 返回后 的過(guò)程中
1 配置方法
在 SpringMVC 配置文件中:
<!-- 前兩種對(duì)DispatcherServlet所處理的*所有的請(qǐng)求*進(jìn)行攔截 --><mvc:interceptors><!--方式一:--><bean class="interceptor.MyInterceptor"></bean><!--方式二:--><ref bean="myInterceptor"></ref><!--方式三:可以自定義攔截路徑--><!--可以通過(guò)ref或bean標(biāo)簽設(shè)置攔截器,通過(guò)mvc:mapping設(shè)置需要攔截的請(qǐng)求,通過(guò)mvc:exclude-mapping設(shè)置需要排除的請(qǐng)求,即不需要攔截的請(qǐng)求--><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/testRequestEntity"/><ref bean="myInterceptor"></ref></mvc:interceptor></mvc:interceptors>攔截器類:
@Component public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("pre");return true; // 返回 true 放行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("post");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("after");} }2 HandlerInterceptor 接口的三個(gè)方法
- preHandle:返回值為 bool 類型,返回 true 放行,false 攔截
- postHandle:控制器方法執(zhí)行之后執(zhí)行
- afterComplation:渲染視圖完畢之后執(zhí)行
3 多個(gè)攔截器的執(zhí)行順序
- 如果所有攔截器的 preHandle() 都返回 true,則 preHandle() 按照配置的順序執(zhí)行,postHandle() 和 afterComplation() 按照配置的反序執(zhí)行
- 如果某個(gè)攔截器的 preHandle() 返回 false,preHandle() 返回 false 的攔截器和它之前的攔截器的 preHandle() 都會(huì)執(zhí)行,postHandle() 都不執(zhí)行,返回 false 的攔截器之前的攔截器的 afterComplation() 會(huì)倒序執(zhí)行
- 下圖是所有攔截器的 preHandle() 都返回 true 的情況,如果攔截器3返回 false,則方法的執(zhí)行順序是: 1.prehandle->2.prehandle->3.prehandle->2.afterCompletion->1.afterCompletion
九 異常處理器
1 基于配置
在 SpringMVC 的核心配置文件中:
出現(xiàn)異常后,跳轉(zhuǎn)到 error.html 訪問(wèn)異常信息:
<body><p th:text="${info_key}"></p> </body>2 基于注解
- 使用 @ControllerAdvice 注解異常處理類
- 使用 @ExceptionHandler(異常類的class對(duì)象) 注解異常處理方法
十 使用注解配置 SpringMVC
- 目的是使用配置類和注解代替 web.xml 和 SpringMVC 配置文件的功能
1 初始化類:代替 web.xml
- 繼承自 AbstractAnnotationConfigDispatcherServletInitializer
2 SpringConfig 類:代替 Spring 配置文件(略)
@Configuration public class MySpringConfig {// ... }3 WebConfig 類:代替 SpringMVC 配置文件
- @Bean 的作用是,將方法返回值(Java 對(duì)象)交給 IOC 容器
十一 SpringMVC 執(zhí)行流程
1 常用組件
-
DispatcherServlet:前端控制器,不需要工程師開(kāi)發(fā),由框架提供
作用:統(tǒng)一處理請(qǐng)求和響應(yīng),整個(gè)流程控制的中心,由它調(diào)用其它組件處理用戶的請(qǐng)求 -
HandlerMapping:處理器映射器,不需要工程師開(kāi)發(fā),由框架提供
作用:根據(jù)請(qǐng)求的url、method等信息查找Handler,即控制器方法 -
Handler:處理器
作用:在DispatcherServlet的控制下Handler對(duì)具體的用戶請(qǐng)求進(jìn)行處理 -
HandlerAdapter:處理器適配器,不需要工程師開(kāi)發(fā),由框架提供
作用:通過(guò)HandlerAdapter對(duì)處理器(控制器方法)進(jìn)行執(zhí)行 -
ViewResolver:視圖解析器,不需要工程師開(kāi)發(fā),由框架提供
作用:進(jìn)行視圖解析,得到相應(yīng)的視圖,例如:ThymeleafView、InternalResourceView、RedirectView -
View:視圖
作用:將模型數(shù)據(jù)通過(guò)頁(yè)面展示給用戶
2 流程總結(jié)
(1) 可以匹配,則交給具體的 Servlet,前往步驟3
(2) 不能匹配,如果配置了 mvc:default-servlet-handler ,訪問(wèn)目標(biāo)資源(一般為靜態(tài)資源,如:JS, CSS, HTML),找不到展示404錯(cuò)誤
(3) 不能匹配,沒(méi)有配置 mvc:default-servlet-handler,展示404錯(cuò)誤
(1) HttpMessageConveter: 將請(qǐng)求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對(duì)象,將對(duì)象轉(zhuǎn)換為指定的響應(yīng)信息
(2) 數(shù)據(jù)格式化、數(shù)據(jù)驗(yàn)證…
總結(jié)
以上是生活随笔為你收集整理的后端学习 - SpringMVC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 后端学习 - JavaWeb
- 下一篇: 后端学习 - SpringBoot