舒禮蓮
(江西省計算技術(shù)研究所,江西 南昌 330002)
Spring框架是當前流行的輕量級一站式企業(yè)應用程序解決方案,它為應用程序開發(fā)提供了許多基礎結(jié)構(gòu),例如:事務處理、遠程方法、消息處理等,使開發(fā)人員能夠?qū)W⒂诔绦驑I(yè)務邏輯的實現(xiàn)。MVC模式是近年來流行的應用程序架構(gòu),它將應用程序分為模型(Model)、視圖(View)、控制器(Controller)3個部分。其中,模型負責存儲數(shù)據(jù),視圖負責顯示用戶界面,控制器負責控制模型和視圖。MVC模式使得程序結(jié)構(gòu)更加清晰,利于維護。目前已經(jīng)有許多流行的MVC框架,如Struts、WebWork等。Spring框架也包含了一個MVC框架,它與Spring能夠更加有機地結(jié)合。
Spring MVC框架支持 XML配置和 Java注解(Annotation)配置。Spring MVC框架圍繞DispatcherServlet設計。DispatcherServlet是一個 Java Servlet,它根據(jù)用戶提交的HTTP請求指派不同的處理程序。DispatcherServlet是一個前端控制器,它負責接收用戶的HTTP請求,并分配給其他控制器進行處理。其他控制器接收用戶請求,提取其中的參數(shù)信息,并提取模型中存儲的數(shù)據(jù),進行處理,然后再傳遞給DispatcherServlet。DispatcherServlet將結(jié)果數(shù)據(jù)傳遞給一個視圖模板,例如JSP頁面,JSP頁面將數(shù)據(jù)顯示在頁面上返回給用戶。這樣就較好地實現(xiàn)了數(shù)據(jù)、程序邏輯和用戶界面的分離。Spring框架結(jié)構(gòu)圖如圖1所示。
圖1 Spring MVC框架結(jié)構(gòu)圖
Spring MVC框架充分利用了Spring框架的非侵入性編程的優(yōu)點。開發(fā)人員無需實現(xiàn)任何Spring框架有關(guān)的接口。
DispatcherServlet在web.xml中的配置如下:
類BusinessController的定義前面加上了Java注解@Controller,表示它是一個控制器類,該類中的方法用于處理用戶請求。該類前面的@RequestMapping("/myurl")注解表示該類用于處理 URL路徑“/myurl”的用戶請求。例如應用程序名為myapp,則用戶在瀏覽器輸入http://localhost/myapp/myurl的請求地址,該請求將轉(zhuǎn)到類BusinessController中的方法進行處理。
該類中的方法doGet前面加上了@RequestMapping(method=RequestMethod.GET),則表示對于用戶HTTP請求為GET類型的,將調(diào)用doGet方法進行處理。如果要處理POST類型的HTTP請求,則將method屬性值改為RequestMethod.POST。
RequestMapping可將參數(shù)值傳入業(yè)務方法,例如:
表示用戶請求URL中的一部分可以作為參數(shù)傳入該業(yè)務方法的personId參數(shù)。personId參數(shù)前面的@PathVariable注解表示該參數(shù)從URL路徑中獲取。例如:用戶輸入 http://localhost/myapp/102405,則“102405”被作為參數(shù)傳遞給doBusiness方法。
HTTP請求參數(shù)也可直接傳入業(yè)務方法參數(shù),例如:
則HTTP請求中的personId查詢參數(shù)被傳入business-Method的personId參數(shù)。用戶輸入http://localhost/myapp?personId=102405,則“102405”被作為參數(shù)傳遞給businessMethod方法。方法參數(shù)不一定要求是String類型,int、long、Date均可從查詢字符串解析得到,如果解析失敗將拋出異常。
HTTP請求參數(shù)可直接綁定到模型數(shù)據(jù),例如:
在調(diào)用這個方法之前,Spring MVC會創(chuàng)建一個Person類型的person對象,該對象有諸如 personId、name等屬性,Spring MVC會將請求頁面上的person-Id、name等參數(shù)值賦值給這些屬性,然后將person對象加入到模型中,再將person對象傳遞給processRequest方法的person參數(shù)。
最常用的視圖是JSP,此外,Spring MVC還支持Velocity、Freemarker、XML、JSON 等多種視圖形式。
在Spring MVC中,除了原來的ApplicationContext配置環(huán)境之外,還專門針對Web應用設置了一個WebApplicationContext,它包含了Web應用中使用的bean配置。其中視圖解析器的配置如下:
表示使用JSP視圖,JSP的URL路徑前綴為“/WEBINF/jsp/”,后綴為“.jsp”。例如,控制器業(yè)務方法最后return“myview”,則表示將 myapp/WEB-INF/jsp/myview.jsp頁面返回給用戶。
可以重定向視圖如下:
表示將用戶路徑的URL中的 path部分重定向到files/目錄下。例如,用戶輸入 http://localhost/myapp/mypath/mypage.jsp,則將重定向到 http://localhost/myapp/files/mypath/mypage.jsp 頁面。
在Web開發(fā)中使用MVC模式將降低用戶界面和合同數(shù)據(jù)的耦合,提高代碼的可維護性。Spring MVC框架可以較好地實現(xiàn)企業(yè)應用程序的MVC模式,并不會對原有業(yè)務邏輯代碼產(chǎn)生侵入。它支持XML配置和Java注解配置,為設計提供了較大的靈活性。Spring MVC框架是一種較好的設計方法,可以在企業(yè)應用開發(fā)中廣泛應用。
[1]SpringSource.Web MVC Framework[EB/OL].http://static.springsource.org/spring/docs/3.2.x/spring-frameworkreference/html/mvc.html,2012-12-05.
[2]Colin Sampaleanu.Green Beans:Getting Started with Spring MVC[EB/OL].http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/,2011-01-04.
[3]陳雄華,林開雄.Spring 3.x企業(yè)應用開發(fā)實戰(zhàn)[M].北京:電子工業(yè)出版社,2012.
[4][美]Gary Mark,Daniel Rubio,Josh Long.Spring攻略(第2版)[M].陳宗恒,姚軍,蔣亮譯.北京:人民郵電出版社,2012.
[5][美]Craig Walls,Ryan Breidenbach.Spring in Action(第2版)[M].畢慶紅,王軍譯.北京:人民郵電出版社,2008.
[6]王坤.基于J2EE平臺Spring MVC框架開發(fā)的MIS系統(tǒng)設計與實現(xiàn)[D].上海:華東師范大學,2008.
[7]邵剛.基于Spring框架的MVC控制器的優(yōu)化與改進[D].濟南:山東大學,2011.
[8]鄒存潔.基于MVC模式的Spring框架的應用與研究[D].大連:大連海事大學,2006.
[9]歐勤坪.基于Spring MVC+iBATIS框架的生物信息數(shù)據(jù)庫系統(tǒng)的設計與實現(xiàn)[D].重慶:西南大學,2009.
[10]郭俊卿.基于MVC框架的上海財稅征管系統(tǒng)的設計與實現(xiàn)[D].北京:北京郵電大學,2007.
[11]劉軍,戴金山.基于 Spring MVC與iBATIS的輕量級Web應用研究[J].計算機應用,2006,26(4):840-843.
[12]張宇,王映輝,張翔南.基于Spring的MVC框架設計與實現(xiàn)[J].計算機工程,2010,36(4):59-62.
[13]符培炯,杜忠軍.Spring在實現(xiàn)MVC構(gòu)架中的應用[J].計算機技術(shù)與發(fā)展,2006,16(6):236-238.
[14]劉星沙,羅昔軍.基于MVC模式的Struts和Spring整合框架的研究與應用[J].湘潭大學自然科學學報,2007,29(1):92-95.