版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章SpringBoot的Web應(yīng)用支持《SpringBoot企業(yè)級(jí)開(kāi)發(fā)教程(第2版)》學(xué)習(xí)目標(biāo)/Target了解使用SpringBean注冊(cè)JavaWeb三大組件,能夠簡(jiǎn)述使用SpringBean注冊(cè)JavaWeb三大組件的步驟了解使用RegistrationBean注冊(cè)JavaWeb三大組件,能夠簡(jiǎn)述使用RegistrationBean注冊(cè)JavaWeb三大組件的步驟了解使用注解掃描注冊(cè)JavaWeb三大組件,能夠簡(jiǎn)述使用注解掃描注冊(cè)JavaWeb三大組件的步驟了解SpringMVC自動(dòng)配置的特性,能夠說(shuō)出SpringMVC自動(dòng)配置的特性學(xué)習(xí)目標(biāo)/Target掌握自定義SpringMVC配置,能夠自定義配置SpringMVC中的靜態(tài)資源映射、視圖控制器、攔截器掌握文件上傳,能夠在SpringBoot項(xiàng)目中實(shí)現(xiàn)文件上傳熟悉SpringBoot異常處理自動(dòng)配置原理,能夠說(shuō)出SpringBoot異常處理自動(dòng)配置原理掌握SpringBoot自定義異常處理,能夠在SpringBoot項(xiàng)目中自定義異常處理章節(jié)概述/Summary通常在Web開(kāi)發(fā)中,會(huì)涉及到靜態(tài)資源的訪問(wèn)支持、視圖解析器的配置、轉(zhuǎn)換器和格式化器的定制、文件上傳等功能,甚至還需要考慮與Web服務(wù)器關(guān)聯(lián)的JavaWeb三大組件的定制。SpringBoot框架支持整合一些常用Web框架來(lái)實(shí)現(xiàn)Web開(kāi)發(fā),并默認(rèn)支持Web開(kāi)發(fā)中的一些通用功能。下面將對(duì)SpringBoot的Web應(yīng)用支持進(jìn)行講解。目錄/Contents3.13.2注冊(cè)JavaWeb三大組件SpringBoot管理SpringMVC3.3文件上傳3.4異常處理注冊(cè)JavaWeb三大組件3.13.1
注冊(cè)JavaWeb三大組件傳統(tǒng)Web應(yīng)用項(xiàng)目最常用的三大組件有Servlet、Filter和Listener。使用這些組件時(shí)需要在項(xiàng)目的web.xml文件中進(jìn)行配置,或者使用相應(yīng)的注解進(jìn)行標(biāo)注。SpringBoot項(xiàng)目默認(rèn)沒(méi)有web.xml文件,同時(shí)默認(rèn)情況下SpringBoot項(xiàng)目不能自動(dòng)識(shí)別到這三個(gè)組件的相關(guān)注解??梢允褂肧pringBean、RegistrationBean、注解掃描的方式注冊(cè)JavaWeb三大組件。3.1.1
使用SpringBean注冊(cè)JavaWeb三大組件先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!了解使用SpringBean注冊(cè)JavaWeb三大組件,能夠簡(jiǎn)述使用SpringBean注冊(cè)JavaWeb三大組件的步驟3.1.1
使用SpringBean注冊(cè)JavaWeb三大組件在SpringBoot項(xiàng)目中,會(huì)自動(dòng)將Spring容器中的Servlet、Filter、Listener實(shí)例注冊(cè)為Web服務(wù)器中對(duì)應(yīng)的組件。因此,可以將自定義的JavaWeb三大組件作為Bean添加到Spring容器中,以實(shí)現(xiàn)組件的注冊(cè)。使用SpringBean注冊(cè)Servlet時(shí),需要自定義兩個(gè)及以上的Servlet,Servlet對(duì)應(yīng)的映射地址為“Bean名稱+/”。Filter的映射地址默認(rèn)為“/*”。3.1.1
使用SpringBean注冊(cè)JavaWeb三大組件下面通過(guò)案例演示使用SpringBean注冊(cè)JavaWeb三大組件。文件3-1
FirstServlet.java文件3-2
SecondServlet.java文件3-3
MyFilter.java文件3-4
MyListener.java源代碼(1)創(chuàng)建自定義原生組件。創(chuàng)建SpringBoot項(xiàng)目chapter03,在項(xiàng)目的java文件夾下創(chuàng)建類包c(diǎn)om.itheima.chapter03.web,并在類包下創(chuàng)建自定義的Servlet、Filter、Listener,具體如文件3-1~文件3-4所示。3.1.1
使用SpringBean注冊(cè)JavaWeb三大組件文件3-5WebConfigure.java源代碼(2)創(chuàng)建組件配置類。在項(xiàng)目的java文件夾下創(chuàng)建類包c(diǎn)om.itheima.chapter03.config,并在類包下創(chuàng)建組件配置類WebConfigure,在該類中創(chuàng)建4個(gè)方法,分別返回文件3-1~文件3-4中類的實(shí)例交由Spring管理,具體如文件3-5所示。3.1.1
使用SpringBean注冊(cè)JavaWeb三大組件(3)測(cè)試程序效果。運(yùn)行項(xiàng)目的啟動(dòng)類,控制臺(tái)輸出程序啟動(dòng)信息。3.1.1
使用SpringBean注冊(cè)JavaWeb三大組件在瀏覽器中訪問(wèn)http://localhost:8080/firstServlet/,控制臺(tái)輸出訪問(wèn)的結(jié)果信息。3.1.2
使用RegistrationBean注冊(cè)JavaWeb三大組件先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!了解使用RegistrationBean注冊(cè)JavaWeb三大組件,能夠簡(jiǎn)述使用RegistrationBean注冊(cè)JavaWeb三大組件的步驟3.1.2
使用RegistrationBean注冊(cè)JavaWeb三大組件使用SpringBean注冊(cè)JavaWeb三大組件時(shí),如果容器中只有一個(gè)自定義Servlet,則無(wú)法使用Bean的名稱作為映射路徑,而Filter默認(rèn)只使用“\*”的映射地址。為解決此問(wèn)題SpringBoot提供了更為靈活的注冊(cè)方法,可以在配置類中使用RegistrationBean來(lái)注冊(cè)原生Web組件。RegistrationBean是個(gè)抽象類,SpringBoot提供了三個(gè)RegistrationBean的實(shí)現(xiàn)類:ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean,這三個(gè)類分別用來(lái)注冊(cè)Servlet、Filter和Listener,通過(guò)這三個(gè)類開(kāi)發(fā)者可以獲得自定義映射路徑等更多的控制權(quán)。3.1.2
使用RegistrationBean注冊(cè)JavaWeb三大組件下面通過(guò)案例演示使用RegistrationBean注冊(cè)JavaWeb三大組件。文件3-6WebConfigure.java源代碼(1)修改配置類。將文件3-5中WebConfigure類原有的方法進(jìn)行注釋,將自定義的Servlet、Filter和Listener包裝到對(duì)應(yīng)的RegistrationBean中,并使用@Bean注解將ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean注冊(cè)到Spring容器中。修改后代碼如文件3-6所示。3.1.2
使用RegistrationBean注冊(cè)JavaWeb三大組件(2)測(cè)試程序效果。運(yùn)行項(xiàng)目的啟動(dòng)類,控制臺(tái)輸出項(xiàng)目啟動(dòng)信息。3.1.2
使用RegistrationBean注冊(cè)JavaWeb三大組件在瀏覽器中訪問(wèn)http://localhost:8080/first,此時(shí)控制臺(tái)輸出訪問(wèn)結(jié)果。3.1.2
使用RegistrationBean注冊(cè)JavaWeb三大組件在瀏覽器中訪問(wèn)http://localhost:8080/second,此時(shí)控制臺(tái)輸出訪問(wèn)結(jié)果。3.1.3使用注解掃描注冊(cè)JavaWeb三大組件先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!了解使用注解掃描注冊(cè)JavaWeb三大組件,能夠簡(jiǎn)述使用注解掃描注冊(cè)JavaWeb三大組件的步驟3.1.3使用注解掃描注冊(cè)JavaWeb三大組件SpringBoot無(wú)法自動(dòng)識(shí)別到@WebServlet、@WebFilter、@WebListener標(biāo)注的類,但其內(nèi)部可使用嵌入式容器,可以使用@ServletComponentScan掃描標(biāo)注@WebServlet、@WebFilter和@WebListener的類,并將掃描到的類自動(dòng)注冊(cè)到Spring容器。3.1.3使用注解掃描注冊(cè)JavaWeb三大組件下面通過(guò)案例演示使用注解掃描注冊(cè)JavaWeb三大組件。文件3-7
FirstServlet.java文件3-8
MyFilter.java文件3-9
MyListener.java源代碼(1)使用注解聲明組件。分別使用@WebServlet、@WebFilter、@WebListener標(biāo)注FirstServlet類、MyFilter類和MyListener類,具體如文件3-7~文件3-9所示。3.1.3使用注解掃描注冊(cè)JavaWeb三大組件文件3-10Chapter03Application.java源代碼(2)添加@ServletComponentScan注解。在項(xiàng)目的啟動(dòng)類上添加@ServletComponentScan注解。具體代碼如文件3-10所示。3.1.3使用注解掃描注冊(cè)JavaWeb三大組件(3)測(cè)試程序效果。使用掃描組件的方式注釋原生組件不需要其他配置類,因此,先注釋掉文件3-6中的配置類WebConfigure,然后運(yùn)行項(xiàng)目的啟動(dòng)類,控制臺(tái)輸出項(xiàng)目啟動(dòng)的信息。3.1.3使用注解掃描注冊(cè)JavaWeb三大組件在瀏覽器中訪問(wèn)http://localhost:8080/first,此時(shí)控制臺(tái)輸出訪問(wèn)結(jié)果信息。SpringBoot管理SpringMVC3.23.2
SpringBoot管理SpringMVCSpringBoot真正的核心功能是自動(dòng)配置和快速整合,通常SpringBoot應(yīng)用的前端MVC框架依然使用SpringMVC。SpringBoot提供的spring-boot-starter-web啟動(dòng)器嵌入了SpringMVC的依賴,并為SpringMVC提供了大量自動(dòng)配置,可以適用于大多數(shù)Web開(kāi)發(fā)場(chǎng)景。除了使用自動(dòng)配置所提供的功能,開(kāi)發(fā)者也可以通過(guò)自定義配置類定制SpringMVC的配置。下面分別對(duì)SpringMVC自動(dòng)配置的特性和自定義SpringMVC配置進(jìn)行講解。3.2.1
SpringMVC自動(dòng)配置的特性先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!了解SpringMVC自動(dòng)配置的特性,能夠說(shuō)出SpringMVC自動(dòng)配置的特性3.2.1
SpringMVC自動(dòng)配置的特性SpringBoot為SpringMVC提供了自動(dòng)配置,并在SpringMVC默認(rèn)功能的基礎(chǔ)上添加了以下特性。(1)引入了視圖解析器
ContentNegotiatingViewResolver和BeanNameViewResolver。(2)為包括WebJars在內(nèi)的靜態(tài)資源提供支持。(3)自動(dòng)注冊(cè)
Converter、GenericConverter和Formatter。(4)支持使用HttpMessageConverters消息轉(zhuǎn)換器。(5)自動(dòng)注冊(cè)MessageCodesResolver。(6)支持靜態(tài)項(xiàng)目首頁(yè)index.html。(7)支持定制應(yīng)用圖標(biāo)favicon.ico。(8)自動(dòng)初始化Web數(shù)據(jù)綁定器ConfigurableWebBindingInitializer。3.2.2
自定義SpringMVC配置先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!掌握自定義SpringMVC配置,能夠自定義配置SpringMVC中的靜態(tài)資源映射、視圖控制器、攔截器3.2.2
自定義SpringMVC配置在SpringBoot應(yīng)用中使用SpringMVC時(shí),如果希望在為SpringMVC自動(dòng)配置提供相關(guān)特性的同時(shí),再增加一些自定義的SpringMVC配置,例如添加攔截器、視圖控制器等,可以通過(guò)自定義WebMvcConfigurer類型的配置類來(lái)實(shí)現(xiàn)。下面分別對(duì)自定義SpringMVC配置中的配置靜態(tài)資源映射、配置視圖控制器、配置攔截器進(jìn)行講解。3.2.2
自定義SpringMVC配置1.配置靜態(tài)資源映射通常Web應(yīng)用中會(huì)需要使用靜態(tài)資源,例如,JavaScript文件、CSS文件和HTML文件等。單獨(dú)使用SpringMVC時(shí),導(dǎo)入靜態(tài)資源文件后,需要配置靜態(tài)資源的映射,否則無(wú)法正常訪問(wèn)。SpringBoot中提供了默認(rèn)的靜態(tài)資源映射,當(dāng)訪問(wèn)項(xiàng)目中任意的靜態(tài)資源時(shí),SpringBoot會(huì)默認(rèn)從以下路徑中進(jìn)行查找。(1)classpath:/META-INF/resources/(2)classpath:/resources/(3)classpath:/static/(4)classpath:/public/優(yōu)先級(jí)從(1)至(4)依次遞減,SpringBoot會(huì)先查找優(yōu)先級(jí)高的文件夾,再查找優(yōu)先級(jí)低的文件夾。3.2.2
自定義SpringMVC配置1.配置靜態(tài)資源映射在chapter03項(xiàng)目中的
src/main/resources/static和
src/main/resources目錄下分別創(chuàng)建main.html文件和index.html文件,并在項(xiàng)目啟動(dòng)后分別在瀏覽器中對(duì)這兩個(gè)靜態(tài)資源進(jìn)行訪問(wèn)。3.2.2
自定義SpringMVC配置1.配置靜態(tài)資源映射如果想在項(xiàng)目中訪問(wèn)非默認(rèn)靜態(tài)資源文件夾下的資源,可以自定義靜態(tài)資源的映射。自定義靜態(tài)資源的映射可以通過(guò)配置類和配置文件2種方式實(shí)現(xiàn)。(1)通過(guò)配置類實(shí)現(xiàn)靜態(tài)資源映射通過(guò)配置類實(shí)現(xiàn)靜態(tài)資源映射時(shí),配置類需要實(shí)現(xiàn)WebMvcConfigurer接口,在重寫WebMvcConfigurer接口的addResourceHandlers()方法中指定資源訪問(wèn)路徑和資源之間的映射關(guān)系。3.2.2
自定義SpringMVC配置1.配置靜態(tài)資源映射(2)通過(guò)配置文件實(shí)現(xiàn)靜態(tài)資源映射SpringBoot在SpringMVC的自動(dòng)配置中提供了對(duì)應(yīng)的屬性可以配置靜態(tài)資源訪問(wèn)路徑和資源的映射。spring:mvc:static-path-pattern:/backend/**web:resources:static-locations:file:E:\idea\SpringBoot\chapter03\src\main\resources\backend用于指定靜態(tài)資源的訪問(wèn)路徑。用于指定靜態(tài)資源存放的目錄。3.2.2
自定義SpringMVC配置下面以通過(guò)配置類實(shí)現(xiàn)靜態(tài)資源映射為例,演示配置靜態(tài)資源映射。(1)創(chuàng)建靜態(tài)資源。在chapter03項(xiàng)目中的
src/main/resources目錄下,創(chuàng)建文件夾backend,并在文件夾中創(chuàng)建HTML文件index.html和login.htm。1.配置靜態(tài)資源映射3.2.2
自定義SpringMVC配置1.配置靜態(tài)資源映射文件3-11WebMvcConfig.java源代碼(2)配置靜態(tài)資源映射。在項(xiàng)目chapter03的com.itheima.chapter03.config包下創(chuàng)建配置類WebMvcConfig,該配置類實(shí)現(xiàn)WebMvcConfigurer接口,并重寫該接口的方法實(shí)現(xiàn)自定義SpringMVC的配置,具體如文件3-11所示。3.2.2
自定義SpringMVC配置1.配置靜態(tài)資源映射(3)測(cè)試程序效果。啟動(dòng)項(xiàng)目,在瀏覽器中訪問(wèn)backend文件夾下的index.html。3.2.2
自定義SpringMVC配置2.配置視圖控制器使用SpringMVC默認(rèn)的配置進(jìn)行開(kāi)發(fā)時(shí),如果僅操作需要實(shí)現(xiàn)無(wú)業(yè)務(wù)邏輯的頁(yè)面跳轉(zhuǎn),也需要?jiǎng)?chuàng)建Controller類,然后定義方法跳轉(zhuǎn)到頁(yè)面,操作比較麻煩。對(duì)此,可以在視圖控制器中添加自定義的映射,直接將請(qǐng)求映射為視圖。3.2.2
自定義SpringMVC配置2.配置視圖控制器下面通過(guò)案例演示在視圖控制器中配置請(qǐng)求和視圖的映射,具體如下。(1)配置視圖控制器映射信息。在文件3-11中重寫WebMvcConfigurer接口的addViewControllers()方法,在該方法中添加訪問(wèn)路徑和視圖的映射。@OverridepublicvoidaddViewControllers(ViewControllerRegistryregistry){ registry.addViewController("/backend/toLoginPage").setViewName("/backend/login.html"); registry.addViewController("/backend").setViewName("/backend/index.html");}3.2.2
自定義SpringMVC配置2.配置視圖控制器(2)測(cè)試程序效果。啟動(dòng)項(xiàng)目,在瀏覽器中訪問(wèn)http://localhost:8080/toLoginPage。3.2.2
自定義SpringMVC配置3.配置攔截器攔截器可以根據(jù)請(qǐng)求的URL對(duì)請(qǐng)求進(jìn)行攔截,主要應(yīng)用于登錄校驗(yàn)、權(quán)限驗(yàn)證、亂碼解決、性能監(jiān)控和異常處理等方面。在SpringBoot項(xiàng)目中配置攔截器也非常簡(jiǎn)單,只需要定義攔截器和注冊(cè)攔截器即可。3.2.2
自定義SpringMVC配置3.配置攔截器文件3-12LoginInterceptor.java源代碼下面通過(guò)案例演示在SpringBoot項(xiàng)目中配置攔截器。(1)定義攔截器。在項(xiàng)目chapter03下創(chuàng)建erceptor包,在該包下創(chuàng)建攔截器類,該類實(shí)現(xiàn)了HandlerInterceptor接口,并重寫了接口的preHandle()方法,具體如文件3-12所示。3.2.2
自定義SpringMVC配置3.配置攔截器(2)注冊(cè)攔截器。在文件3-11中重寫重寫WebMvcConfigurer接口的addInterceptors()方法,在該方法中添加攔截器。@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//攔截所有請(qǐng)求,包括靜態(tài)資源文件registry.addInterceptor(newoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/backend/login.html");}3.2.2
自定義SpringMVC配置3.配置攔截器(3)測(cè)試程序效果。啟動(dòng)項(xiàng)目,在瀏覽器中訪問(wèn)http://localhost:8080/backend/login.html。3.2.2
自定義SpringMVC配置3.配置攔截器在瀏覽器中訪問(wèn)http://localhost:8080/backend/index.html。3.2.2
自定義SpringMVC配置3.配置攔截器需要說(shuō)明的是,SpringBoot在整合SpringMVC過(guò)程中提供了許多默認(rèn)自動(dòng)化配置和特性,開(kāi)發(fā)者可以通過(guò)SpringBoot提供的WebMvcConfigurer接口對(duì)MVC功能進(jìn)行定制和擴(kuò)展。如果開(kāi)發(fā)者不想使用SpringBoot整合MVC時(shí)提供的一些默認(rèn)配置,而是想要絕對(duì)的自定義管理,那么可以編寫一個(gè)@Configuration注解配置類,同時(shí)添加@EnableWebMvc注解關(guān)閉SpringBoot提供的所有關(guān)于MVC功能的默認(rèn)配置。文件上傳3.33.3
文件上傳先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!掌握文件上傳,能夠在SpringBoot項(xiàng)目中實(shí)現(xiàn)文件上傳3.3
文件上傳在項(xiàng)目開(kāi)發(fā)過(guò)程中,文件的上傳和下載是比較常見(jiàn)的開(kāi)發(fā)需求。SpringBoot為SpringMVC的文件上傳同樣提供了自動(dòng)配置,SpringBoot推薦使用基于Servlet3的文件上傳機(jī)制,這樣可直接利用Web服務(wù)器內(nèi)部的文件上傳支持,而無(wú)須引入第三方JAR包。SpringBoot的文件上傳自動(dòng)配置主要由MultipartAutoConfiguration類和MultipartProperties類組成,其中MultipartProperties負(fù)責(zé)加載以“spring.servlet.multipart”開(kāi)頭的配置屬性,而MultipartAutoConfiguration則根據(jù)MultipartProperties讀取的配置屬性來(lái)初始化StandardServletMultipartResolver解析器對(duì)象。3.3
文件上傳下面通過(guò)案例演示在SpringBoot項(xiàng)目中進(jìn)行文件上傳,該案例演示的是圖片文件的上傳,圖片上傳后將圖片顯示在上傳頁(yè)面,具體如下。(1)設(shè)置上傳配置。在chapter03項(xiàng)目的application.yml文件對(duì)靜態(tài)資源的映射和文件上傳屬性進(jìn)行配置。spring:mvc:static-path-pattern:/backend/**web:resources:static-locations:file:E:\idea\SpringBoot\chapter03\src\main\resources\backendservlet:multipart:max-file-size:10MBmax-request-size:50MB單個(gè)上傳文件的大小限制3.3
文件上傳(2)創(chuàng)建文件上傳頁(yè)面。在項(xiàng)目中的
src/main/resources目錄下創(chuàng)建HTML頁(yè)面用于操作文件上傳,具體如文件3-13所示。文件3-13fileupload.html源代碼3.3
文件上傳(3)創(chuàng)建文件上傳控制器類。在項(xiàng)目chapter03的com.itheima.chapter03.controller包下創(chuàng)建控制器類FileController,在該類中處理文件上傳的請(qǐng)求,將上傳的文件存放在指定路徑下,并返回上傳結(jié)果。具體如文件3-14所示。文件3-14FileController.java源代碼3.3
文件上傳(4)程序效果測(cè)試。為了方便測(cè)試,先將chapter03項(xiàng)目中攔截器相關(guān)配置進(jìn)行注釋,啟動(dòng)項(xiàng)目,在瀏覽器訪問(wèn)fileupload.html。3.3
文件上傳在文件上傳頁(yè)面中單擊“選擇文件”按鈕,選擇一個(gè)后綴名不是jpg的文件,然后單擊“提交”按鈕。3.3
文件上傳再次單擊“選擇文件”按鈕,選擇后綴名為jpg的文件,然后單擊“提交”按鈕。異常處理3.43.4
異常處理在日常的Web開(kāi)發(fā)中,項(xiàng)目中難免會(huì)出現(xiàn)各種異常,為了使客戶端能接收較為友好的提示,通常開(kāi)發(fā)者會(huì)對(duì)異常進(jìn)行統(tǒng)一處理。為了便于開(kāi)發(fā)者處理異常,SpringBoot通過(guò)自動(dòng)裝配提供了一套默認(rèn)的異常處理機(jī)制,一旦程序中出現(xiàn)了異常,SpringBoot會(huì)根據(jù)該機(jī)制進(jìn)行默認(rèn)的異常處理。除了默認(rèn)的異常處理,SpringBoot也支持自定義異常處理。下面對(duì)SpringBoot中的異常處理進(jìn)行講解。3.4.1
SpringBoot異常處理自動(dòng)配置原理先定一個(gè)小目標(biāo)!
先定一個(gè)小目標(biāo)!熟悉SpringBoot異常處理自動(dòng)配置原理,能夠說(shuō)出SpringBoot異常處理自動(dòng)配置原理3.4.1
SpringBoot異常處理自動(dòng)配置原理SpringBoot通過(guò)配置類ErrorMvcAutoConfiguration為異常處理提供了自動(dòng)配置,該配置類向容器中注入了以下4個(gè)組件。ErrorPageCustomizer:錯(cuò)誤頁(yè)面響應(yīng)規(guī)則類,該組件會(huì)在在系統(tǒng)發(fā)生異常后,默認(rèn)將請(qǐng)求轉(zhuǎn)發(fā)到“/error”。BasicErrorController:錯(cuò)誤控制器,處理“/error”請(qǐng)求。DefaultErrorViewResolver:默認(rèn)的錯(cuò)誤視圖解析器,將異常信息解析到相應(yīng)的錯(cuò)誤視圖。DefaultErrorAttributes:錯(cuò)誤屬性處理類,用于頁(yè)面上共享異常信息。3.4.1
SpringBoot異常處理自動(dòng)配置原理SpringBoot項(xiàng)目中配置了SpringMVC的啟動(dòng)器后,項(xiàng)目啟動(dòng)時(shí)會(huì)加載異常處理的自動(dòng)配置類ErrorMvcAutoConfiguration,ErrorMvcAutoConfiguration會(huì)向容器中注入了一個(gè)名為ErrorPageCustomizer的組件,該組件用于定制錯(cuò)誤頁(yè)面的響應(yīng)規(guī)則。ErrorPageCustomizer類中提供了registerErrorPages()方法用于注冊(cè)錯(cuò)誤頁(yè)面的響應(yīng)規(guī)則。當(dāng)系統(tǒng)發(fā)生異常后,ErrorPageCustomizer組件會(huì)自動(dòng)生效,并將請(qǐng)求轉(zhuǎn)發(fā)到SpringBoot的異常處理地址,默認(rèn)為“/error”。1.ErrorPageCustomizer3.4.1
SpringBoot異常處理自動(dòng)配置原理ErrorMvcAutoConfiguration還向容器中注入了錯(cuò)誤控制器組件BasicErrorController,BasicErrorController中會(huì)對(duì)異常處理路徑進(jìn)行統(tǒng)一映射處理。BasicErrorController提供了errorHtml()和error()方法。其中,errorHtml()方法用于處理請(qǐng)求的MediaType為text/html的請(qǐng)求,并使用錯(cuò)誤視圖解析器生成包含錯(cuò)誤頁(yè)面地址和頁(yè)面內(nèi)容的ModelAndView對(duì)象;error()方法用于處理其他的請(qǐng)求,并返回JSON格式的數(shù)據(jù)展示錯(cuò)誤信息。2.BasicErrorController3.4.1
SpringBoot異常處理自動(dòng)配置原理ErrorMvcAutoConfiguration加載的同時(shí)也會(huì)向容器中注入DefaultErrorViewResolver類。當(dāng)BasicErrorController使用errorHtml()方法處理異常請(qǐng)求時(shí),SpringBoot會(huì)獲取容器中所有的ErrorViewResolver(錯(cuò)誤視圖解析器)對(duì)象,并分別調(diào)用resolveErrorView()方法對(duì)異常信息進(jìn)行解析,其中默認(rèn)錯(cuò)誤信息解析器為DefaultErrorViewResolver。3.DefaultErrorViewResolver3.4.1
SpringBoot異常處理自動(dòng)配置原理DefaultErrorViewResolver解析異常信息的步驟如下。①
根據(jù)錯(cuò)誤狀態(tài)碼,生成對(duì)應(yīng)的錯(cuò)誤視圖。錯(cuò)誤視圖的名稱格式為“error/status”,其中,status為錯(cuò)誤狀態(tài)碼。②
嘗試使用模板引擎解析錯(cuò)誤視圖。從classpath類路徑的templates/error目錄下查找status.html文件,其中status為錯(cuò)誤狀態(tài)碼。若模板引擎能夠解析到對(duì)應(yīng)的視圖,則將視圖和數(shù)據(jù)封裝成ModelAndView返回,并結(jié)束整個(gè)解析流程。③
如果模板引擎不能正確解析到對(duì)應(yīng)的視圖,則依次從各個(gè)靜態(tài)資源文件夾的error文件夾中查找status.html文件,若在靜態(tài)文件夾中找到了該錯(cuò)誤頁(yè)面,則將視圖和數(shù)據(jù)封裝成ModelAndView返回,并結(jié)束整個(gè)解析流程。④
如果上述流程都沒(méi)有查找到對(duì)應(yīng)的視圖,則使用SpringBoot默認(rèn)的錯(cuò)誤頁(yè)面作為響應(yīng)的視圖。3.DefaultErrorViewResolver3.4.1
SpringBoot異常處理自動(dòng)配置原理DefaultErrorAttributes是SpringBoot的默認(rèn)錯(cuò)誤屬性處理類,它可以從請(qǐng)求中獲取異?;蝈e(cuò)誤信息,并將其封裝為一個(gè)Map對(duì)象返回。在BasicErrorController處理異常時(shí),會(huì)調(diào)用DefaultErrorAttributes的getErrorAttributes()方法獲取錯(cuò)誤或異常信息,并封裝到Model中,返回到頁(yè)面或JSON數(shù)據(jù)中。該Model中主要包含以下屬性。timestamp:時(shí)間戳。status:錯(cuò)誤的狀態(tài)碼。error:錯(cuò)誤的原因描述。exception:導(dǎo)致請(qǐng)求處理失敗的異常類名。message:錯(cuò)誤/異常消息。tra
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年高品質(zhì)衛(wèi)浴設(shè)備采購(gòu)及安裝服務(wù)合同3篇
- 2024年資產(chǎn)權(quán)屬變更協(xié)議樣本文本版B版
- 2025年度博物館文物清潔與保養(yǎng)合同范本3篇
- 2024年版再婚夫妻解除婚姻關(guān)系合同版B版
- 2024年網(wǎng)絡(luò)安全監(jiān)控合作協(xié)議
- 2024年自然人短期貸款協(xié)議3篇
- 2025年度承包魚(yú)塘養(yǎng)殖與科研合作合同3篇
- 2025年度廚師餐飲行業(yè)人才培養(yǎng)與合作合同3篇
- 2025年度出口退稅證明開(kāi)具與稅務(wù)籌劃合同3篇
- 2024版數(shù)據(jù)服務(wù)合同范本
- 2024年酒店式公寓承包合同
- 學(xué)校安全存在的問(wèn)題及整改措施
- 2025年八省聯(lián)考內(nèi)蒙古高考生物試卷真題答案詳解(精校打印)
- 2025年包鋼集團(tuán)公司招聘筆試參考題庫(kù)含答案解析
- 校園公園綠化養(yǎng)護(hù)協(xié)議
- 貓抓病的護(hù)理
- 2024版城市綠化養(yǎng)護(hù)合同補(bǔ)充協(xié)議3篇
- GB/T 19799.2-2024無(wú)損檢測(cè)超聲檢測(cè)試塊第2部分:2號(hào)標(biāo)準(zhǔn)試塊
- 2024-2025學(xué)年冀教新版八年級(jí)上冊(cè)數(shù)學(xué)期末復(fù)習(xí)試卷(含詳解)
- 內(nèi)蒙古呼和浩特市2024屆九年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- DB45T 1831-2018 汽車加油加氣站防雷裝置檢測(cè)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論