领略Spring 3.x 时代的Spring MVC.doc_第1页
领略Spring 3.x 时代的Spring MVC.doc_第2页
领略Spring 3.x 时代的Spring MVC.doc_第3页
领略Spring 3.x 时代的Spring MVC.doc_第4页
领略Spring 3.x 时代的Spring MVC.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

鼎 鼎大名的Spring框架3.0版在12月5日由其作者之一Juergen Hoeller先生在博客里宣告问世,并命为里程碑版,给Spring粉丝们带来了震撼的快感。笔者即开“快车”拉了两个包回来,遗憾的是参考文档至今还 没有出来(仅有API文档),这为学习Spring 3.0带来了非常大的困难,但没有阻挡笔者对新产品的兴趣。 Spring之父Rod Johnson先生早在2003年就预言EJB将 死(观点颇具争议),攻击EJB之臃肿是在虐待程序员。然而EJB 3.0出来后几乎宣判Spring死刑,但自2.0版以后Spring火爆程度已经超过EJB,两者的争斗至今仍不停息,这也是Spring 3.0连文档还没有整理出来就匆匆推出的原因。当然,Spring与EJB有很多各自独特优势之处,例如EJB的分布式运算、标准规范,Spring的 IoC、AOP切面编程、偶合集成、MVC等等,取各自之长在企业中应用如虎添翼。Spring目前已经加入了J2EE规范,J2EE世界将更加精 彩. 或许是用腻了Struts1那死板的WEB框架,才对Spring MVC爱不释手,尤其是2.5版本以后,支持全注解配置方式,已经使很久没有再写过xml文件了。 3.0 版是完全兼容2.5,因此了解2.5版的MVC则更容易接受。正如Arjen Poutsma小伙子在他的博客里说的那样,3.0时代将集中致力于表述性状态转移(REST,希望我没有翻译错,金山词霸翻译为“休息”)的网络服务和 更容易的网络编程。的确增加了更多的控制器类型,并增强了SOAP/WSDL/WS这些基于分布式体系结构。先回忆下2.5注解方式的MVC,来一个示例:Controllerpublic class ArticleController RequestMapping(/articleView) public String getArticle(RequestParam(id) String id, HttpServletRequest request) request.setAttribute(article, service.find(Article.class, id); return articleView; ArticleController 没有实现任何接口,是一个最普通不过的pojo,如果浏览器来了articleView.do?id=xxx这个请求,Spring会找到 getArticle()这个方法,该方法第一个参数绑定到了URL上的请求参数,第二个是J2EE标准的request对象(可见Spring MVC是非侵入式的,不像变态的Struts2),事实上还可以给定HttpServletResponse,ModelMap,甚至自己的类 型,Spring都会为你将值传入进来。通过一个逻辑层service组件根据id参数值去底层查找Article对象,并放入request作用域中, 最后返回的是面页视图名,这个例子中是返回到articleView.jsp中。 上例再变通下:Controllerpublic class ArticleController RequestMapping(/articleView_*) public String getArticle(HttpServletRequest request) String id = StringUtil.getParam(request.getRequestURI(),articleView_*); request.setAttribute(article, service.find(Article.class, id); return articleView; 对于articleView_aaa.do,articleView_bbbb.do,articleView_c5h8j2.do,articleView_xxx.do,这样的请求都会由getArticle()这个方法来应付,是不是很有意思? Spring 3.0增加了一个 PathVariable注解来支持可变的请求路径,将上面的代码在3.0版中再变通下:Controllerpublic class ArticleController RequestMapping(/articleView/$id) /可以接受articleView/aaa.do,articleView/xxx.do. public String getArticle(PathVariable String id, HttpServletRequest request) request.setAttribute(article, service.find(Article.class, id); return articleView; 再变得复杂些:Controllerpublic class ArticleController RequestMapping(/articleList/$pageSize/channel/*/category/$id) public String getArticles(PathVariable Integer pageSize, PathVariable int id, HttpServletRequest request) Integer channelId = StringUtil.getParam(request.getRequestURI(),channel/*/); request.setAttribute(articles, service.findScroll(Article.class, pageSize,50,channel=? and category=?,new ObjectchannelId,id); return articleList; 它已经灵活到URL地址完全可以自己随意编制。 根据内容协商制的视图解析机制: 2.5版是由MVC控制器来决定视图解析器,3.0版将变得更加灵活,似乎可以通过扩展名来转到不同的解析器中,例如请求一个.pdf文件将是如何效果呢?3.0版都会带来不可思议的模式。 HTTP方法的转换: 先看前台页面一段Html代码 HTTP规范中form表单只有两种方法POST和GET,而3.0做了一个过滤器,可以转换这些方法至四种GET, PUT, POST, 和 DELETE。控制器接受请求:Controller(/deleteArticle)public class ArticleController de style=line-height: 28px; RequestMappingdede style=line-height: 28px; (method = RequestMethod.DELETE)de public String deleteArticle(PathVariable String id, HttpServletRequest request) service.delete(Article.class, id); return message; 3.0版仅在MVC子集中就增加了很多新特性,如果在IoC、AOP等等其它子集所有的变革,绝对可以称得上Srping创始人所述的里程碑版本。3.0版使用的注解列表如下:? Autowired? Component? Controller? InitBinder? ManagedAttribute? ManagedOperation? ManagedOperationParameters? ManagedOperationParameter? ManagedResource? PathVariable? PostConstruct? PreDestroy? Repository? RequestMapping? Required? Resource? Service? Transactional 目 前Spring 3版本已经到了M2,应该是M3完成后将推出最终正式版本,我想很快会来临,按照Spring的创始人罗德.约翰逊的预言,未来J2EE应用中 Spring+Tomcat将占主导地位,是否引起争议,笔者不敢点评,不过Oracle收购Sun后,Java社区将是如何,还无从知晓,似乎罗德.约 翰逊对这宗收购案也有些紧张,因为Oracle不像Sun的第一个谈判者IBM那样有过开放技术的先例(可以回忆下IBM早期的主板总线开放掀起的兼容机 潮至今波涛不熄)。目前国内对新东西消化尚慢,我到图书城看了下,Spring 2.5的资料都很难找到。且很多企业都是抱着Struts1.x在做开发,尽管笔者这样说会引来很多争议,但Struts1时代的灭亡只是时间问题。 Struts2虽然改进了很多,依笔者看,与Spring MVC相比仍有诸多的不足,尤其看不惯那种变态的侵入模式,看看它把HttpServletRequest、HttpSession、 HttpServletResponse等servlet标准组件干成什么样?开源时代,至少我不愿意接受那种变态的潜规则。 笔 者早先常用Struts1.x框架,它搭配了一套自己的ActionForm,使得编程工作量增加,虽然可以变通使用自己的Pojo,但对于没有掌握 J2EE底层工具类(BeanUtil)的开发人员来说,其类型匹配是非常复杂的事。事实上Spring MVC早在1.x版本就完全使用自己的pojo来对应表单的填充,配上属性编辑器,可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论