對前端控制器等配置的理解
一.SpringMVC
就是關於Web層面的MVC分層框架
是Spring FrameWork框架的延續
該框架為我們的Web開發提供了一整套的MVC模式
View: jsp 或html頁面 -->客戶端也可以是瀏覽器
Controller: class類,擁有@Controller ----->核心
Model: 就是Map集合 ,這裡的資料預設會轉化到request.setAttribute
原來的url
http://localhost:8080/TB/index?un=張三&pass=123456
RESTFUL:型別的url
http://localhost:8080/TB/index/張三/123456
二.SpringMVC基本使用
1.引用jar包
2. 建立配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置控制器物件 -->
<bean id="/h1" class="org.qf.controller.HelloController"></bean>
<!-- 掃描註解 -->
<context:component-scan base-package="org.qf.controller"></context:component-scan>
</beans>
3. 建立控制器物件
4. 在web.xml配置分發的DispatcherServlet並載入配置檔案
5.執行
SpringMVC三大件 -->缺一不可
1.控制器: 我們需要重點掌握
2.xxxMVC.xml :配置Spring FrameWork的一些內容 :控制器需要在該配置中使用
3.DispatcherServlet :前端控制器(分發的servlet) :解析請求並轉發給對應的View
3.SpringMVC配置詳解
DispatcherServlet:
必須在web.xml中進行註冊對映
這個必須優先啟動,數值越小,優先順序越高
需要配置:
<load-on-startup>1</load-on-startup>
預設會載入 :Spring FrameWork的配置檔案,檔案要求
檔案: WEB-INF/servletname--->servlet.xml
(SpringMVC規定,一個DispatcherServlet就應該有一個配置檔案)
如果改變配置檔案路徑:
需要使用`初始化引數
contextConfigLocation
這個值就是我們的配置檔案路徑
該Servlet的url-pattern取值說明:
1. /完整名稱 :只能針對當前的url請求
2 /* :攔截所有 包含:圖片(png\jpg等) css js html jsp servlet等 SpringMVC 不建議使用
3. /*.xxx -->*.do *.op *.action *.controller *.jpg -->攔截指定字元結尾的請求
4. / :攔截所有資源(除了jsp)-->springMVC推薦使用
<!--就是為了放行靜態資源 -->
<mvc:default-servlet-handler/>
<mvc:resources location="" mapping=""></mvc:resources>
初始化過程:
1. 在啟動Web專案時,容器(比如Tomcat)會讀web.xml配置檔案中的兩個節點<listener>和<contex-param>。
2. 接著容器會建立一個ServletContext(上下文),應用範圍內即整個WEB專案都能使用這個上下文。
3. 接著容器會將讀取到<context-param>轉化為鍵值對,並交給ServletContext。
4. 容器建立<listener></listener>中的類例項,即建立監聽(備註:listener定義的類可以是自定義的類但必須需要繼承ServletContextListener)。
5. 在監聽的類中會有一個contextInitialized(ServletContextEvent event)初始化方法,在這個方法中可以通過event.getServletContext().getInitParameter("contextConfigLocation") 來得到context-param 設定的值。在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷燬方法.用於關閉應用前釋放資源,比如說資料庫連線的關閉。
6. 得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB專案還沒有完全啟動完成.這個動作會比所有的Servlet都要早。
ContextLoaderListener初始化的上下文載入的Bean是對於整個應用程式共享的,不管是使用什麼表現層技術,一般如DAO層、Service層Bean;
DispatcherServlet初始化的上下文載入的Bean是隻對Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,該初始化上下文應該只加載Web相關元件。
由上面的初始化過程可知容器對於web.xml的載入過程是context-param >> listener >> fileter >> servlet
三.Spring FrameWork的配置檔案
也就是之前Spring的配置檔案
通過IOC容器建立的物件
需要引用:mvc 和context還有bean
可以配置:
需要配置控制器物件
配置檢視攔截器
資料解析器
1.控制器
根據建立控制器方式的不同,配置也不一樣
2.SpringMVC建立的兩種建立方式
實現Controller介面(基本不用)
需要在配置檔案中,使用<bean id="url" class=""/>
必須實現唯一方法:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
註解
@Controller:主要用在類上,標記這是一個控制器
內部的方法應該使用@RequestMapping
可以用來類或方法上,可以標記請求的url路徑
必須在配置檔案中使用
<context:component-scan base-package="org.qf.controller"></context:component-scan>
進行註解的掃描
四.解析DispatcherServlet
DispatcherServlet:類
繼承
FrameworkServlet
繼承
HttpServletBean
繼承
HttpServlet
initStrategies(ApplicationContext context),完成初始化配置
完成以下的模組哈ude初始化:
initMultipartResolver(context);//檔案上傳模組的初始化
主要用來完成檔案上傳的
initLocaleResolver(context);//初始化本地化解析
國際化
initThemeResolver(context);//主題解析器
initHandlerMappings(context);處理器對映檔案
一般用來處理Mapping
initHandlerAdapters(context);處理器介面卡
initHandlerExceptionResolvers(context);處理器異常解析器
initRequestToViewNameTranslator(context);檢視名稱解析器
initViewResolvers(context);檢視解析器
initFlashMapManager(context);flash重新整理
DispatcherServlet內部的物件例項:
multipartResolve:預設沒有,一個
localeResolver:預設有,一個
themeResolver:預設有,一個
handlerMapping:預設有,可以有多個
handlerAdapter:預設有,可以有多個
handlerExceptionResolver:預設有,可以有多個
viewNameTranslator:預設有,一個
viewResolvers:預設有,可以有多個
flashMapManager:預設有,一個
五.執行過程:
initStrategies:完成初始化
詳情見圖: