Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1.4 常用的MVC框架

除了Struts 2之外,还有一些比较流行的MVC框架,这些框架都提供了较好的层次分隔能力。在实现良好的MVC分隔的基础上,还提供一些辅助类库,帮助进行应用开发。如下列出企业开发常见的MVC框架。

1.1.4.1 JSF

准确地说,JSF是一个标准,而不是一个产品。目前,JSF已经有两个实现产品可供选择,即Sun的参考实现和Apache的MyFaces。JSF是Java EE 规范的组成部分,Java EE 6包含了JSF 2.0。

JSF的事件框架可以细化到表单中每个字段,但JSF依然是基于JSP/Servlet架构的,因此学习、使用并不复杂。目前也有不少企业正在使用这个框架。

1.1.4.2 Spring MVC

Spring MVC的功能非常灵活,完全是基于接口编程的,真正实现了视图无关。视图不再强制要求使用JSP,可以使用Velocity、XSLT或其他视图技术,甚至可以使用自定义的视图机制——只需要简单地实现View接口,并且把对应视图技术集成进来即可。Spring的Controllers由IoC容器管理,因此,单元测试更加方便。

Spring MVC框架以DispatcherServlet为核心控制器,该控制器负责拦截用户的所有请求,将请求分发到对应的业务控制器。

Spring MVC还包括处理器映射、视图解析、信息国际化、主题解析、文件上传等。所有的控制器都必须实现Controller接口,该接口仅定义ModelAndView handleRequest(request,response)方法。通过实现该接口来实现用户的业务逻辑控制器。

Spring MVC 框架有一个极好的优势,就是它的视图解析策略:它的控制器返回一个ModelAndView对象,该对象包含视图名字和Model,Model提供了Bean的名字及其对象的对应关系。视图名解析的配置非常灵活,抽象的 Model 完全独立于表现层技术,不会与任何表现层耦合——JSP、Velocity或者其他的技术都可以和Spring整合。

1.1.4.3 Tapestry

Tapestry并不是一种单纯的MVC框架,它更像MVC框架和模板技术的结合,它不仅包含了前端的 MVC 框架,而且包含了一种视图层的模板技术,使用 Tapestry 完全可以与Servlet/JSP API分离,是一种非常优秀的设计。

通过使用Tapestry,开发者完全不需要使用JSP技术,只需要使用Tapestry提供的模板技术即可,Tapestry实现了视图逻辑和业务逻辑的彻底分离。

Tapestry使用组件库替代了标签库,没有标签库概念,从而避免了标签库和组件结合的问题。Tapestry是完全组件化的框架。Tapestry只有组件和页面两个概念,因此,链接跳转目标要么是组件,要么是页面,没有多余的 path 概念。组件名,也就是对象名称,即组件名称和path名称合二为一。

Tapestry具有很高的代码复用性,在Tapestry中,任何对象都可看作是可复用的组件。JSP开发者是真正面向对象,而不是 URL 解析。对于对页面要求灵活度相当高的系统,Tapestry是第一选择。精确的错误报告,可以将错误定位到源程序中的行,取代了 JSP 中那种编译后的提示。

因此,笔者一直对Tapestry情有独钟:如果技术允许,使用Tapestry会带给整个应用更加优雅的架构、更高的开发效率。