标签:
继续上一篇博客,本篇博客介绍OFBiz的MVC框架。
OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎、服务引擎、消息引擎、工作流引擎、规则引擎等。
版本一直在更新,现在更新到13.0.7了。
OFBiz的学习文档,少之又少,国内的文档都是过时了的,大多都是4.x的版本,国外的文档也很少。所以本博客都会将自己研究的OFBIZ的东西分享出来。
OFBiz采用的是Service to Worker模式,大名鼎鼎的Struts 1采用的也是这种架构。Serviceto Worker模式的目标就是维护Action,View和Controller之间的分离。
OFBiz实现MVC是通过XML来串联这三者之间的依赖关系。这里牵扯到<view-map/>、<request-map/>、<handler/>这三个主要的XML元素。这三个元素都定义在${applications}/WEB-INF/controller.xml中。上篇文章说过了此文件是定义view,controller之间的映射关系,不仅包含了请求的映射关系,同时还包含了视图的映射关系,以及一系列的处理器不如视图解析处理器,事件处理器等。看完这段话之后也不难理解为什么controller.xml就解耦了。下面具体说一下他们是如何工作的?
配置文件内容如下:
<span style="font-size:18px;"><!--添加班级--> <request-mapuri="createClazz"> <securityhttps="true" auth="true"/> <eventtype="service" invoke="createClazz"/> <responsename="success" type="request-redirect"value="ViewClazz"> <redirect-parametername="clazzId"/> </response> <responsename="error" type="request-redirect"value="EditClazz"> <redirect-parametername="clazzId"/> </response> </request-map> <view-mapname="FindClazz"page="component://college/widget/ClazzScreens.xml#FindClazz"type="screen"/> <view-mapname="ViewClazz"page="component://college/widget/ClazzScreens.xml#ViewClazz"type="screen"/> <view-mapname="EditClazz"page="component://college/widget/ClazzScreens.xml#EditClazz"type="screen"/> </span>
节点解析:
节点一:<Request-map/>
Request-map:通过名字也可以看出这是请求的映射关系。Uri:表示要映射的请求。
本节点里面的几个节点的意思:
Security:安全级别的设置,是否要进行权限检查,是否应该是https的。
Event:此请求触发的事件
response:请求的配置,第一个请求标签的意思是说添加成功后跳转到显示页面; 第二个请求标签的意思是说添加有错误,跳转到编辑页面。理论上这个标签中的name可以自定义名 字,不过ofbiz内置了success和error这两个值,类似于struts2. value值对应于<view-map/>中的name属性值,之所以不直接写上页面,一方面是为了解耦,另一方面是为了可以针对不同的view设置不同的type等属性。属性type="view"表示得到一个页面。type属性帮助ofbiz集成不同的显示层技术。Common-controller定义了不同的type和其对应的ViewHandler。
节点二:<view-map/>
View-map:这个标签是定义显示界面的screen
此节点中的属性:name定义当前view-map的名称,和<request-map/>标签中的<request/>标签相对应
page定义当前前端展示的视图布局文件
type:表示用什么技术展示视图,通常为screen.
OFBiz支持很多类型的页面展示技术,JSP/FreeMarker/Velocity/PDF/Screen/widget等技术。widget是OFBiz自己封装的一个特有的前台页面技术,前面介绍过了。这样一来OFBiz特别适合快速开发,开发一个模块,对用户进行增删改查,会很快,html,css基本都不用写,只需要写view,services,entity等就可以了。相反对于不熟悉OFBiz却觉得它很繁琐,还不如自己封装。
OFBiz的实体引擎很强大,并且灵活,开发人员不需要JDBC知识,不用写SQL语句。基本上,OFBiz封装的能够解决大部分的数据库操作。
Web执行过程
View封装的是对数据源Model的一种现实。一个模型可以有多个视图,而一个视图理论上也可以用不同的模型关联起来。
Model封装的是数据源和所有基于对这些数据的操作。在一个组件中,Model往往表示组件的状态和操作状态的方法。
Control:封装的是外界作用于模型的操作。通常这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。从而解耦。
看完OFBiz的MVC框架后,其实它和Struts中的MVC模式很相似。Struts MVC框架更多的是技术框架,主要目的是分离开发逻辑,使开发过程更容易协作分工,这样就难胜任大规模企业级项目。OFBiz的MVC封装的一套与业务相关的MVC,更多的是通过XML对系统进行建模,以XML来定义系统中不同的层次关系,尽量减少些Java代码的数量,写了一套以XML为基础的mini language来做一些简单的逻辑处理。在Struts中仍要写大量的Java代码。从上面xml代码中也不难看出来,OFBiz在代码复用方面比struts好。
标签:
原文地址:http://blog.csdn.net/liutengteng130/article/details/44279953