為開(kāi)發(fā)團(tuán)隊(duì)選擇一款優(yōu)秀的mvc框架是件難事兒,在眾多可行的方案中決擇需要很高的經(jīng)驗(yàn)和水平。你的一個(gè)決定會(huì)影響團(tuán)隊(duì)未來(lái)的幾年。要考慮方面太多:
1、簡(jiǎn)單易用,以提高開(kāi)發(fā)效率。使小部分的精力在框架上,大部分的精力放在業(yè)務(wù)上。
2、性能優(yōu)秀,這是一個(gè)最能吸引眼球的話題。
3、盡量使用大眾的框架(避免使用小眾的、私有的框架),新招聘來(lái)的開(kāi)發(fā)人員有一些這方面技術(shù)積累,減低人員流動(dòng)再適應(yīng)的影響。
如果你還在為這件事件發(fā)愁,本文最適合你了。選擇spring mvc吧。
spring mvc是當(dāng)前最優(yōu)秀的mvc框架,自從spring 2.5版本發(fā)布后,由于支持注解配置,易用性有了大幅度的提高。spring 3.0更加完善,實(shí)現(xiàn)了對(duì)struts 2的超越?,F(xiàn)在越來(lái)越多的開(kāi)發(fā)團(tuán)隊(duì)選擇了spring mvc。
struts2也是非常優(yōu)秀的mvc構(gòu)架,優(yōu)點(diǎn)非常多比如良好的結(jié)構(gòu),攔截器的思想,豐富的功能。但這里想說(shuō)的是缺點(diǎn),struts2由于采用了值棧、ognl表達(dá)式、struts2標(biāo)簽庫(kù)等,會(huì)導(dǎo)致應(yīng)用的性能下降,應(yīng)避免使用這些功能。而struts2的多層攔截器、多實(shí)例action性能都很好。
spring3 mvc的優(yōu)點(diǎn):
1、spring3 mvc使用簡(jiǎn)單,學(xué)習(xí)成本低。學(xué)習(xí)難度小于struts2,struts2用不上的多余功能太多。呵呵,當(dāng)然這不是決定因素。
2、spring3 mvc很容易就可以寫出性能優(yōu)秀的程序,struts2要處處小心才可以寫出性能優(yōu)秀的程序(指mvc部分)
3、spring3 mvc的靈活是你無(wú)法想像的,spring框架的擴(kuò)展性有口皆碑,spring3 mvc當(dāng)然也不會(huì)落后,不會(huì)因使用了mvc框架而感到有任何的限制。
struts2的眾多優(yōu)點(diǎn):
1、老牌的知名框架,從struts1起積累了大量用戶群體。技術(shù)文檔豐富。
2、其它方面略... (呵呵,是不是不公平?)
spring的官方下載網(wǎng)址是:http://www.springsource.org/download (本文使用是的spring 3.0.5版本)
二、核心類與接口:
先來(lái)了解一下,幾個(gè)重要的接口與類?,F(xiàn)在不知道他們是干什么的沒(méi)關(guān)系,先混個(gè)臉熟,為以后認(rèn)識(shí)他們打個(gè)基礎(chǔ)。
dispatcherservlet -- 前置控制器
handlermapping接口 -- 處理請(qǐng)求的映射
handlermapping接口的實(shí)現(xiàn)類:
simpleurlhandlermapping 通過(guò)配置文件,把一個(gè)url映射到controller
defaultannotationhandlermapping 通過(guò)注解,把一個(gè)url映射到controller類上
handleradapter接口 -- 處理請(qǐng)求的映射
annotationmethodhandleradapter類,通過(guò)注解,把一個(gè)url映射到controller類的方法上
controller接口 -- 控制器
由于我們使用了@controller注解,添加了@controller注解注解的類就可以擔(dān)任控制器(action)的職責(zé),
所以我們并沒(méi)有用到這個(gè)接口。
handlerinterceptor 接口--攔截器
無(wú)圖,我們自己實(shí)現(xiàn)這個(gè)接口,來(lái)完成攔截的器的工作。
viewresolver接口的實(shí)現(xiàn)類
urlbasedviewresolver類 通過(guò)配置文件,把一個(gè)視圖名交給到一個(gè)view來(lái)處理
internalresourceviewresolver類,比上面的類,加入了jstl的支持
view接口
jstlview類
localresolver接口
核心流程圖: