日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

通俗易懂SpringMVC整体框架理解

發(fā)布時(shí)間:2025/3/21 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗易懂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>??
  • ????<!--?這里一定要是/根據(jù)Servlet規(guī)范來的?-->??
  • ????<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?{??
  • ????????//?Load?default?strategy?implementations?from?properties?file.??
  • ????????//?This?is?currently?strictly?internal?and?not?meant?to?be?customized??
  • ????????//?by?application?developers.??
  • ????????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"?/>??
  • ????<!--簡(jiǎn)單url映射??-->??
  • ????<bean?class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">??
  • ????????<property?name="mappings">??
  • ????????????<props>??
  • ????????????????<!--?對(duì)itemsController1進(jìn)行url映射,url是/queryItems1.action?-->??
  • ????????????????<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">??
  • ????????<!--?配置jsp路徑的前綴?-->??
  • ????????<property?name="prefix"?value="/WEB-INF/jsp/"/>??
  • ????????<!--?配置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ò),歡迎將生活随笔推薦給好友。