springmvc核心流程及配置

原文鏈接http://zhhll.icu/2020/%E6%A1%86%E6%9E%B6/springmvc/springmvc%E6%A0%B8%E5%BF%83%E6%B5%81%E7%A8%8B%E5%8F%8A%E9%85%8D%E7%BD%AE/

核心流程及配置

核心流程

  • 首先用戶發(fā)送請求-------->DispatcherServlet,前端控制器收到請求后自己不進行處理坟桅,而是委托給其他的解析器進行處理锰镀,作為同一訪問點,進行全局的流程控制

  • DispatcherServlet--------->HandlerMapping纯露,HandlerMapping將會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器對象、多個HandlerInterceptor攔截器),通過策略模式击吱,很容易添加新的映射策略

  • DispatcherServlet---------->HandlerAdapter,HandlerAdapter將會把處理器包裝為適配器们镜,從而支持多種類型的處理器币叹,即適配設(shè)計模式的應(yīng)用,從而很容易支持很多類型的處理器

  • HandlerAdapter------------->處理器功能處理方法的調(diào)用模狭,HandlerAdapter將會根據(jù)適配的結(jié)果調(diào)用真正的處理器的功能處理方法颈抚,完成功能處理,并返回一個ModelAndView對象

  • ModelAndView的邏輯視圖名-------->ViewResolver嚼鹉,ViewResolver將把邏輯視圖解析為具體的View贩汉,通過這種策略模式,很容易更換其他視圖技術(shù)

  • View------>渲染锚赤,View會根據(jù)傳進來的Model模型進行渲染匹舞,此處的Model實際是一個Map

  • 返回控制權(quán)給DispatcherServlet,有DispatcherServlet返回響應(yīng)給用戶

配置

DispatcherServlet

DispatcherServlet充當SpringMVC的前端控制器线脚。與其他Servlet一樣赐稽,DispatcherServlet必須在Web應(yīng)用程序的web.xml文件中進行配置

web.xml配置

<!-- springmvc會過濾掉.html的 導(dǎo)致視圖解析器無法找到
     如果只是使用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>
  <!-- 初始化參數(shù):配置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>
<!-- 處理靜態(tài)資源 -->
<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>
靜態(tài)資源請求問題

因為DispatcherServlet的<url-pattern>配置的是/,針對的是所有請求浑侥,所以對于一些的靜態(tài)資源(如.js姊舵、.css)等也會經(jīng)過DispatcherServlet,但是DispatcherServlet是處理動態(tài)請求的寓落,無法處理靜態(tài)資源

配置<mvc:default-servlet-handler/>來解決括丁,作用是處理靜態(tài)資源,將在SpringMVC上下文中定義一個DefaultServletHttpRequestHandler,會對進行DispatcherServlet的請求進行篩選伶选,如果發(fā)現(xiàn)是沒有經(jīng)過映射的請求史飞,就將請求交給WEB服務(wù)器默認的Servlet來處理,否則交由DispatcherServlet來處理

default-servlet-name默認是default仰税,如果不是default需要顯式的進行配置(看所使用的web服務(wù)器构资,tomcat是default

<mvc:default-servlet-handler default-servlet-name="default"/>

需要注意的是,配置了<mvc:default-servlet-handler/>之后陨簇,@RequestMapping的映射會失效蚯窥,需要加上<mvc:annotation-driven/>配置

HandlerMapping

spring自帶了多個處理器映射實現(xiàn)

  • BeanNameUrlHandlerMapping 根據(jù)控制器Bean的名字將控制器映射到URL

  • ControllerBeanNameHandlerMapping 與BeanNameUrlHandlerMapping類似

  • ControllerClassNameHandlerMapping 通過使用控制器的類名作為URL基礎(chǔ)將控制器映射到URL

  • DefaultAnnotationHandlerMapping 將請求映射給使用@RequestMapping注解的控制器和控制器方法

  • SImplerUrlHandlerMapping 使用定義在Spring應(yīng)用上下文的集合將控制器映射到URL

<!-- 開啟注解 -->
<mvc:annotation-driven/>
<bean id="defaultAnnotationHandlerMapping"          class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
mvc:annotation-driven配置的作用
  • <mvc:annotation-driven/>會自動注冊RequestMappingHandlerMapping、RequestMappingHandlerAdater塞帐、ExceptionHandlerExceptionResolver三個bean
  • 支持使用ConversionService實例對表單參數(shù)進行類型轉(zhuǎn)換
  • 支持使用@NumberFormatannotation拦赠、@DataTimeFormat注解完成數(shù)據(jù)類型的格式化
  • 支持使用@Vaild注解對JavaBean實例進行JSR 303驗證
  • 支持使用@RequestBody和@ResponseBody注解

HandlerAdapter

<bean id="annotationMethodHandlerAdapter"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

配置視圖

InternalResourceViewResolver將邏輯視圖名稱解析為View對象,架構(gòu)該對象渲染的任務(wù)委托給Web應(yīng)用程序上下文的一個模板

<!-- 配置視圖解析器葵姥,將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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市榔幸,隨后出現(xiàn)的幾起案子允乐,更是在濱河造成了極大的恐慌矮嫉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牍疏,死亡現(xiàn)場離奇詭異蠢笋,居然都是意外死亡,警方通過查閱死者的電腦和手機鳞陨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門昨寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厦滤,你說我怎么就攤上這事援岩。” “怎么了掏导?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵享怀,是天一觀的道長。 經(jīng)常有香客問我趟咆,道長添瓷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任值纱,我火速辦了婚禮仰坦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘计雌。我一直安慰自己,他們只是感情好玫霎,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布凿滤。 她就那樣靜靜地躺著,像睡著了一般庶近。 火紅的嫁衣襯著肌膚如雪翁脆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天鼻种,我揣著相機與錄音反番,去河邊找鬼。 笑死叉钥,一個胖子當著我的面吹牛罢缸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播投队,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枫疆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敷鸦?” 一聲冷哼從身側(cè)響起息楔,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤寝贡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后值依,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圃泡,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年愿险,在試婚紗的時候發(fā)現(xiàn)自己被綠了颇蜡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拯啦,死狀恐怖澡匪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褒链,我是刑警寧澤唁情,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站甫匹,受9級特大地震影響甸鸟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兵迅,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一抢韭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恍箭,春花似錦刻恭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至交洗,卻和暖如春骑科,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背构拳。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工咆爽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人置森。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓斗埂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凫海。 傳聞我的和親對象是個殘疾皇子蜜笤,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容