框架
通過策略接口,Spring 框架是高度可配置的,而且包含多種視圖技術,例如
JavaServer Pages(JSP)技術、
Velocity、
Tiles、
iText和POI。Spring MVC 框架並不知道使用的視圖,所以不會強迫開發者只使用 JSP 技術。Spring MVC 分離了控制器、模型對象、過濾器以及處理程式對象的角色,這種分離讓它們更容易進行定製。
優點
Lifecycle for overriding binding, validation, etc,易於同其它View框架(Tiles等)無縫集成,採用
IOC便於測試。
它是一個典型的教科書式的mvc構架,而不像
struts等都是變種或者不是完全基於mvc系統的框架,對於初學者或者想了解mvc的人來說我覺得 spring是最好的,它的實現就是教科書!第二它和
tapestry一樣是一個純正的servlet系統,這也是它和tapestry相比 struts所具有的優勢。而且框架本身有代碼,看起來容易理解。
單元測試
關於Spring MVC Controller 層的單元測試
測試準備工作:
1、搭建測試Web環境
@RunWith(UnitilsJUnit4TestClassRunner.class)@SpringApplicationContext({"classpath:*.xml","file:src/main/webapp/WEB-INF/spring-configuration/*.xml","file:src/main/webapp/WEB-INF/*.xml"})
2、注入Controller 類
@ControllerBeanControllercontroller;
3、編寫測試數據
測試數據的檔案名稱一定要與測試類的檔案名稱相同,比如測試數據BeanControllerTest.xml ,測試類 BeanControllerTest。
4、注入測試數據
@Test@DataSetpublicvoidtestBean(){}
常用註解
MVC已經是現代Web開發中的一個很重要的部分,下面介紹一下Spring MVC的一些使用心得。
之前的項目比較簡單,多是用JSP 、Servlet + JDBC 直接搞定,在項目中嘗試用 Struts(Struts MVC)+Spring+Hibernate, 嚴格按照分層概念驅動項目開發,因項目需求一直不斷變化,功能不斷擴充、增強,技術構建也幾經改變到目前有個穩定的套用,體會了很多感受,這次先對 Spring MVC 層進行一些個人總結。
MVC作為WEB項目開發的核心環節,正如三個單詞的分解那樣,C(控制器)將V(視圖、用戶客戶端)與M(javaBean:封裝數據)分開構成了MVC ,這邊不去討論項目中是否套用MVC ,也不針對MVC的實現原理進行講解,而是探討實踐中如何從套用SSH, 到Struts(Struts MVC)+Spring+Hibernate的演化過程。
先看 Struts 如何與 Spring 結合處理一次簡單的請求回響代碼,前台可以設為用 AJAX 調用:
1. 在 struts-config.xml 檔案中加入
<!--用於聲明GetPersonList。do請求委託Spring處理--><action path="/GetPersonList" scope="request"type="org.springframework.web.struts.DelegatingActionProxy"></action>
2.在 applicationContext.xml 檔案中加入
<!-- 指定GetPersonList處理的代碼,和注入實現業務的代碼 --><bean name="/GetPersonList" class="cn.base.GetPersonListAction"><property name="getPersonList" ref=" getPersonListServices"></property></bean>
3.cn.base.GetPersonListAction 實現請求回響代碼
可以看出一次請求需求如此多的步驟,在加上一個項目下來有很多這樣的請求回響,將給配置檔案管理帶來很大的麻煩。
經過對 Spring 的深入套用, Spring 本身提供的 URL 請求控制,對其天然支持可以讓我們不需要 applicationContext.xml 再次聲明一次 URL 請求 Bean ,即減少了 Struts 的聲明 URL ,達到減少些繁瑣的配置。但只是少了一些而已,同樣也會面臨著配置檔案的管理問題。
Spring 註解將給我們的工作帶來些輕鬆,利用反射機制原理出現的註解就是為了解決配置大量的配置問題。請看下處理一次簡單的請求回響代碼
@Controller --聲明控制器@RequestMapping("/person") –聲明URLpublic class PersonControl extends BaseController {@Autowired –業務接口注入private personServices personServices;/*** 獲得人員列表*@param request* @param response* @throws Exception*/@RequestMapping(params = "method=geList") --即處理/person.do? method=geList方法public void getnodeList(HttpServletRequest request,HttpServletResponse response) throws Exception { //處理請求//處理回響}}
可以看出,在代碼上加入註解可以省去我們上面說的多個配置檔案的工作,達到簡便的 MVC 處理請求回響。
再配上簡單的配置檔案聲明,即可輕鬆處理項目的全部請求控制工作。
Spring MVC亂碼問題
在使用Spring MVC 做java Web 項目時,亂碼問題時常都會出現,解決方法也不盡相同,有簡單也有複雜的;如果加入了Spring框架之後就不一樣了,可以採用Spring框架自帶的過濾器CharacterEncodingFilter,這樣可以大大減輕了我們的工作量,即簡單方便又容易理解,配置方式如下:在web.xml檔案中filter的位置加上如下內容:
<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping>springmvc實現上傳檔案代碼片段<?xml version="1.0" encoding="UTF-8"?><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /></bean>@Controller@RequestMapping("/common")public class CommonController {@RequestMapping(value = "/upload")public @ResponseBody String upload(@RequestParam("file") MultipartFile file, HttpSession session) throws Exception {File localFile = new File("c:/test/a.rar");file.transferTo(localFile);return "success";}}