今天,用一天時(shí)間研究了一下Spring MVC,spring-reference1.2.3關(guān)于MVC的那章周末的時(shí)候差不多看了一遍,并不是很仔細。不過(guò)也差不多了解了Spring-MVC是啥子玩意咯。
其實(shí)Spring MVC與Tapestry有“異曲同工”之妙。
先說(shuō)“同工”,Tapestry最本質(zhì)的特點(diǎn)是什么?我認為頁(yè)面表現與java邏輯徹底相分離。而spring MVC也是相同的特點(diǎn),它將頁(yè)面的java邏輯從頁(yè)面表現從抽取出來(lái)。Tapestry和Spring MVC在這個(gè)“分離原則”上,具有相同的理念。。。那么它們的“異曲”又是什么呢?
Tapestry將整個(gè)頁(yè)面表現及邏輯全部納入其框架,所以,它的頁(yè)面表現必須要求為html后綴,實(shí)際上,雖然我們最開(kāi)始編輯的是一個(gè)單一的幾乎絕對純潔的HTML,但是在運行時(shí),這個(gè)純潔的HTML通過(guò)Tapestry被過(guò)濾了一遍。過(guò)濾的目的是為了給每個(gè)組件生成唯一的HTML標簽的id以及展現組件功能。由于整個(gè)HTML都在Tapestry框架之中,所以對任何組件的操作,都可以在組件對象池里根據唯一的id獲取其實(shí)例。而每一個(gè)涉及到URL的組件都有其對應的service,因此對組件“特定”的URL解析也是“特定”的。
再來(lái)看看Spring MVC,它如何將java邏輯與頁(yè)面表現分離呢?答案在其DispatcherServlet中。Spring MVC通過(guò)最傳統的在web.xml中過(guò)濾url方式,然后在[servlet-name]-servlet.xml配置文件中去匹配。一旦發(fā)現匹配的url,就觸發(fā)配置文件中對應的java類(lèi)。用配置文件來(lái)控制,是Spring一貫的特點(diǎn)。因此,Spring MVC的頁(yè)面表現,不拘泥于任何文件類(lèi)型,java,htm,html等等,它所關(guān)心的僅僅是URL,甚至可以用鏈接標簽跳轉到一個(gè)根本不存在頁(yè)面,比如:http://localhost/test,只要[servlet-name]-servlet.xml中能夠匹配到這個(gè)URL中的/test,那么就不會(huì )報500錯誤,即進(jìn)入了Spring MVC框架。至于從java邏輯到頁(yè)面表現的數據返回,Spring MVC用的是spring.tld標簽庫。
這種“異曲”造成了Spring MVC和Tapestry完全不同的思維理念,即Spring MVC仍然是面向標簽,而Tapestry則面向組件。
呵呵,所以我今天發(fā)現一個(gè)很有趣的現象。如果在JSP中使用Spring MVC,那么Spring MVC框架會(huì )發(fā)生作用,而JSP本身也會(huì )有JSP的Servlet。我想不出怎樣才可以將兩種Sevlet進(jìn)行交互,在Spring官方論壇一定有人提供了解決辦法。。。呵呵,不過(guò)最后我發(fā)現這是個(gè)很愚蠢的想法,既然是使用Spring MVC將JSP中java邏輯分離出來(lái),那么又何必在JSP中再用Java?如果要在JSP中用Java,又何必畫(huà)足添舌用Spring MVC?呵呵。。。
Spring MVC的確是簡(jiǎn)單易學(xué)。周末嘛,玩游戲的時(shí)間居多,算下來(lái)看spring MVC也就兩三個(gè)小時(shí),今天算一天,那么從接觸到應用,我覺(jué)得三天時(shí)間差不多能夠搞定。在這點(diǎn)上,的確比Tapestry擁有很大的優(yōu)勢。我在javaeye上看見(jiàn)有人說(shuō),用Spring MVC(及開(kāi)發(fā)工具)開(kāi)發(fā)項目非???。我想,如果有工具能夠操作[servlet-name]-servlet.xml配置文件的話(huà),的確應該比較快。當然,這還牽扯到開(kāi)發(fā)人員的熟練度。。。另外,我還看不出Spring MVC有任何復用的可能性。而且[servlet-name]-servlet.xml中寫(xiě)入很多配置的話(huà),還是比較混亂。就如同我們現在項目中的applicationContext.xml,當然并不是非?;靵y得很難識別,不過(guò)還是無(wú)法一眼看出各種URL與對應類(lèi)之間的各種配置關(guān)系。
Spring MVC 值得稱(chēng)贊的另外一個(gè)優(yōu)勢,就是其單元測試非常容易。因為Spring的頁(yè)面邏輯類(lèi)不像Tapestry,Tapestry的java文件全部是抽象類(lèi),自然無(wú)法作單元測試。
我之所以研究Spring MVC,實(shí)際上純屬“路過(guò)”。首要目的是為了了解Spring webflow。所以對Spring MVC的研究,差不多到此為止,了解一下即可。。。
聯(lián)系客服