首先用戶發送請求-------->DispatcherServlet,前端控制器收到請求後本身不進行處理,而是委託給其餘的解析器進行處理,做爲同一訪問點,進行全局的流程控制html
DispatcherServlet--------->HandlerMapping,HandlerMapping將會把請求映射爲HandlerExecutionChain對象(包含一個Handler處理器對象、多個HandlerInterceptor攔截器),經過策略模式,很容易添加新的映射策略前端
DispatcherServlet---------->HandlerAdapter,HandlerAdapter將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配設計模式的應用,從而很容易支持不少類型的處理器web
HandlerAdapter------------->處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理,並返回一個ModelAndView對象spring
ModelAndView的邏輯視圖名-------->ViewResolver,ViewResolver將把邏輯視圖解析爲具體的View,經過這種策略模式,很容易更換其餘視圖技術設計模式
View------>渲染,View會根據傳進來的Model模型進行渲染,此處的Model實際是一個Maptomcat
返回控制權給DispatcherServlet,有DispatcherServlet返回響應給用戶服務器
DispatcherServlet充當SpringMVC的前端控制器。與其餘Servlet同樣,DispatcherServlet必須在Web應用程序的web.xml文件中進行配置架構
web.xml配置mvc
<!-- springmvc會過濾掉.html的 致使視圖解析器沒法找到 若是隻是使用jsp資源而未使用html的話能夠不配置該項 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 初始化參數:配置Springmvc配置文件的位置和名稱 默認配置文件爲:/WEB-INF/<servlet-name>-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 處理靜態資源 --> <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"></mvc:resources> <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"></mvc:resources> <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"></mvc:resources>
由於DispatcherServlet的
配置<mvc:default-servlet-handler/>來解決,做用是處理靜態資源,將在SpringMVC上下文中定義一個DefaultServletHttpRequestHandler,會對進行DispatcherServlet的請求進行篩選,若是發現是沒有通過映射的請求,就將請求交給WEB服務器默認的Servlet來處理,不然交由DispatcherServlet來處理
default-servlet-name默認是default,若是不是default須要顯式的進行配置(看所使用的web服務器,tomcat是default
<mvc:default-servlet-handler default-servlet-name="default"/>
須要注意的是,配置了<mvc:default-servlet-handler/>以後,@RequestMapping的映射會失效,須要加上<mvc:annotation-driven/>配置
spring自帶了多個處理器映射實現
BeanNameUrlHandlerMapping 根據控制器Bean的名字將控制器映射到URL
ControllerBeanNameHandlerMapping 與BeanNameUrlHandlerMapping相似
ControllerClassNameHandlerMapping 經過使用控制器的類名做爲URL基礎將控制器映射到URL
DefaultAnnotationHandlerMapping 將請求映射給使用@RequestMapping註解的控制器和控制器方法
SImplerUrlHandlerMapping 使用定義在Spring應用上下文的集合將控制器映射到URL
<!-- 開啓註解 --> <mvc:annotation-driven/> <bean id="defaultAnnotationHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
InternalResourceViewResolver將邏輯視圖名稱解析爲View對象,架構該對象渲染的任務委託給Web應用程序上下文的一個模板
<!-- 配置視圖解析器,將ModelAndView及字符串解析爲具體的頁面 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>
因爲自己的博客百度沒有收錄,博客地址http://zhhll.icu