J2EE分层设计概念

来源:百度文库 编辑:神马文学网 时间:2024/05/15 19:59:28
J2EE五层逻辑模型和常见Framework
http://spaces.msn.com/members/JuicyDanielChan
————————————————
|                          客户端层                         |        用户交互,UI实现
| Browser,WirelessDevice,WebService |    Http, Soap 协议(SOP体系)
————————————————
————————————————
|                            表现层                            |   集中登录,会话管理
| Struts,Jsf,Webwork,Tapstry, Velocity | 内容创建,格式,传送
————————————————
————————————————
|                       业务服务层                        |  业务逻辑,事务,数据,服务
| SessionEJB,Spring,Jdoframework) | SessionEjb,POJO Service
————————————————
————————————————
|                            集中层                            | 资源适配器,遗留/外部系统
|Jms,Jdbc,Connnector,External Service  |       规则引擎,工作流
————————————————
(持久化EntityBean,Hibernate,iBatis,Jdo,Dao,TopLink etc.)
————————————————
|                           资源层                            | 资源,数据库,外部服务
| DataBase,Resource,External Service   | (大型主机,B2B集中系统)
————————————————
当然一个常见典型的J2EE系统可能是这样的
客户端 —— 表现层 —— 业务层 —— 持久层 —— 数据库
FireFox + Velocity + Struts + Spring + Hibernate + MySql + Tomcat + Eclipse
我比较习惯用开源产品。强烈支持开源!! *.*
作为一个程序员,常常打交道的是中间层(表现层,业务层,集成层)。
每个层常用的技术简单的介绍如下:
表现层(Present Tier)
Intercepting Filter —— 用于对请求的预处理和后处理
拦截过滤器拦截输入的请求和输出的响应,并加入了一个过滤器。Filter可以通过配置加入和取消(象在web.xml中加入ServletFilter),这样多个过滤器还可以不冲突地组合使用。当预处理以及/或者(filter虽然后response参数,但有时候filter不做处理)后处理完成后,这组过滤器种的最后一个把控制器交给原来的目标对象。对于request来说,这个目标对象通常是前端控制器,但也可能是一个视图。在Struts中,Action的执行方法中参数由request, response, actionMapping,actionForm等等组成。而在Webwork中,Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。对请求(Request)的参数(Param),可以使用拦截器框架自动调用一些get()和set()方法设置到对应的Action的字段中。所以Action的excute()方法没有任何参数,也不存在FormBean。正是这种拦截器,使得Action变得非常简单,Action不用继承servlet,不依赖servlet容器,实现了请求响应与Action之间的解耦,而且可以很方便的在action中不依赖web容器进行单元测试。
Front Controller —— 集中控制请求处理
前端控制器是一个容器,用来装载表现层的共同处理逻辑(如果不采用这个控制器,逻辑代码就会错误的放在视图里)。控制器负责处理请求,进行内容的获取,安全性,视图管理,导航等操作,并委派一个分配器组件分派视图。
Application Controller —— 实现操作和视图管理的集中化,模块化
应用控制器集中了控制,数据获取,视图和命令处理的调用。前端控制器为输入的请求提供了一个集中的访问点和控制器,而应用控制器则负责找出并调用命令,并且还要找出并分派视图。比如Struts中的ActionServlet,Webwork种的ServletDispatcher等。
Context Object —— 以独立于具体通讯协议的形式封装状态
Context对象以独立于具体通讯协议的形式封装了状态,是状态能够在整个应用系统中共享。使用Context对象能够简化测试过程,提供一个更为通用的测试环境,减少了对特定容器的依赖。在webwork中,有两种不同的Context对象,一种是