【Spring】Dispatcher Servlet 簡單理解及項(xiàng)目配置

Dispatcher Servlet 簡單理解及項(xiàng)目配置

本文主要介紹Spring中Dispatcher Servlet在項(xiàng)目中的配置和基本理解


一取视、簡介

DispatcherServlet是前端控制器設(shè)計(jì)模式的實(shí)現(xiàn)打厘,提供Spring Web MVC的集中訪問點(diǎn)垒玲,而且負(fù)責(zé)職責(zé)的分派鳖擒,與Spring IoC容器無縫集成顾翼,從而可以獲得Spring的所有好處台腥。

DispatcherServlet配置在web.xml文件中宏赘,攔截匹配的請求,Servlet攔截匹配規(guī)則要自己定義黎侈,把攔截下來的請求察署,依據(jù)相應(yīng)的規(guī)則分發(fā)到目標(biāo)Controller來處理,是配置spring MVC的第一步峻汉。

二贴汪、作用

DispatcherServlet主要用作職責(zé)調(diào)度工作,本身主要用于控制流程休吠,主要職責(zé)如下:

1扳埂、文件上傳解析,如果請求類型是multipart將通過MultipartResolver進(jìn)行文件上傳解析瘤礁;
2阳懂、通過HandlerMapping,將請求映射到處理器(返回一個(gè)HandlerExecutionChain,它包括一個(gè)處理器岩调、多個(gè)HandlerInterceptor攔截器)巷燥;
3、通過HandlerAdapter支持多種類型的處理器(HandlerExecutionChain中的處理器)号枕;
4缰揪、通過ViewResolver解析邏輯視圖名到具體視圖實(shí)現(xiàn);
5葱淳、本地化解析钝腺;
6、渲染具體的視圖等赞厕;
7拍屑、如果執(zhí)行過程中遇到異常將交給HandlerExceptionResolver來解析。

三坑傅、web.xml 配置

web.xml 文件配置:

<!-- 上下文 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/applicationContext.xml
    </param-value>
</context-param>
<listener>
    <description>Spring監(jiān)聽</description>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring MVC -->
<servlet>
    <!-- 配置的Dispatcher Servlet名稱及Class類 -->
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
    <!-- 表示啟動(dòng)容器時(shí)初始化該Servlet -->
    <load-on-startup>1</load-on-startup>
    
    <!-- 如若不配置init-param僵驰,DispatcherServlet默認(rèn)使用WebApplicationContext作為上下文,Spring默認(rèn)配置文件為“/WEB-INF/[servlet名字]-servlet.xml” -->
    <!-- 自定義初始化上下文 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 引用spring-mvc.xml文件 -->
        <param-value>classpath*:/spring-mvc.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <!-- 攔截匹配的請求唁毒,Servlet攔截匹配規(guī)則 -->
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
    <url-pattern>*.do</url-pattern>
    <url-pattern>*.json</url-pattern>
    <!-- 配置“/“攔截所有 -->
    <url-pattern>/</url-pattern>    
</servlet-mapping>

spring-mvc.xml 文件配置:

<!-- 使用Annotation自動(dòng)注冊Bean,只掃描@Controller -->
<!-- base-package 如果多個(gè)蒜茴,用“,”分隔 -->
<context:component-scan base-package="com.xxx.web.**.*,com.xxx.common.web.**.*" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    
    <!-- Spring3.2新注解@ControllerAdvice,使用@Component注解 -->
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 
    
    <!-- 不掃描Service -->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>

<!-- 默認(rèn)的注解映射的支持浆西,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping -->
<mvc:annotation-driven>
    <mvc:message-converters>
        <ref bean="fastJsonHttpMessageConverter" />
        <ref bean="stringHttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

<!-- 攔截器 -->
<mvc:interceptors>
    <!-- 國際化 -->
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    <!-- 異常 -->
    <bean class="com.xxx.common.interceptor.ExceptionInterceptor" />
    <!-- 用戶Session -->
    <bean class="com.xxx.web.interceptor.UserLoginInterceptor"/>
</mvc:interceptors>

<!-- 上傳限制 -->
<beanid="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="5242880" />
    <property name="maxInMemorySize" value="4096" />
    <property name="defaultEncoding" value="utf-8" />
    <!-- 延遲解析文件 -->
    <property name="resolveLazily" value="true" />
</bean>

<!-- freemark視圖分析器 -->
<bean id="freemarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="cache" value="true" />
    <property name="prefix" value="/views/" />
    <property name="suffix" value=".html" />
    <property name="contentType" value="text/html; charset=UTF-8" />
    <property name="exposeRequestAttributes" value="true" />
    <property name="exposeSessionAttributes" value="true" />
    <property name="exposeSpringMacroHelpers" value="true" />
    <property name="requestContextAttribute" value="request" />
</bean>

四粉私、特殊Bean

DispatcherServlet中使用的特殊的Bean:
DispatcherServlet默認(rèn)使用WebApplicationContext作為上下文,該上下文中特殊的Bean有:

1近零、Controller
處理器/頁面控制器诺核,做的是MVC中的C的事情,但控制邏輯轉(zhuǎn)移到前端控制器了久信,用于對請求進(jìn)行處理窖杀;
2、HandlerMapping
請求到處理器的映射裙士,如果映射成功返回一個(gè)HandlerExecutionChain對象
(包含一個(gè)Handler處理器(頁面控制器)對象入客、多個(gè)HandlerInterceptor攔截器)對象;
如BeanNameUrlHandlerMapping將URL與Bean名字映射腿椎,映射成功的Bean就是此處的處理器桌硫;
3、HandlerAdapter
HandlerAdapter將會(huì)把處理器包裝為適配器啃炸,從而支持多種類型的處理器铆隘,即適配器設(shè)計(jì)模式的應(yīng)用,
從而很容易支持很多類型的處理器南用;
如SimpleControllerHandlerAdapter將對實(shí)現(xiàn)了Controller接口的Bean進(jìn)行適配膀钠,
并且按處理器的handleRequest方法進(jìn)行功能處理掏湾;
4、ViewResolver
ViewResolver將把邏輯視圖名解析為具體的View托修,通過這種策略模式,很容易更換其他視圖技術(shù)恒界;
如InternalResourceViewResolver將邏輯視圖名映射為jsp視圖睦刃;
5、LocalResover
本地化解析十酣,因?yàn)镾pring支持國際化涩拙,因此LocalResover解析客戶端的Locale信息從而方便進(jìn)行國際化;
6耸采、ThemeResovler
主題解析兴泥,通過它來實(shí)現(xiàn)一個(gè)頁面多套風(fēng)格,即常見的類似于軟件皮膚效果虾宇;
7搓彻、MultipartResolver
文件上傳解析,用于支持文件上傳嘱朽;
8旭贬、HandlerExceptionResolver
處理器異常解析,可以將異常映射到相應(yīng)的統(tǒng)一錯(cuò)誤界面搪泳,從而顯示用戶友好的界面(而不是給用戶看到具體的錯(cuò)誤信息)稀轨;
9、RequestToViewNameTranslator
當(dāng)處理器沒有返回邏輯視圖名等相關(guān)信息時(shí)岸军,自動(dòng)將請求URL映射為邏輯視圖名奋刽;

到此本文已結(jié)束,后續(xù)有時(shí)間繼續(xù)詳解dispatcher servlet初始化及具體實(shí)現(xiàn)艰赞。
文章部分內(nèi)容參照百度百科佣谐,如有問題,請大家留言指出方妖。

掃描下面二維碼台谍,關(guān)注我的公眾號(hào)哦!S醵稀趁蕊!


關(guān)注我的公眾號(hào)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仔役,隨后出現(xiàn)的幾起案子掷伙,更是在濱河造成了極大的恐慌,老刑警劉巖又兵,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件任柜,死亡現(xiàn)場離奇詭異卒废,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宙地,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門摔认,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宅粥,你說我怎么就攤上這事参袱。” “怎么了秽梅?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵抹蚀,是天一觀的道長。 經(jīng)常有香客問我企垦,道長环壤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任钞诡,我火速辦了婚禮郑现,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荧降。我一直安慰自己懂酱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布誊抛。 她就那樣靜靜地躺著列牺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拗窃。 梳的紋絲不亂的頭發(fā)上瞎领,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音随夸,去河邊找鬼九默。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宾毒,可吹牛的內(nèi)容都是我干的驼修。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼诈铛,長吁一口氣:“原來是場噩夢啊……” “哼乙各!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幢竹,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤耳峦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后焕毫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹲坷,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驶乾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了循签。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片级乐。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖县匠,靈堂內(nèi)的尸體忽然破棺而出风科,到底是詐尸還是另有隱情,我是刑警寧澤聚唐,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布丐重,位于F島的核電站腔召,受9級(jí)特大地震影響杆查,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臀蛛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一亲桦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浊仆,春花似錦客峭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洲劣,卻和暖如春备蚓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背囱稽。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工郊尝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人战惊。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓流昏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吞获。 傳聞我的和親對象是個(gè)殘疾皇子况凉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)各拷,斷路器茎刚,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • 什么是Spring Spring是一個(gè)開源的Java EE開發(fā)框架。Spring框架的核心功能可以應(yīng)用在任何Jav...
    jemmm閱讀 16,441評論 1 133
  • 本章內(nèi)容: 映射請求到Spring控制器 透明地綁定表單參數(shù) 校驗(yàn)表單提交 狀態(tài)管理撤逢、工作流以及驗(yàn)證都是Web 開...
    謝隨安閱讀 8,581評論 0 4
  • 看看天,看看地 才確定了這個(gè)時(shí)節(jié) 像一個(gè)沒出過遠(yuǎn)門的小姑娘 牽起裙擺角初狰,忐忑的走向人間 她一來莫杈,便聽到人們再歡呼,...
    明日夏風(fēng)閱讀 313評論 0 0