Spring包括一個(gè)強(qiáng)大而且高度可配置的MVC web 框架。
Spring的MVC model類似于Struts。在多線程服務(wù)對(duì)象這點(diǎn)上,Spring的Controller類似于Struts Action,只有一個(gè)實(shí)例處理所有客戶的請(qǐng)求。然而,我們相信Spring的MVC比起Struts有很多優(yōu)點(diǎn),例如:
Spring在controllers,JavaBean,models和views提供了一個(gè)非常清晰的劃分。
Spring的MVC是非常靈活的。不像Struts,它強(qiáng)制你的Action和Form對(duì)象進(jìn)入固化的層次之中(因而你迫使你使用Java的實(shí)體繼承),Spring MVC完全是基于接口的。而且,通過(guò)插入你自己的接口幾乎Spring MVC 框架的所有部分都是可配置的。當(dāng)然我們也提供了方便的類作為實(shí)現(xiàn)選擇。
Spring MVC是真正的view無(wú)關(guān)的。你不會(huì)被強(qiáng)制使用JSP,如果你不想那么做的話。你可以使用Velocity,XSLT或其他view技術(shù)。如果你想要使用自定義的view機(jī)制——例如,你自己的模板語(yǔ)言——你可以簡(jiǎn)單實(shí)現(xiàn)Spring的View接口并且把它集成進(jìn)來(lái)。
和其他對(duì)象一樣,Spring的Controllers是通過(guò)IoC配置的。著使得它們易于測(cè)試,并且完美地和其他由Spring管理的對(duì)象集成。
Web層變成了業(yè)務(wù)對(duì)象層之上的薄薄一層。這鼓勵(lì)了好的習(xí)慣。Struts和其他專門(mén)的web框架讓你去實(shí)現(xiàn)你自己的業(yè)務(wù)對(duì)象;Spring提供了你應(yīng)用程序所有層的集成。
如在Struts 1.1中所見(jiàn)的,你可以有和你在Spring MVC 應(yīng)用程序中所需要的一樣多的dispatcher servlets。
下面的例子展示了一個(gè)簡(jiǎn)單的Spring Controller如何能夠訪問(wèn)定義在應(yīng)用程序context中的業(yè)務(wù)對(duì)象。這個(gè)controller在它的handleRequest()方法中執(zhí)行了Google搜索:



































這段代碼使用的prototype中,IGoogleSearchPort是一個(gè)GLUE web services代理,由Spring FActoryBean返回。然而,Spring把controller從底層web service庫(kù)中分離出來(lái)。接口可以使用普通的Java對(duì)象,test stub,mock對(duì)象或者如下面要討論的EJB代理實(shí)現(xiàn)。這個(gè)contorller不包括資源查找;除了支持它的web交互的必要代碼之外沒(méi)有別的什么了。
Spring還提供了數(shù)據(jù)綁定,forms,wizards和更復(fù)雜的工作流的支持。