<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        在上一篇文章中我詳細的介紹了如何搭建maven環境以及生成一個maven骨架的web項目,那么這章中我將講述Spring MVC的流程結構,Spring MVCStruts2的區別,以及例子中的一些配置文件的分析。
        
    一、Spring MVC 3.0介紹
        Spring MVC是一個典型的MVC框架,是Spring內置的Web框架,可以作為應用項目的展示層,Spring 2.0Spring MVC進行重大升級后,Spring 2.5又為Spring MVC引入了注解驅動功能,再到3.0時代,全面支持REST的網絡服務和更容易的網絡編程。這一系列的變革,無疑吸引著我們走進Spring MVC 3.0的世界。
        REST功能是Spring MVC 3.0新增的,它通過不帶擴展名的URL來訪問系統資源。REST是把訪問的所有資源看成靜態的,一個或一組,每個不同的URL地址都是一個靜態資源。
    那么Spring MVC 3.0是如何支持REST的呢?簡單的說,它是通過@RequestMapping@PathVariable注解提供的,在@RequestMapping中指定valuemethod,就可以處理對應的請求。另外spring mvc框架還做了很多很多工作。
        二、Spring MVC流程
        大象根據官方文檔的介紹,以及自己的理解,畫了一個Spring MVC的流程結構圖,大家可以參考下。
        
        1Spring MVC的核心是DispatcherServlet,當客戶端發送一個請求時,這個請求經過一系列過濾器處理。然后DispatcherServlet會接收到這個請求。
        2、DispatcherServlet會從HandlerMapping對象中查找與請求匹配的Controller,并將結果返回給DispatcherServlet
        3、DispatcherServlet將請求轉發給目標Controller,如果定義有攔截器,則會經過這些攔截器處理。
        4Controller處理完成業務邏輯后,會返回一個結果給DispatcherServlet
        5、DispatcherServlet根據結果查詢ViewResolver,找到與之對應的視圖對象,同樣將結果返回給DispatcherServlet
        6、DispatcherServlet根據指定的顯示結果,調用模板對象渲染view
        7view返回給客戶端。
        根據上面的說明,可以很很明顯的看出,Spring MVC的核心是Servlet,并且創建的Controller其實也是一個Servlet
        三、Springstruts2比較
        另一個非常有名的MVC框架是Struts2Spring MVC的核心是Servlet,而Struts2的核心則是Filter。下表列出Spring MVCStruts2的主要區別與比較結果。
        
        
        通過上面的綜合比較,Spring MVC 3.0的優勢要比Struts2大得多,雖然它還有些不足的地方,但隨著后期版本的升級,必然會進行改進,會做的更好。所以采用Spring MVC 3.0作為系統的展示層要比Struts2好。
        四、線程安全
        由于Spring MVC默認是Singleton的,所以會產生一個潛在的安全隱患。根本核心是instance變量保持狀態的問題。
        這個問題有兩種解決辦法:
            a) 在控制器中不使用實例變量
            b) 將控制器的作用域從單例改為原型
        這兩種做法有好有壞,第一種,需要開發人員擁有較高的編程水平與思想意識,在編碼過程中力求避免出現這種BUG,而第二種則是容器自動的對每個請求產生一個實例,由JVM進行垃圾回收,因此做到了線程安全。使用第一種方式的好處是實例對象只有一個,所有的請求都調用該實例對象,速度和性能上要優于第二種,不好的地方,就是需要程序員自己去控制實例變量的狀態保持問題。第二種由于每次請求都創建一個實例,所以會消耗較多的內存空間。
        五、配置文件
        Spring MVCSpring的一個組成部分,所以配置文件就會變得簡單許多。以下就是本例子中最重要的幾個配置文件。
        1pom.xml
        管理項目依賴,編譯,發布,插件配置等等。所有的依賴包都由配置決定,另外所需依賴包的其它依賴,無需配置,maven會自動獲取并進行管理,這無疑幫我們減少了很多工作量,再也不用為到處找jar包,或版本不一致而頭疼了。
        定義依賴版本屬性
        
        Spring依賴,本例是一個很基礎的例子,所以有這些就夠了,以后有擴展再增加。
        
        MyBatis依賴,iBatis3.0版之后就改名為MyBatis。這個例子,大象沒有使用Hibernate,而是采用更輕量級的MyBatis來作為持久層框架,使用很簡單,也很靈活。另外,本例還用到了一個mybatis-spring插件,這是因為spring 3.0.5僅支持ibatis 2.0,所以需要這個插件來處理底層數據源等工作。
        
        本例用到了AOP,所以需要這兩個依賴
        
        下面是其它一些必須的依賴,值得說明的就是,因為在本例中,大象對Service還是用的類,沒有進行基于接口的實現方式,所以需要cglib這個依賴。另外,頁面使用html作為展示層,使用freemarker標簽處理動態數據。
        
    2web.xml
        ssh2web.xml主要的區別就是替換Struts2的啟動配置,改為Spring MVC的設置,配置如下:
        
        
        servlet-context.xml包含容器啟動時,所要執行的內容,而service-context.xml則是接下來由spring上下文監聽器對其進行掃描執行。這兩個配置文件可以合并成一個,大象為了便于管理,并且為了使用spring上下文,寫成了兩個文件。如果我們不指定init-param配置,默認的,在服務器啟動時,會在WEB-INF目錄下查找命名規則為<servlet-name>-servlet.xml的文件,對應到這里就是ssm3-servlet.xml文件,大象統一將所有文件都放在了classpath下面。
        
    3servlet-context.xml
        Spring MVC啟動時的配置文件,包含組件掃描、url映射以及設置freemarker參數,讓spring不掃描帶有@Service注解的類。為什么要這樣設置?因為servlet-context.xmlservice-context.xml不是同時加載,如果不進行這樣的設置,那么,spring就會將所有帶@Service注解的類都掃描到容器中,等到加載service-context.xml的時候,會因為容器已經存在Service類,使得cglib將不對Service進行代理,直接導致的結果就是在service-context中的事務配置不起作用,發生異常時,無法對數據進行回滾。另外能夠將REST URL解析為請求映射的是DefaultAnnotationHandlerMapping這個類,它在啟動時,對Controller中所有標注了@RequestMapping注解的方法,都放到了一個HandlerMapping對象中,當有請求時,就在這個對象中進行查找是否有與之匹配路徑的處理方法,有則執行,沒有就會輸出一個Not Page Found警告信息。
        
        展示層使用freemarker模板引擎,為了便于編輯,大象在這里使用html作為展示頁。Spring框架對freemarker進行了集成與封裝,配置起來非常簡單。主要是定義FreeMarker視圖解析器與屬性配置,網上有很多關于這些屬性含義的介紹,大象就不在這里啰嗦了,后面講到Spring MVC的時候會結合代碼來進行說明。Spring MVC支持多種類型的視圖文件。如:jspfreemarkervelocitytilesjasperreports等。
        
        4service-context.xml
        ssh2里面的application.xml區別不大,主要是將hibernate那部分改為mybatis,還要將MybatisDao基類配置進來,以便Service類可以用注解的方式引入,然后就是掃描包路徑,不掃描帶有@Controller注解的類。因為這些類已經隨容器啟動時,在servlet-context中掃描過一遍了。
        
        
        
        5mybatis-config.xml
        mybatis的主配置,里面包含了POJO的映射文件,這里了解一下就行,后面的章節會對這些進行說明,熟悉ibatis的朋友就很簡單了,可以直接跳過。
        
        到此,關于配置文件的說明就講完了,因為這個SSM3的例子采用maven來構建,與之前的SSH2不一樣,大象對配置文件進行了簡要的說明,使用maven的好處,大家應該看出來了,它對于開發構建來說顯得簡單一些,可以使你不需要到處去找jar包,也不用你去擔心版本不一致的問題,另外,對于依賴的jar包,它還能自動去查找它自己的依賴,這可以減少我們很多不必要的重復勞動。下一章,我將分析下本例的層次結構與MyBatis的簡單運用。
        本文為菠蘿大象原創,如要轉載請注明出處。http://bolo.blogjava.net/
    posted on 2011-06-01 19:27 菠蘿大象 閱讀(32454) 評論(5)  編輯  收藏 所屬分類: Spring3

    評論:
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(二) 2011-06-09 09:50 | Phirothing
    很好,很強大。  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(二) 2011-07-12 10:19 | keer
    菠蘿大哥,你的這個系列(springmvc + mybatis)好像好久好久都沒有續集了哦,在下可是天天翹首以待呢,呵呵  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(二) 2011-07-13 08:57 | 菠蘿大象
    @keer
    本來以為可以閑下寫寫博客,可哪知道又TMD有很多事情要做,再加上其它一些亂七八糟的事情,所以。。。。第三篇我已經寫完了,在做檢查與修改,這兩天就可以發了  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(二) 2011-07-26 16:20 | kpc100
    能給個源碼嗎?我郵箱:ouosome@gmail.com,qq:9526749謝謝!  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(二) 2011-08-02 18:02 | taote
    三 什么時候出啊!!!已經好久了。。。。。  回復  更多評論
      
    主站蜘蛛池模板: 日韩免费码中文在线观看| 高潮内射免费看片| 免费人成在线观看69式小视频| 亚洲精品成人片在线播放| 黄色网址免费在线观看| 亚洲人成无码网站久久99热国产| 在线观看亚洲免费| 亚洲av无码成人精品区在线播放 | 国产猛烈高潮尖叫视频免费| 日韩亚洲产在线观看| 在线免费不卡视频| 国产亚洲Av综合人人澡精品| 亚洲视频在线免费| 好紧我太爽了视频免费国产| 亚洲人成网站影音先锋播放| 99爱在线精品免费观看| 亚洲欧美成人综合久久久| 又粗又大又长又爽免费视频| 一级一级一级毛片免费毛片| 2020天堂在线亚洲精品专区| 最近2019中文字幕mv免费看| 色天使色婷婷在线影院亚洲| 国产aⅴ无码专区亚洲av麻豆| 在线观看片免费人成视频播放| 亚洲天堂中文资源| 麻豆精品国产免费观看| 黄色短视频免费看| 亚洲国产日韩在线人成下载| 一级毛片全部免费播放| 亚洲13又紧又嫩又水多| 亚洲国产精品综合久久一线| 日本一区午夜艳熟免费| 国产亚洲国产bv网站在线| 免费一级特黄特色大片在线| 久久成人无码国产免费播放| 亚洲中文精品久久久久久不卡| 美腿丝袜亚洲综合| 在线观看无码AV网站永久免费 | 免费高清av一区二区三区| 久久久久久国产a免费观看不卡| 亚洲国产精品乱码在线观看97|