生活随笔
收集整理的這篇文章主要介紹了
通俗易懂SpringMVC整体框架理解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近又重新溫習(xí)了一下前臺(tái)SpringMVC框架,能夠從整體上對(duì)SpringMVC有一個(gè)全局的認(rèn)識(shí)。在這里也總結(jié)一下,為那些即將學(xué)習(xí)SpringMVC的親們,做一個(gè)很好的開端吧!
?1. SpringMVC整體框架圖
?學(xué)習(xí)某一種技術(shù)的話,要能夠從宏觀上把握一下這種技術(shù)的大致實(shí)現(xiàn)原理,然后才開始刨根問底的學(xué)習(xí),這種技術(shù)的細(xì)節(jié),這樣會(huì)快也一些。首先從宏觀上把控一些知識(shí)點(diǎn)之間的聯(lián)系,學(xué)習(xí)起來更有連貫性,下面就先從SpringMVC的框架圖來整體分析一下。
?
?上圖就是SpringMVC整體的框架圖,就這么幾個(gè)部分。下面來著重的分析一下,整個(gè)過程中的流轉(zhuǎn)。
?1.首先是用戶發(fā)送請(qǐng)求,比如在瀏覽器中輸入http://localhost:8080/SpringTest/login
?2.用戶的請(qǐng)求就發(fā)送到了DispatcherServlet也就是前端控制器,這個(gè)東西是一個(gè)Servlet的實(shí)現(xiàn),用來干什么呢?用來接收用戶的請(qǐng)求,然后響應(yīng)結(jié)果,相當(dāng)于一個(gè)轉(zhuǎn)發(fā)器,它的配置如下
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;"><!--?自此請(qǐng)求已交給Spring?Web?MVC框架處理,因此我們需要配置Spring的配置文件,默認(rèn)DispatcherServlet會(huì)加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。?? 本示例為WEB-INF/?chapter2-servlet.xml。?-->?? ????<servlet>?? ????????<servlet-name>springMVC</servlet-name>?? ????????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>?? ????????<init-param>?? ????????????<param-name>contextConfigLocation</param-name>?? ????????????<param-value>?classpath:springMVC-servlet.xml</param-value>?? ????????</init-param>?? ????????<load-on-startup>1</load-on-startup>?? ????</servlet>?? ?????? ????<servlet-mapping>?? ????????<servlet-name>springMVC</servlet-name>?? ????????<url-pattern>/</url-pattern>?? ????</servlet-mapping></span>??
?如果翻開DispatcherServlet源碼的話,會(huì)發(fā)現(xiàn)會(huì)默認(rèn)加載SpringMVC的一些配置,源碼如下
?
[java]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;">static?{?? ?????????? ?????????? ?????????? ????????try?{?? ????????????ClassPathResource?resource?=?new?ClassPathResource(DEFAULT_STRATEGIES_PATH,?DispatcherServlet.class);?? ????????????defaultStrategies?=?PropertiesLoaderUtils.loadProperties(resource);?? ????????}?? ????????catch?(IOException?ex)?{?? ????????????throw?new?IllegalStateException("Could?not?load?'DispatcherServlet.properties':?"?+?ex.getMessage());?? ????????}?? ????}</span>??
?并且該servlet也會(huì)默認(rèn)加載默認(rèn)DispatcherServlet會(huì)加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例為WEB-INF/SpringMVC-servlet.xml.改配置文件就用來配置后面的處理映射器、處理適配器等相關(guān)信息
?3.經(jīng)過DispatcherServlet過濾后URL后,比如上述的URL是http://localhost:8080/SpringTest/login,那么這時(shí)候就進(jìn)入到了HandleMapping也就是映射處理器。這是用來干什么的呢?就是用來根據(jù)URL來匹配我們的處理器(或者就做控制器),比如我們請(qǐng)求的路徑最后結(jié)尾的字母是login,那么讓那個(gè)控制器來為我們服務(wù)呢?這時(shí)候就靠HandleMapping來處理了。下面列一下SpringMVC中的幾種處理映射器。
?3.1?BeanNameUrlHandlerMapping:用來根據(jù)控制器的name屬性來匹配要處理的映射器,配置如下
?
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;">??<bean?id="itemsController1"?name="/queryItems_test.action"?class="cn.ssm.controller.ItemsController1"?/>?? ????<!--?處理器映射器?將bean的name作為url進(jìn)行查找?,需要在配置Handler時(shí)指定beanname(就是url)??? ????所有的映射器都實(shí)現(xiàn)?HandlerMapping接口。?? ????-->?? ????<bean?? ????????class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"?/></span>??
?經(jīng)過這樣配置的話,就可以通過/queryItems_test來查找我們的控制器了
?3.2?SimpleUrlHandlerMapping:根據(jù)URL來映射匹配
?
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;">??<bean?id="itemsController1"?name="/queryItems_test.action"?class="cn.ssm.controller.ItemsController1"?/>?? ?????? ????<bean?class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">?? ????????<property?name="mappings">?? ????????????<props>?? ?????????????????? ????????????????<prop?key="/queryItems1.action">itemsController1</prop>?? ????????????????<prop?key="/queryItems2.action">itemsController1</prop>?? ????????????????<prop?key="/queryItems3.action">itemsController2</prop>?? ????????????</props>?? ????????</property>?? ????</bean></span>??
?3.3?RequestMappingHandlerMapping:3.1后引入的新的特性,注解適配器,直接通過Controller標(biāo)簽即可識(shí)別
?
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;">?? ????<bean?class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/></span>??
4.接著向下走,通過映射處理器就找到了我們需要處理用戶請(qǐng)求的控制器也就是Handler,那么此時(shí)還需要HandlerAdapter(處理器適配器)來,作用就是要按照特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler。常見的適配器如下
? ? ? ??4.1?SimpleControllerHandlerAdapter:要求handler實(shí)現(xiàn)Controller接口
? ? ? ? ?SimpleControllerHandlerAdapter將會(huì)調(diào)用處理器的handleRequest方法進(jìn)行功能處理,該處理方法返回一個(gè)ModelAndView給DispatcherServlet;當(dāng)然了也有對(duì)應(yīng)的注解適配器
? ? ?4.2 HttpRequestHandlerAdapter:要求編寫的Handler實(shí)現(xiàn)HttpRequestHandler接口
? ? ?4.3.注解適配器有RequestMappingHandlerAdapter,用來配合注解的開發(fā)
?5.接著向下走,經(jīng)過適配器調(diào)用控制器的方法后,就會(huì)想前端控制器返回一個(gè)ModelView,包含我們需要信息的pojo對(duì)象和視圖信息。
?6.前端控制器開始解析視圖信息,通過視圖解析器(View Resolver),進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(view)。如下配置
?
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;"><!--?視圖解析器?? ????解析jsp解析,默認(rèn)使用jstl標(biāo)簽,classpath下的得有jstl的包?? ?????-->?? ????<bean?? ????????class="org.springframework.web.servlet.view.InternalResourceViewResolver">?? ?????????? ????????<property?name="prefix"?value="/WEB-INF/jsp/"/>?? ?????????? ????????<property?name="suffix"?value=".jsp"/>?? ????</bean></span>??
8.最后一部操作了,解析完視圖信息后,就把modelview中的model信息傳遞到我們的view界面上,整個(gè)流程就處理完畢。
from:?http://blog.csdn.net/luckyzhoustar/article/details/49508103
總結(jié)
以上是生活随笔為你收集整理的通俗易懂SpringMVC整体框架理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。