SpringMVC和前端技術(shù)分享課件_第1頁
SpringMVC和前端技術(shù)分享課件_第2頁
SpringMVC和前端技術(shù)分享課件_第3頁
SpringMVC和前端技術(shù)分享課件_第4頁
SpringMVC和前端技術(shù)分享課件_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

知識點前端技術(shù)分享SpringMVC工作原理和配置SpringMVC和前端技術(shù)分享前端技術(shù)分享參考地址:SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置一.SpringMVC的控制器DispatcherServlet

使用SpringMVC,配置DispatcherServlet是第一步。DispatcherServlet是一個Servlet,所以可以配置多個DispatcherServlet。DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規(guī)則要自已定義,把攔截下來的請求,依據(jù)某某規(guī)則分發(fā)到目標Controller來處理。DispatcherServlet主要用作職責(zé)調(diào)度工作,本身主要用于控制流程,主要職責(zé)如下:1、文件上傳解析,如果請求類型是multipart將通過MultipartResolver進行文件上傳解析;2、通過HandlerMapping,將請求映射到處理器(返回一個HandlerExecutionChain,它包括一個處理器、多個HandlerInterceptor攔截器);3、通過HandlerAdapter支持多種類型的處理器(HandlerExecutionChain中的處理器);4、通過ViewResolver解析邏輯視圖名到具體視圖實現(xiàn);5、本地化解析;6、渲染具體的視圖等;7、如果執(zhí)行過程中遇到異常將交給HandlerExceptionResolver來解析。SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置DispatcherServlet是一個Servlet,可以同時配置多個,每個DispatcherServlet有一個自己的上下文對象(WebApplicationContext),稱為子上下文(子容器),子上下文可以訪問父上下文中的內(nèi)容,但父上下文不能訪問子上下文中的內(nèi)容。它也保存在ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名稱。當一個Request對象產(chǎn)生時,會把這個子上下文對象(WebApplicationContext)保存在Request對象中,key是DispatcherServlet.class.getName()+".CONTEXT"??梢允褂霉ぞ哳惾〕錾舷挛膶ο螅篟equestContextUtils.getWebApplicationContext(request);SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置二.DispatcherServlet的默認配置DispatcherServlet的默認配置在DispatcherSperties(和DispatcherServlet類在一個包下)中,而且是當Spring配置文件中沒有指定配置時使用的默認策略:DispatcherServlet默認使用WebApplicationContext作為上下文,因此我們來看一下該上下文中有哪些特殊的Bean:1、Controller:處理器/頁面控制器,做的是MVC中的C的事情,但控制邏輯轉(zhuǎn)移到前端控制器了,用于對請求進行處理;2、HandlerMapping:請求到處理器的映射,如果映射成功返回一個HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器)對象;如BeanNameUrlHandlerMapping將URL與Bean名字映射,映射成功的Bean就是此處的處理器;3、HandlerAdapter:HandlerAdapter將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設(shè)計模式的應(yīng)用,從而很容易支持很多類型的處理器;如SimpleControllerHandlerAdapter將對實現(xiàn)了Controller接口的Bean進行適配,并且掉處理器的handleRequest方法進行功能處理;4、ViewResolver:ViewResolver將把邏輯視圖名解析為具體的View,通過這種策略模式,很容易更換其他視圖技術(shù);如InternalResourceViewResolver將邏輯視圖名映射為jsp視圖;SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置5、LocalResover:本地化解析,因為Spring支持國際化,因此LocalResover解析客戶端的Locale信息從而方便進行國際化;6、ThemeResovler:主題解析,通過它來實現(xiàn)一個頁面多套風(fēng)格,即常見的類似于軟件皮膚效果;7、MultipartResolver:文件上傳解析,用于支持文件上傳;8、HandlerExceptionResolver:處理器異常解析,可以將異常映射到相應(yīng)的統(tǒng)一錯誤界面,從而顯示用戶友好的界面(而不是給用戶看到具體的錯誤信息);9、RequestToViewNameTranslator:當處理器沒有返回邏輯視圖名等相關(guān)信息時,自動將請求URL映射為邏輯視圖名;10、FlashMapManager:用于管理FlashMap的策略接口,F(xiàn)lashMap用于存儲一個請求的輸出,當進入另一個請求時作為該請求的輸入,通常用于重定向場景SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置二.SpringMVC的配置<!--

自動掃描的包名

-->

<context:component-scan

base-package="com.app,com.core,JUnit4"

></context:component-scan>

<!--

默認的注解映射的支持

-->

<mvc:annotation-driven

/>

這是一種簡寫形式,完全可以手動配置替代這種簡寫形式,會自動注冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter兩個bean,是springMVC為@Controllers分發(fā)請求所必須的。

<!--

視圖解釋類

-->

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property

name="prefix"

value="/WEB-INF/jsp/"/>

<property

name="suffix"

value=".jsp"/><!--可為空,方便實現(xiàn)自已的依據(jù)擴展名來選擇視圖解釋類的邏輯

-->

<property

name="viewClass"

value="org.springframework.web.servlet.view.JstlView"

/>

</bean>

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置

<!--

對靜態(tài)資源文件的訪問

方案一

(二選一)

-->

<mvc:default-servlet-handler/>

會把"/**"url,注冊到SimpleUrlHandlerMapping的urlMap中,把對靜態(tài)資源的訪問由HandlerMapping轉(zhuǎn)到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler處理并返回.

DefaultServletHttpRequestHandler使用就是各個Servlet容器自己的默認Servlet.

<!--

對靜態(tài)資源文件的訪問

方案二

(二選一)-->

<mvc:resources

mapping="/images/**"

location="/images/"

cache-period="31556926"/>

</beans>

在spring3.0.4以后版本提供了mvc:resources,使用<mvc:resources/>元素,把mapping的URI注冊到SimpleUrlHandlerMapping的urlMap中,

key為mapping的URIpattern值,而value為ResourceHttpRequestHandler

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置

<!--

攔截器

-->

org.springframework.web.servlet.HandlerInterceptor接口,org.springframework.web.servlet.handler.HandlerInterceptorAdapter適配器,

實現(xiàn)這個接口或繼承此類,可以非常方便的實現(xiàn)自己的攔截器。

分別實現(xiàn)預(yù)處理、后處理(調(diào)用了Service并返回ModelAndView,但未進行頁面渲染)、返回處理(已經(jīng)渲染了頁面)

在preHandle中,可以進行編碼、安全控制等處理;

在postHandle中,有機會修改ModelAndView;

在afterCompletion中,可以根據(jù)ex是否為null判斷是否發(fā)生了異常,進行日志記錄。攔截器會在什么時候執(zhí)行呢?一個請求交給一個HandlerMapping時,這個HandlerMapping先找有沒有處理器來處理這個請求,如何找到了,就執(zhí)行攔截器,執(zhí)行完攔截后,交給目標處理器。

如果沒有找到處理器,那么這個攔截器就不會被執(zhí)行。

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置

在springMVC的配置文件中配置有三種方法1.<mvc:interceptors>

<bean

class="com.app.mvc.MyInteceptor"

/>

</mvc:interceptors>

只要請求被HandlerMapping上,即只找到一個處理器,這個攔截器總會被執(zhí)行的。起到了總攔截器的作用。如果是REST風(fēng)格的URL,靜態(tài)資源也會被攔截。方案二,(近似)總攔截器,攔截匹配的URL<mvc:interceptors

>

<mvc:interceptor>

<mvc:mapping

path="/user/*"

/>

<!--

/user/*

-->

<bean

class="com.mvc.MyInteceptor"></bean>

</mvc:interceptor>

</mvc:interceptors>

<mvc:interceptors><mvc:interceptor><mvc:mappingpath="/user/*"/><!--/user/*--><beanclass="com.mvc.MyInteceptor"></bean></mvc:interceptor></mvc:interceptors>就是比方案一多了一個URL匹配。如果是REST風(fēng)格的URL,靜態(tài)資源也會被攔截。

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置<bean

class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

<property

name="interceptors">

<list>

<bean

class="com.mvc.MyInteceptor"></bean>

</list>

</property>

</bean>如果是REST風(fēng)格的URL,靜態(tài)資源就不會被攔截。因為我們精準的注入了攔截器。如果使用了<mvc:annotation-driven/>,

它會自動注冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter這兩個bean,所以就沒有機會再給它注入interceptors屬性,就無法指定攔截器。

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置三.SpringMVC的數(shù)據(jù)綁定1).常用注釋1、@RequestParam綁定單個請求參數(shù)值;2、@PathVariable綁定URI模板變量值;3、@CookieValue綁定Cookie數(shù)據(jù)值4、@RequestHeader綁定請求頭數(shù)據(jù);5、@ModelValue綁定參數(shù)到命令對象;6、@SessionAttributes綁定命令對象到session;7、@RequestBody綁定請求的內(nèi)容區(qū)數(shù)據(jù)并能進行自動類型轉(zhuǎn)換等。8、@RequestPart綁定“multipart/data”數(shù)據(jù),除了能綁定@RequestParam能做到的請求參數(shù)外,還能綁定上傳的文件等。例如:@RequestMapping(value

=

"/error1")

public

String

error1(UserModel

user,

BindingResult

result)

可以直接得到提交的表單數(shù)據(jù)user,和對user驗證

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置2)url數(shù)據(jù)綁定1、普通URL路徑映射@RequestMapping(value={"/test1",

"/user/create"}):多個URL路徑可以映射到同一個處理器的功能處理方法。2、URI模板模式映射@RequestMapping(value="/users/{userId}"):{×××}占位符,請求的URL可以是“/users/123456”或“/users/abcd”,通過@PathVariable可以提取URI模板模式中的{×××}中的×××變量。@RequestMapping(value="/users/{userId}/create"):這樣也是可以的,請求的URL可以是“/users/123/create”。3、Ant風(fēng)格的URL路徑映射@RequestMapping(value="/users/**"):可以匹配“/users/abc/abc”,但“/users/123”將會被【URI模板模式映射中的“/users/{userId}”模式優(yōu)先映射到】@RequestMapping(value="/product?"):可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置3.數(shù)據(jù)轉(zhuǎn)換springMVC實際是先利用java.beans.PropertyEditor中的setAdText方法來把string格式的輸入轉(zhuǎn)換為bean屬性1.利用@InitBinder來注冊customerpropertyEditor即在controller類中增加一個使用@InitBinder標注的方法,在其中注冊customerEditor@InitBinder

publicvoidinitBinder(WebDataBinderbinder){

SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");

dateFormat.setLenient(false);

binder.registerCustomEditor(Date.class,newCustomDateEditor(

dateFormat,false));

}

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置2.繼承WebBindingInitializer接口來實現(xiàn)全局注冊

publicclassCustomerBindingimplementsWebBindingInitializer并修改servletcontextxml配置文件<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<propertyname="webBindingInitializer">

<bean

class="net.zhepu.web.customerBinding.CustomerBinding"/>

</property>

</bean>但這樣一來就無法使用mvc:annotation-driven

了。3.使用conversion-service來注冊自定義的converter

DataBinder實現(xiàn)了PropertyEditorRegistry,TypeConverter這兩個interface

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置<beanid="conversionService"

class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

<propertyname="converters">

<list>

<beanclass="net.zhepu.web.customerBinding.CustomerConverter"/>

</list>

</property>

</bean>需要修改springservicecontextxml配置文件中的annotation-driven,增加屬性conversion-service指向新增的conversionServicebean。<mvc:annotation-drivenvalidator="validator"

conversion-service="conversionService"/>

SpringMVC和前端技術(shù)分享SpringMVC工作原理和配置<beanid="conversionService"

class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

<propertyname="converters">

<list>

<beanclass="net.zhepu.web.customerBinding.CustomerConverter"/>

</list>

</property>

</bean>需要修改springservicecontextxml配置文件中的annotation-driven,增加屬性conversion-service指向新增的conversionServicebean。<mvc:annotation-drivenvalidator="validator"

conversion-service="conversi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論