最近项目要用到spring mvc 框架,看了一些资料,现整理备以后遗忘。
1、spring MVC架构采用了command+controller的模式,整体框架如下图所示:
核心的控制器是DispatcherServlet,返回的视图对象是ModeAndVIew对象。
2、在非Annotation base controller情况下,controller类是AbstractControllor子类;有表单时,可继承SimpleFormController类,onSubmit方法是表单提后默认执行的方法。
3、spring mvc的校验要新建一个校验的类,该类要实现Validator接口,且重写validate方法,一般在该项方法内部调用ValidationUtils工具类来校验;JSP页面内就有错误的form:error标签,且path属性指出是哪个域要执行校验;bean的配置文件中validate-ref属性指出校验类bean的ID。
4、spring mvc的拦截器也要新建一个实现了HandlerIntercepterAdapter的类,该类要重写preHandle,postHandle和afterCompletion 三个方法,意思你懂得。在bean的配置文件中,需要作用到这些拦截器的bean配置 中加属性intercepters-ref指出拦截器bean的ID即可。
5、spring mvc 的controller继承MulitActionController即可在一个controller根据不同的方法名处理多个Action请求,只需在bean配置文件中指明即可。
6、spring mvc框架支持annotation base controller,常用的annotation有@Controller,@RequestMapping,@SessionAttribute
现在各主流java web框架优缺点总结如下
然后,Matt按照这些评价标准,对各个框架做了以下阐述:
Ajax支持
◆JSF:没有内置的Ajax支持,需要使用ICEfaces和Ajax4JSF
◆Stripes:没有对应的类库,支持流输出
◆Struts 2:内置Dojo,有用于GWT和JSON的插件
◆Spring MVC:没有对应的类库,需要使用DWR和Spring MVC扩展
◆Tapestry:Tapestry 4.1中,有内置的Dojo
◆Wicket:有Dojo和Script.aculo.us支持
书签能力
◆JSF:可以任意提交——URL甚至不被考虑
◆Stripes:使用约定,但是你可以不加理会
◆Struts 2:有命名空间的概念,这使得收藏某个页面并返回变得容易
◆Spring MVC:允许完全的URL控制
◆Tapestry:依然存在一些丑陋的URL
◆Wicket:允许装配(mount)页面/URL
验证
◆JSF:默认的国际化信息丑陋,但是配置简单
◆Stripes和Wicket:用Java类进行验证——不支持客户端验证
◆Struts 2:使用OGNL完成强大的表达式验证功能;只有在Action上指定了规则,才支持客户端验证。
◆Spring MVC:允许你使用公共验证器——这是一种成熟的解决方案
◆Tapestry:有健壮的验证功能——不需自定义就有漂亮的国际化信息
可测试性
◆Spring MVC和Struts 2:允许利用mocks(例如EasyMock、jMock和Spring Mocks)简单地进行测试
◆Tapestry:测试困难,因为页面类被抽象、具体类被简化
◆JSF:页面类可以方便地被测试,实际上很像Struts 2 中的actions
◆Wicket:有WicketTester——一个强大的解决方案
◆Stripes:有Servlet API Mocks和MockRoundtrip
提交和重定向
解决重复提交问题的最简单方法是:在提交后重定向
◆Spring MVC:允许你将参数加到重定向URL上
◆Stripes、Tapestry和Wicket:有“flash式”的支持
◆Struts 2:需要一个自定义的解决方案
◆JSF:需要一个自定义的解决方案,国际化信息很难加入到页面bean中
国际化
◆JSTL的标签使国际化变得简单;如何将国际化信息放到控制器类中,还没有一个统一的标准。
◆Stripes、Spring MVC和JSF:每个地区使用一个资源绑定文件
◆Struts 2、Tapestry和Wicket:提倡把每个页面/action用到的资源文件分开
◆JSF:需要在每个页面上定义资源绑定信息
◆Tapestry:标签比较可怕
页面修饰
◆Tiles能够用于Struts 2、Spring MVC和JSF中;需要对每个页面进行配置。
◆SiteMesh能够用于所有的这些框架中(不推荐在JSF、Tapestry或者Wicket中使用);在设置完成后, 只需要很少的维护。
开发工具
◆Spring MVC:Spring IDE,但是只做XML校验,不是一个UI/web工具
◆Struts 2:Eclipse
◆Tapestry:Spindle,对编码者非常有利
◆JSF:众多IDE支持,并且做得越来越好
◆Stripes和Wicket:没有任何官方工具
◆NetBeans目前支持Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支持Stripes和Spring MVC
市场需求
◆Struts 1:需求依然很大并且被广泛使用
◆Spring MVC:越来越受关注,但大部分是因为Spring框架的一些其他特征
◆JSF:很快地变得流行起来
◆Struts 2:正在获得地盘,但是相关的工作机会很少
◆Tapestry:在过去的数年里,受欢迎程度不断增加
◆Wicket和Stripes:还是未知数