日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
領(lǐng)略Spring3.x時(shí)代的SpringMVC

鼎鼎大名的Spring框架3.0版在12月5日由其作者之一——Juergen Hoeller先生在博客里宣告問(wèn)世,并命為里程碑版,給Spring粉絲們帶來(lái)了震撼的快感。筆者即開“快車”拉了兩個(gè)包回來(lái),遺憾的是參考文檔至今還沒(méi)有出來(lái)(僅有API文檔),這為學(xué)習(xí)Spring 3.0帶來(lái)了非常大的困難,但沒(méi)有阻擋筆者對(duì)新產(chǎn)品的興趣。

為潯陽(yáng)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及潯陽(yáng)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、潯陽(yáng)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

Spring之父Rod Johnson先生早在2003年就預(yù)言EJB將死(觀點(diǎn)頗具爭(zhēng)議),攻擊EJB之臃腫是在虐待程序員。然而EJB 3.0出來(lái)后幾乎宣判Spring死刑,但自2.0版以后Spring火爆程度已經(jīng)超過(guò)EJB,兩者的爭(zhēng)斗至今仍不停息,這也是Spring 3.0連文檔還沒(méi)有整理出來(lái)就匆匆推出的原因。當(dāng)然,Spring與EJB有很多各自獨(dú)特優(yōu)勢(shì)之處,例如EJB的分布式運(yùn)算、標(biāo)準(zhǔn)規(guī)范,Spring的IoC、AOP切面編程、偶合集成、MVC等等,取各自之長(zhǎng)在企業(yè)中應(yīng)用如虎添翼。Spring目前已經(jīng)加入了J2EE規(guī)范,J2EE世界將更加精彩......

或許是用膩了Struts1那死板的WEB框架,才對(duì)Spring MVC愛(ài)不釋手,尤其是2.5版本以后,支持全注解配置方式,已經(jīng)使很久沒(méi)有再寫過(guò)xml文件了。

3.0版是完全兼容2.5,因此了解2.5版的@MVC則更容易接受。正如Arjen Poutsma小伙子在他的博客里說(shuō)的那樣,3.0時(shí)代將集中致力于表述性狀態(tài)轉(zhuǎn)移(REST,希望我沒(méi)有翻譯錯(cuò),金山詞霸翻譯為“休息”)的網(wǎng)絡(luò)服務(wù)和更容易的網(wǎng)絡(luò)編程。的確增加了更多的控制器類型,并增強(qiáng)了SOAP/WSDL/WS這些基于分布式體系結(jié)構(gòu)。

先回憶下2.5注解方式的@MVC,來(lái)一個(gè)示例:

 
 
 
  1. @Controller 
  2. public class ArticleController{  
  3.    
  4.   @RequestMapping("/articleView")  
  5.    public String getArticle(@RequestParam("id") String id, HttpServletRequest request){  
  6.     request.setAttribute("article", service.find(Article.class, id));  
  7.     return "articleView";  
  8.    }  
  9.    
  10. }  

ArticleController沒(méi)有實(shí)現(xiàn)任何接口,是一個(gè)最普通不過(guò)的pojo,如果瀏覽器來(lái)了articleView.do?id=xxx這個(gè)請(qǐng)求,Spring會(huì)找到getArticle()這個(gè)方法,該方法第一個(gè)參數(shù)綁定到了URL上的請(qǐng)求參數(shù),第二個(gè)是J2EE標(biāo)準(zhǔn)的request對(duì)象(可見(jiàn)Spring MVC是非侵入式的,不像變態(tài)的Struts2),事實(shí)上還可以給定HttpServletResponse,ModelMap,甚至自己的類型,Spring都會(huì)為你將值傳入進(jìn)來(lái)。通過(guò)一個(gè)邏輯層service組件根據(jù)id參數(shù)值去底層查找Article對(duì)象,并放入request作用域中,最后返回的是面頁(yè)視圖名,這個(gè)例子中是返回到articleView.jsp中。

上例再變通下:

 
 
 
  1. @Controller 
  2. public class ArticleController{  
  3.    
  4.   @RequestMapping("/articleView_*")  
  5.    public String getArticle(HttpServletRequest request){  
  6.    
  7.     String id = StringUtil.getParam(request.getRequestURI(),"articleView_*");  
  8.     request.setAttribute("article", service.find(Article.class, id));  
  9.     return "articleView";  
  10.    }  
  11.    

對(duì)于articleView_aaa.do,articleView_bbbb.do,articleView_c5h8j2.do,articleView_xxx.do,這樣的請(qǐng)求都會(huì)由getArticle()這個(gè)方法來(lái)應(yīng)付,是不是很有意思?

Spring 3.0增加了一個(gè)@ PathVariable注解來(lái)支持可變的請(qǐng)求路徑,將上面的代碼在3.0版中再變通下:

 
 
 
  1. @Controller 
  2. public class ArticleController{  
  3.    
  4.   @RequestMapping("/articleView/${id}")   //可以接受articleView/aaa.do,articleView/xxx.do...  
  5.    public String getArticle(@PathVariable String id, HttpServletRequest request){  
  6.     request.setAttribute("article", service.find(Article.class, id));  
  7.     return "articleView";  
  8.    }  
  9.    

再變得復(fù)雜些:

 
 
 
  1. @Controller 
  2. public class ArticleController{  
  3.    
  4.   @RequestMapping("/articleList/${pageSize}/channel/*/category/${id}")     
  5.    
  6.    public String getArticles((@PathVariable Integer pageSize, @PathVariable int id, HttpServletRequest request){  
  7.     Integer channelId = StringUtil.getParam(request.getRequestURI(),"channel/*/");  
  8.     request.setAttribute("articles", service.findScroll(Article.class, pageSize,50,"channel=? and category=?",new Object[]{channelId,id}));  
  9.       
  10.     return "articleList";  
  11.    }  
  12.    

它已經(jīng)靈活到URL地址完全可以自己隨意編制。

根據(jù)內(nèi)容協(xié)商制的視圖解析機(jī)制:

2.5版是由@MVC控制器來(lái)決定視圖解析器,3.0版將變得更加靈活,似乎可以通過(guò)擴(kuò)展名來(lái)轉(zhuǎn)到不同的解析器中,例如請(qǐng)求一個(gè).pdf文件將是如何效果呢?3.0版都會(huì)帶來(lái)不可思議的模式。

HTTP方法的轉(zhuǎn)換:

先看前臺(tái)頁(yè)面一段Html代碼

 
 
 
  1.     
  2.    
  3.  

HTTP規(guī)范中form表單只有兩種方法——POST和GET,而3.0做了一個(gè)過(guò)濾器,可以轉(zhuǎn)換這些方法至四種——GET, PUT, POST, 和 DELETE??刂破鹘邮苷?qǐng)求:

 
 
 
  1. @Controller("/deleteArticle")  
  2. public class ArticleController{  
  3.    
  4.   @RequestMapping(method = RequestMethod.DELETE)  
  5.    public String deleteArticle(@PathVariable String id, HttpServletRequest request){  
  6.     service.delete(Article.class, id);  
  7.     return "message";  
  8.    }  
  9.    

3.0版僅在MVC子集中就增加了很多新特性,如果在IoC、AOP等等其它子集所有的變革,絕對(duì)可以稱得上Srping創(chuàng)始人所述的里程碑版本。3.0版使用的注解列表如下:

 
 
 
  1. ? @Autowired 
  2. ? @Component 
  3. ? @Controller 
  4. ? @InitBinder 
  5. ? @ManagedAttribute 
  6. ? @ManagedOperation 
  7. ? @ManagedOperationParameters 
  8. ? @ManagedOperationParameter 
  9. ? @ManagedResource 
  10. ? @PathVariable 
  11. ? @PostConstruct 
  12. ? @PreDestroy 
  13. ? @Repository 
  14. ? @RequestMapping 
  15. ? @Required 
  16. ? @Resource 
  17. ? @Service 
  18. ? @Transactional 

目前Spring 3版本已經(jīng)到了M2,應(yīng)該是M3完成后將推出最終正式版本,我想很快會(huì)來(lái)臨,按照Spring的創(chuàng)始人羅德.約翰遜的預(yù)言,未來(lái)J2EE應(yīng)用中Spring+Tomcat將占主導(dǎo)地位,是否引起爭(zhēng)議,筆者不敢點(diǎn)評(píng),不過(guò)Oracle收購(gòu)Sun后,Java社區(qū)將是如何,還無(wú)從知曉,似乎羅德.約翰遜對(duì)這宗收購(gòu)案也有些緊張,因?yàn)镺racle不像Sun的第一個(gè)談判者IBM那樣有過(guò)開放技術(shù)的先例(可以回憶下IBM早期的主板總線開放掀起的兼容機(jī)潮至今波濤不熄)。目前國(guó)內(nèi)對(duì)新東西消化尚慢,我到圖書城看了下,Spring 2.5的資料都很難找到。且很多企業(yè)都是抱著Struts1.x在做開發(fā),盡管筆者這樣說(shuō)會(huì)引來(lái)很多爭(zhēng)議,但Struts1時(shí)代的滅亡只是時(shí)間問(wèn)題。Struts2雖然改進(jìn)了很多,依筆者看,與Spring MVC相比仍有諸多的不足,尤其看不慣那種變態(tài)的侵入模式,看看它把HttpServletRequest、HttpSession、HttpServletResponse等servlet標(biāo)準(zhǔn)組件干成什么樣?開源時(shí)代,至少我不愿意接受那種變態(tài)的潛規(guī)則。

筆者早先常用Struts1.x框架,它搭配了一套自己的ActionForm,使得編程工作量增加,雖然可以變通使用自己的Pojo,但對(duì)于沒(méi)有掌握J(rèn)2EE底層工具類(BeanUtil)的開發(fā)人員來(lái)說(shuō),其類型匹配是非常復(fù)雜的事。事實(shí)上Spring MVC早在1.x版本就完全使用自己的pojo來(lái)對(duì)應(yīng)表單的填充,配上屬性編輯器,可以解決類型轉(zhuǎn)換問(wèn)題,完全實(shí)現(xiàn)領(lǐng)域模型驅(qū)動(dòng)的設(shè)計(jì)模式。由于MVC層的控制器也是Spring容器的Bean而已,因此對(duì)整個(gè)項(xiàng)目的控制、擴(kuò)展變得非常容易。同時(shí)上文也順便點(diǎn)評(píng)了Struts2,可見(jiàn)Spring MVC在各類MVC框架的優(yōu)勢(shì)所在。本身羅德.約翰遜先生是設(shè)計(jì)模式高手,一個(gè)優(yōu)秀的框架給我們帶來(lái)的遠(yuǎn)遠(yuǎn)不只是開發(fā)效率,還有更先進(jìn)的開發(fā)模式和理念...

筆者對(duì)Spring框架研究膚淺,待日后了解掌握更多時(shí)會(huì)常在博客中述之。

原文鏈接:http://howsun.blog.sohu.com/107477052.html


本文名稱:領(lǐng)略Spring3.x時(shí)代的SpringMVC
轉(zhuǎn)載來(lái)源:http://m.5511xx.com/article/coepiso.html