生活随笔
收集整理的這篇文章主要介紹了
通俗易懂SpringMVC整体框架理解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近又重新溫習了一下前臺SpringMVC框架,能夠從整體上對SpringMVC有一個全局的認識。在這里也總結(jié)一下,為那些即將學習SpringMVC的親們,做一個很好的開端吧!
?1. SpringMVC整體框架圖
?學習某一種技術的話,要能夠從宏觀上把握一下這種技術的大致實現(xiàn)原理,然后才開始刨根問底的學習,這種技術的細節(jié),這樣會快也一些。首先從宏觀上把控一些知識點之間的聯(lián)系,學習起來更有連貫性,下面就先從SpringMVC的框架圖來整體分析一下。
?
?上圖就是SpringMVC整體的框架圖,就這么幾個部分。下面來著重的分析一下,整個過程中的流轉(zhuǎn)。
?1.首先是用戶發(fā)送請求,比如在瀏覽器中輸入http://localhost:8080/SpringTest/login
?2.用戶的請求就發(fā)送到了DispatcherServlet也就是前端控制器,這個東西是一個Servlet的實現(xiàn),用來干什么呢?用來接收用戶的請求,然后響應結(jié)果,相當于一個轉(zhuǎn)發(fā)器,它的配置如下
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;"><!--?自此請求已交給Spring?Web?MVC框架處理,因此我們需要配置Spring的配置文件,默認DispatcherServlet會加載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源碼的話,會發(fā)現(xià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也會默認加載默認DispatcherServlet會加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例為WEB-INF/SpringMVC-servlet.xml.改配置文件就用來配置后面的處理映射器、處理適配器等相關信息
?3.經(jīng)過DispatcherServlet過濾后URL后,比如上述的URL是http://localhost:8080/SpringTest/login,那么這時候就進入到了HandleMapping也就是映射處理器。這是用來干什么的呢?就是用來根據(jù)URL來匹配我們的處理器(或者就做控制器),比如我們請求的路徑最后結(jié)尾的字母是login,那么讓那個控制器來為我們服務呢?這時候就靠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進行查找?,需要在配置Handler時指定beanname(就是url)??? ????所有的映射器都實現(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標簽即可識別
?
[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.接著向下走,通過映射處理器就找到了我們需要處理用戶請求的控制器也就是Handler,那么此時還需要HandlerAdapter(處理器適配器)來,作用就是要按照特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler。常見的適配器如下
? ? ? ??4.1?SimpleControllerHandlerAdapter:要求handler實現(xiàn)Controller接口
? ? ? ? ?SimpleControllerHandlerAdapter將會調(diào)用處理器的handleRequest方法進行功能處理,該處理方法返回一個ModelAndView給DispatcherServlet;當然了也有對應的注解適配器
? ? ?4.2 HttpRequestHandlerAdapter:要求編寫的Handler實現(xiàn)HttpRequestHandler接口
? ? ?4.3.注解適配器有RequestMappingHandlerAdapter,用來配合注解的開發(fā)
?5.接著向下走,經(jīng)過適配器調(diào)用控制器的方法后,就會想前端控制器返回一個ModelView,包含我們需要信息的pojo對象和視圖信息。
?6.前端控制器開始解析視圖信息,通過視圖解析器(View Resolver),進行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(view)。如下配置
?
[html]?view plaincopy print?
<span?style="font-family:Comic?Sans?MS;font-size:18px;"><!--?視圖解析器?? ????解析jsp解析,默認使用jstl標簽,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界面上,整個流程就處理完畢。
from:?http://blog.csdn.net/luckyzhoustar/article/details/49508103
總結(jié)
以上是生活随笔為你收集整理的通俗易懂SpringMVC整体框架理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。