2023-01-22 一、SpringMVC攔截器的兩種裝配方式 1、全局裝配(放置在springmvc.xml中) <!-- 裝配攔截器--> <!-- 全局裝配--> <mvc:interceptors> <ref bean="myInterceptor"></ref> </mvc:interc ...
2023-01-22
一、SpringMVC攔截器的兩種裝配方式
1、全局裝配(放置在springmvc.xml中)
<!-- 裝配攔截器--> <!-- 全局裝配--> <mvc:interceptors> <ref bean="myInterceptor"></ref> </mvc:interceptors>
2、局部裝配
<mvc:interceptors> <!-- 局部裝配--> <mvc:interceptor> <mvc:mapping path="/testJSON"/> <ref bean="myInterceptor"></ref> </mvc:interceptor> </mvc:interceptors>
二、SpringMVC攔截器工作原理
1、單個攔截器工作原理
(1)瀏覽器向伺服器發送請求
(2)執行攔截器第一個方法preHandle()
(3)執行Controller中方法,處理請求做出響應
(4)執行攔截器第二個方法postHandler()
(5)執行DispatcherServlet中渲染視圖
(6)執行攔截器第三個方法afterCompletion()
(7)響應
2、多個攔截器工作原理
(1)瀏覽器向伺服器發送請求
(2)執行攔截器1第一個方法preHandle()
(3)執行攔截器2第一個方法preHandle()
(4)執行Controller中方法,處理請求做出響應
(5)執行攔截器2第二個方法postHandler()
(6)執行攔截器1第二個方法postHandler()
(7)執行DispatcherServlet中渲染視圖
(8)執行攔截器2第三個方法afterCompletion()
(9)執行攔截器1第三個方法afterCompletion()
(10)響應
三、SpringMVC攔截器-preHandler()返回值
1、當第一個攔截器preHandler()方法返回false時,執行當前方法後,程式終止。
2、當不是第一個攔截器preHandle()方法返回false時
(1)執行當前攔截器及之前攔截器的preHandle()方法
(2)執行之前攔截器的afterCompletion()方法
四、SpringMVC中的異常處理器
1、處理異常的原因
如程式中出現異常未處理,會導致程式運行終止(宕機)
2、javaSE階段異常處理機制
(1)try-catch-finally
(2)throw或throws
3、SpringMVC通過HandlerExceptionResolver處理程式的異常,包括Handler映射、數據綁定以及目標方法執行時發生的異常。
4、兩個異常處理器實現方法
(1)DefaultHandleExceptionResolver:預設異常處理器,預設開啟,可以支持10+多種異常處理
(2)SimpleMappingExceptionResolver
①映射自定義異常處理器,作用:將指定的異常映射到指定頁面
②裝配異常處理器(SimpleMappingExceptionResolver)
(3)示例代碼
<!-- 配置異常處理器--> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.ArithmeticException">error/error_arith</prop> <prop key="java.lang.NullPointerException">error/error_null</prop> </props> </property> <property name="exceptionAttribute" value="ex"></property> </bean>
5、總結:
①出現異常,不會執行postHanle()
②出現異常,也會返回ModelAndView
五、SpringMVC工作原理——擴展三個對象
1、HandlerMapping
(1)概述:請求處理器映射器對象(即HandlerMapping定義一個映射關係,所有請求與請求處理器的映射關係)
(2)作用:通過HandlerMapping可以獲取HandlerExecutionChain對象
2、HandlerExecutionChain
(1)概述:請求處理器執行鏈對象(即由當前請求處理器(Controller)和對應攔截器組成)
(2)作用:通過HandlerExecutionChain對象可以獲取HandlerAdapter對象
3、HandlerAdapter
(1)概述:請求處理器適配器對象
(2)作用:通過HandlerAdapter的hh.handle()調用處理器中相應方法
六、SpringMVC工作原理1
1、請求(瀏覽器向伺服器發送請求,攜帶URL(/testSpringMVCResult))
2、通過DispatcherServlet載入SpringMVC容器對象,從而載入Controller(請求處理器)
3、判斷URL是否存在
(1)不存在:判斷是否配置<mvc:default-servlet-handler>
①配置:出現404現象,同時提示URL不可用
②未配置:出現404現象,但不會提示
七、SpringMVC工作原理2
1、請求(瀏覽器想伺服器發送請求,攜帶URL (/testSpringMVCResult) )
2、通過DispatcherServlet載入SpringMVC容器對象,從而載入Controller(請求處理器)
載入三個對象(HandlerMapping、HandlerExecutionChain、HandlerAdapter)
3、判斷URL是否存在(存在)
4、執行Intercepter(攔截器)第一個方法(preHandle())
5、執行Controller(請求處理器)中的相應方法(處理請求,做出響應)
6、判斷Controller中是否存在異常
(1)存在異常
通過HandlerExceptionResolver異常處理器處理異常,並返回ModelAndView
(2)不存在異常
通過HandlerExceptionResolver異常處理器處理異常,並返回ModelandView
①Controller返回ModelAndView
1控制器返回模型和視圖
②觸發攔截器第二個方法(postHandle())
7、通過ViewResolver(視圖對象)從ModelAndView中解析出來8、View對象開始渲染視圖
8、View對象開始渲染視圖)
(1)將數據共用
(2)路徑跳轉
9、執行攔截器第三個方法(afterCompletion())
10、響應