收藏 分享(赏)

J2EE初学者需要注意的问题.doc

上传人:dreamzhangning 文档编号:2704116 上传时间:2018-09-25 格式:DOC 页数:12 大小:70KB
下载 相关 举报
J2EE初学者需要注意的问题.doc_第1页
第1页 / 共12页
J2EE初学者需要注意的问题.doc_第2页
第2页 / 共12页
J2EE初学者需要注意的问题.doc_第3页
第3页 / 共12页
J2EE初学者需要注意的问题.doc_第4页
第4页 / 共12页
J2EE初学者需要注意的问题.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、J2EE 初学者需要注意的问题J2EE 体系结构简单介绍 一、J2EE 提出的背景1、 企业级应用框架的需求在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次再开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。2、 为了通用必须要提出规范,不然无法达到通用在上面的需求基础之上,许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实 J2EE 就是基于 J

2、AVA 技术的一系列标准。注:中间件的解释 中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。我们后面说到的容器的概念就是中间件的一种。二、相关名词解释容器:充当中间件的角色WEB 容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET 直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有 WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。该容器提供的接口严格遵守 J2EE 规范中的 W

3、EB APPLICATION 标准。我们把遵守以上标准的 WEB 服务器就叫做J2EE 中的 WEB 容器。EJB 容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件 EJB 各种管理功能。只要满足 J2EE 规范的 EJB 放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。WEB 容器和 EJB 容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB 容器更多的是跟基于 HTTP 的请求打交道。而 EJB 容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互

4、实现从而减轻应用程序的负担。例如SERVLET 不用关心 HTTP 的细节,直接引用环境变量 session,request,response 就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。RMI/IIOP:远程方法调用/internet 对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是 JAVA 特有的。JNDI:JAVA 命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索

5、引,从而满足快速查找和定位分布式应用程序的功能。JMS:JAVA 消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。JAVAMAIL:JAVA 邮件服务。提供邮件的存储、传输功能。他是 JAVA 编程中实现邮件功能的核心。相当 MS 中的 EXCHANGE 开发包。JTA:JAVA 事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。JAF:JAVA 安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE 技术是一种很好的集成实现。三、J2EE 的优越性1、 基于

6、 JAVA 技术,平台无关性表现突出2、 开放的标准,许多大型公司已经实现了对该规范支持的应用服务器。如 BEA ,IBM,ORACLE 等。3、 提供相当专业的通用软件服务。4、 提供了一个优秀的企业级应用程序框架,对快速高质量开发打下基础四、现状J2EE 是由 SUN 公司开发的一套企业级应用规范。现在最高版本是 1.4。支持 J2EE 的应用服务器有 IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。J2EE 开

7、发中几个主流框架的简短使用总结2008-11-13 作者: 梦紫纤芊 来源:网络 阅读 203 次spring,SSH 框架处于一个难于撼动的地位,spring 以其轻量级,易操作的,开发高效等优点,被业界内广泛应用。IOC 及 AOP 是 spring 被重要应用的两点,由于struts,struts2,webword 等一系列 view 框架的存在,springMVC 的应用显得有些力不从心,不能被广为推广使用。AOP 使用中目前主要用,配置 ehcache 的时候用到过一次,其它地方应用不是太多,更多的是 IOC 的操作。与 hibernate,struts 结合使用,采用不同的设计模式

8、,面向接口编程,已经成为业界公认的框架模式。struts 的 action 交由 spring 配置 bean文件来完成,由 spring 代理其 action 的操作,数据源/数据库连接池也在其配置文件里完成。spring 更重要的是完成了应用间的解耦,更加有利于程序的维护,扩展。 hibernate,ORM 领域中的经典之作。 OO 与关系型数据库处于不协调发展的局面,数据库如今却成了 OO 编程路上的绊脚石,阻碍着 OO 向前发展,ORM 于此解决了关系型数据库与对象间的映射。hibernate 自动生成 sql 语句封装在内部,开发人员无须写 SQL 语句,HQL 语法又相当简单,大大

9、简化了开发的步骤。由于 hibernate 处理持久层的角色,只要数据库设计合理,更多的是利用 IDE(MyEclipse)就可以生成相对的持久类 POJO 以及映射配置文件,与数据库关联起来,操作 POJO 类即操作数据库。spring 对 hibernate 提供了很好的兼容性,在 hibernate 配置二级缓存,可以对系统应用起到良好的效果。Ibatis,ORM 领域中一个框架,相对 hibernate 而言,ibatis 更加小巧,更易于学习,对数据库设计不太友好的,使用 IBATIS 比 hibernate 更合适。 ibatis 不会像 hibernate 一样生成 SQL,而是

10、需要开发人员自己去写 SQL 语句,这一点也给于了开发人员更灵活的设计与操作。hibernate 相对来说,在一些复杂的数据处理方,并不如 IBATIS 灵活。struts+ibatis+spring 与 SSH 相比,也是一种不错的组合,巧手(7iaoshou)就是基于此框架组合。struts,MVC 经典的一个实现,近阶段依然于其它框架无法超载的地位,不是说 struts有多强大,完美,而是 struts 似乎成为了 MVC 开发的标准。主要应用有以下这些:对于大中型的企业级应用,多模块开发必然应用到,很多模块只有分开在不同的配置文件里写,才能更有利于书写,维护;自身 FORM 的验证,v

11、alidate;struts 丰富的页面标签书写页面更加灵活强大;与 spring,hibernate 完美的结合在一起使用,快速高效开发。其它 WEB 开发框架还有 JSF,Struts 2.0,webwork 等等,由于只是简单了解,并未投入生产使用,只能由读者自己去体会了。目前流行的 J2EE Web 应用架构介绍和分析2008-11-13 作者: 梦紫纤芊 来源:网络 阅读 142 次1. 架构概述 J2EE 体系包括 java server pages(JSP) ,java SERVLET, enterprise bean,WEB service 等技术。这些技术的出现给电子商务时代

12、的 WEB 应用程序的开发提供了一个非常有竞争力的选择。怎样把这些技术组合起来形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。完成这个步骤可以形成一个主要里程碑基线。形成这个基线有很多好处:各种因数初步确定为了形成架构基线,架构设计师要对平台(体系) 中的技术进行筛选,各种利弊的权衡。往往架构设计师在这个过程中要阅读大量的技术资料,听取项目组成员的建议,考虑领域专家的需求,考虑赞助商成本(包括开发成本和运行维护成本) 限额。一旦架构设计经过评审,这些因数初步地就有了在整个项目过程中的对项目起多大作用的定位。定向技术培训一旦架构师设计的架构得到了批准形成了基线,项目开发和运行所

13、采用的技术基本确定下来了。众多的项目经理都会对预备项目组成员的技术功底感到担心;他们需要培训部门提供培训,但就架构师面对的技术海洋,项目经理根本就提不出明确的技术培训需求。怎不能够对体系中所有技术都进行培训吧!有了架构里程碑基线,项目经理能确定这个项目开发会采用什么技术,这是提出培训需求应该是最精确的。不过在实际项目开发中,技术培训可以在基线确定之前与架构设计并发进行。角色分工有了一个好的架构蓝图,我们就能准确划分工作。如网页设计,JSP 标签处理类设计,SERVLET 设计,session bean 设计,还有各种实现。这些任务在架构蓝图上都可以清晰地标出位置,使得项目组成员能很好地定位自己

14、的任务。一个好的架构蓝图同时也能规范化任务,能很好地把任务划分为几类,在同一类中的任务的工作量和性质相同或相似。这样工作量估计起来有一个非常好的基础。运行维护前面说过各个任务在架构图上都有比较好的定位。任何人能借助它很快地熟悉整个项目的运行情况,错误出现时能比较快速地定位错误点。另外,有了清晰的架构图,项目版本管理也有很好的版本树躯干。扩展性架构犹如一颗参天大树的躯干,只要躯干根系牢,树干粗,长一些旁支,加一些树叶轻而易举无疑。同样,有一个稳定的经得起考验的架构,增加一两个业务组件是非常快速和容易的。大家都知道这些好处,一心想形成一个这样的 J2EE 应用程序架构(就像在 windows 平台

15、中的 MFC)。在这个路程中经历了两个大的阶段:1.1. 模型 1模型 1 其实不是一个什么稳定架构,甚至谈不上形成了架构。模型 1 的基础是 JSP 文件。它从 HTTP 的请求中提取参数,调用相应的业务逻辑,处理 HTTP 会话,最后生成HTTP 文档。一系列这样的 JSP 文件形成一个完整的模型 1 应用,当然可能会有其他辅助类或文件。早期的 ASP 和 PHP 技术就属于这个情况。总的看来,这个模型的好处是简单,但是它把业务逻辑和表现混在一块,对大应用来说,这个缺点是令人容忍不了的。1.2. 模型 2在经过一番实践,并广泛借鉴和总结经验教训之后,J2EE 应用程序终于迎来了MVC(模型

16、-视图-控制)模式。MVC 模式并不是 J2EE 行业人士标新立异的,所以前面我谈到广发借鉴。MVC 的核心就是做到三层甚至多层的松散耦合。这对基于组件的,所覆盖的技术不断膨胀的 J2EE 体系来说真是福音和救星。它在浏览器(本文对客户代理都称浏览器 )和 JSP 或 SERVLET 之间插入一个控制组件。这个控制组件集中了处理浏览器发过来的 HTTP 请求的分发逻辑,也就是说,它会根据HTTP 请求的 URL,输入参数,和目前应用的内部状态,把请求分发给相应的 WEB 层的JSP 或 SERVLET。另外它也负责选择下一个视图(在 J2EE 中,JSP,SERVLET 会生成回给浏览器的 h

17、tml 从而形成视图)。集中的控制组件也有利于安全验证,日志纪录,有时也封装请求数据给下面的 WEB tier 层。这一套逻辑的实现形成了一个像 MFC 的应用框架,位置如图:1.3. 多层应用下图为 J2EE 体系中典型的多层应用模型。Client tier 客户层一般为浏览器或其他应用。客户层普遍地支持 HTTP 协议,也称客户代理。WEB tier WEB 应用层在 J2EE 中,这一层由 WEB 容器运行,它包括 JSP, SERVLET 等 WEB 部件。EJB tier 企业组件层企业组件层由 EJB 容器运行,支持 EJB, JMS, JTA 等服务和技术。EIS tier 企业

18、信息系统层企业信息系统包含企业内传统信息系统如财务,CRM 等,特点是有数据库系统的支持。应用框架目前主要集中在 WEB 层,旨在规范这一层软件的开发。其实企业组件层也可以实现这个模型,但目前主要以设计模式的形式存在。而且有些框架可以扩充,有了企业组件层组件的参与,框架会显得更紧凑,更自然,效率会更高。2. 候选方案目前,实现模型 2 的框架也在不断的涌现,下面列出比较有名的框架。2.1. Apache StrutsStruts 是一个免费的开源的 WEB 层的应用框架,apache 软件基金致力于 struts 的开发。Struts 具是高可配置的性,和有一个不断增长的特性列表。一个前端控制

19、组件,一系列动作类,动作映射,处理 XML 的实用工具类,服务器端 java bean 的自动填充,支持验证的WEB 表单,国际化支持,生成 HTML,实现表现逻辑和模版组成了 struts 的灵魂。2.1.1. Struts 和 MVC模型 2 的目的和 MVC 的目的是一样的,所以模型 2 基本可以和 MVC 等同起来。下图体现了 Struts 的运作机理:2.1.1.1. 控制如图所示,它的主要部件是一个通用的控制组件。这个控制组件提供了处理所有发送到 Struts 的 HTTP 请求的入口点。它截取和分发这些请求到相应的动作类 (这些动作类都是Action 类的子类) 。另外控制组件也

20、负责用相应的请求参数填充 From bean,并传给动作类。动作类实现核心商业逻辑,它可以通过访问 java bean 或调用 EJB。最后动作类把控制权传给后续的 JSP 文件,后者生成视图。所有这些控制逻辑利用一个叫 struts-config.xml 文件来配置。2.1.1.2. 模型模型以一个或几个 java bean 的形式存在。这些 bean 分为三种:Form beans(表单 Beans)它保存了 HTTP post 请求传来的数据,在 Struts 里,所有的 Form beans 都是 ActionFrom 类的子类。业务逻辑 beans专门用来处理业务逻辑。系统状态 be

21、ans它保存了跨越多个 HTTP 请求的单个客户的会话信息,还有系统状态。2.1.1.3. 视图控制组件续传 HTTP 请求给实现了视图的 JSP 文件。JSP 能访问 beans 并生成结果文档反馈到客户。Struts 提供 JSP 标签库: Html,Bean ,Logic,Template 等来达到这个目的,并有利于分开表现逻辑和程序逻辑。2.1.2. Struts 的细节分析2.1.2.1. 视图-控制-模型用户发出一个*.do 的 HTTP 请求,控制组件接收到这个请求后,查找针对这个请求的动作映射,再检查是否曾创建过相应的动作对象(action 实例 ),如果没有则调用action

22、mapping 生成一个动作对象,控制组件会保存这个动作对象供以后使用。接着调用actionmapping 的方法得到 actionForm 对象。之后把 actionForm 作为参数传给动作对象的perform 方法,这个方法结束之后会返回给控制组件一个 actionforward 对象。控制组件接着从这个对象中获取下一个视图的路径和重定向属性。如果为重定向则调用HTTPSERVLETREPONSE 的方法来显示下一个视图,否则相继调用 requestdispatcher, SERVLETcontext 的方法续传 HTTP 请求到下一个视图。当动作对象运行 perform 方法时,可能出

23、现错误信息。动作对象可以保存这些错误信息到一个 error 对象中,接着调用自身的 saveerrors 方法把这个错误保存到 request 对象的属性中。接着动作对象调用 actionmapping 对象的 getInput 方法从动作映射中获取 input 参数,也就是产生输入的视图,并以这个 input 为参数生成一个 actionforward 对象返回。这个input 参数的 JSP 中一般有 HTTP:errors 定制标签读取这些错误信息并显示在页面上。2.1.2.2. 模型到视图模型到视图指视图在显示之前装载系统数据到视图的过程。系统数据一般为模型内java bean 的信息

24、。示意图表现了由控制组件 forward 过来的有 html:form 定制标签的 JSP 的处理逻辑。html:form 定制标签处理对象从 application scope(通过查询 SERVLETCONTEXT 对象的属性来实现)获取先前由控制组件 actionSERVLET 放在那里的动作映射等对象,由html:form 的 action 属性查得 actionform 名字、类型和范围等信息,在相应的范围内查找actionform,如果有则利用它的信息填充 html form 表单 实际填充动作在嵌套的 html:text 等定制标签的处理对象中。否则在相应范围内创建一个 acti

25、onform 对象。2.1.3. 优缺点优点:一些开发商开始采用并推广这个框架作为开源项目,有很多先进的实现思想对大型的应用支持的较好有集中的网页导航定义缺点:不是业届标准对开发工具的支持不够复杂的 taglib,需要比较长的时间来掌握html form 和 actionform 的搭配比较封闭,但这也是它的精华所在。修改建议把 actionform 属性的设置器和访问器修改成读取或生成 xml 文档的方法,然后 html form 和 actionform 之间用 xml 文档进行数据交换,使之松散耦合,适应数据结构易变化的应用。2.2. JATOJATO 应用程序框架是 iPlanet 应

26、用程序框架的旧名。它是一个成熟的、强大的,基于J2EE 标准的面向于开发 WEB 应用程序的应用框架。结合了显示字段、应用程序事件、组件层次和以页面为中心的开发方法、以及 MVC 和服务到工作者 service-to-workers 的设计模式等概念。JATO 可适用于中、大、超大规模的 WEB 应用。但是它也不是一个企业层的应用框架,也就是说它不会直接提供创建 EJB, WEB services 等企业层组件的方法,但用它可以构造出访问企业层组件的客户应用。这个框架功能主要有三部分组成:iPlanet 应用框架核心;iPlanet 应用框架组件;iPlanet 应用框架扩展。应用框架核心定义

27、了基本接口、对象协议、简单组件,以及 iPlanet 应用框架程序的最小核心。包括视图简单组件、模型简单组件、请求分发组件和可重用命令对象。iPlanet 应用框架组件利用框架核心定义的基本接口、协议和组件向开发者提供高层的重用组件,这些组件既有与特定视觉效果无关的水平组件,同时也有适应特定实用环境、提高可用性而特意提供的垂直型组件。框架扩展实现了用框架相容的方法访问非 J2EE 环境的方法。通常情况下,扩展被框架应用程序用来无缝访问 J2EE 容器特定功能。JATO 平台栈图很清楚地表达了这个情况。JATO 最大的威力在:对于快速开发用户,你能利用框架组件和扩展提高生产率,对于要求更大灵活性

28、的用户,你能实现框架核心提供的接口来保持应用的框架兼容性。此图表示实现一个 JATO 应用程序,可以简单地实现控制组件 module1Servlet,视图组件 ListCustomersViewBean 和模型组件 CustomersModuleImpl,以及一个给客户代理显示界面的 ListCustomers.jsp 文件。并清楚地表明这些组件与 JATO 框架组件的继承关系。JATO 标签库提供了 VIEW 对象与 JSP 文件的接口。库中标签处理程序负责实现VIEW 对象和 JSP 产生地客户端文档的信息同步和交换。这个图清楚地表达了这种对应关系2.2.1. MVC 分析前端控制组件接收

29、用户发来的任何请求,这个可在 WEB.xml 中指定请求分发组件负责视图管理和导航,和前端控制组件封装在 ApplicationSERVLETBase 一起实现。应用程序开发者需要为每一个子系统(人力资源,财务,CRM 等) 实现一个此类的继承。请求分发组件分发请求给工作者,工作者实现了 command 接口。应用开发者可以实现这个接口。JATO 提供了一个缺省实现:DefaultRequestHandingCommand,这个实现会把请求传给视图组件的特定事件。组合视图是指视图组件在显示给用户时的层次关系:根视图是一个 ViewBean 类的对象字段是一个 DisplayField 类的对象

30、,容器视图是一个 ContainerView 类的对象。视图组件类的层次关系如下图:2.2.2. 优缺点分析优点:这种框架的适应范围大,即提供了底层接口,也有立即可用的组件具有与客户端 RAD 开发工具相似的开发概念如页为中心( 等同于 VB 的 FORM),事件处理等.对大型的应用支持较好缺点:不是业届标准目前还没有开发工具的支持(然 JATO 已经为工具支持做好了准备)没有定义网页导航,开发者在视图中自己指定具体的导航 URL修改建议把众多的 VIEW/MODEL 对应修改成 xml 文档传递数据,加上集中的网页导航定义2.3. JSF(JavaServer Faces)JSF 是一个包括

31、 SUN 在内的专家组正在定义的开发 WEB 应用用户界面的框架,JSF 技术包括:一组 API,它实现 UI 了组件,管理组件的状态,处理事件,输入校验,定义页面导航,支持国际化和访问;一个 JSP 定制标签库实现与 JSP 的接口。JSF 非常简单,是一个定义良好的编程模型。利用这个技术,开发者通过在页面内组合可重用的 UI 组件,在把这些组件和应用的数据源相连,路由客户产生的事件到服务器端的事件处理器进行编程。JSP 处理了所有幕后的复杂工作,使得开发者把关注重点放在应用代码上。2.3.1. STRUTS、JATO 和 JSF 比较它们之间有部分重叠,但重点不一样。STRUTS 和 JA

32、TO 都提供了一个 MVC 式的应用模型,而 JSF 只在用户界面上提供编程接口。这意味着前两者涉及的范围比后者广。JSF 可以成为前两者在 UI 开发的部分。JSF 的规范的发布版将在 2002 年底发布,实现可能要比这个时间晚些。另外将会有工具支持这个框架的应用开发。2.4. WAFWAF 是 WEB APPLICATION FRAMWORK 的简称,是 SUN 蓝皮书例子程序中提出的应用框架。它实现了 MVC 和其他良好的设计模式。2.4.1. 细节分析2.4.2. 视图-控制-模型如图所示,开发人员编写的两个 xml 配置文件定义了 WAF 的运作参数。Screendefinition

33、.xml 定义了一系列的屏幕(screen)。Mapping.xml 则定义了某个动作之后应该显示的屏幕,但没有指定屏幕到哪里拿数据。用户发出一个 HTTP 请求(*.screen),由 TemplateSERVLET 屏幕前端控制组件接收,它提取请求信息,设置 request 对象 CurrentScreen 属性,再把请求发到模版 JSP。模版 JSP收到请求后,JSP 中的 Template 标签察看这个当前屏幕,并从屏幕定义文件(Screendefinition.xml)中获取这个屏幕的具体参数,再生成 html 返回给客户。假设返回给客户的 html 中包括了 html 表单,用户在

34、输入一定数据之后提交,发出一个 HTTP 请求(*.do)。这个请求被 MainSERVLET 接收,它提取请求信息,察看动作映射文件(mapping.xml),设置处理这个请求的动作对象(HTTPAction 对象),交给 requestprosessor对象处理。Requestprosessor 对象调用动作对象完成任务,如果需要进一步处理,requestprosessor 对象会调用 WEBclientcontroler 对象的事件处理机制。 MainSERVLET 在处理完请求之后,从屏幕流管理对象那里得到下一个屏幕,并把请求传给这个屏幕的 JSP 文件。值得一提的是 WEBclien

35、tcontroler 事件处理机制最终把 HTTP 请求的数据传到了EJBAction 对象那里处理。这样 HTTPAction 对象和 EJBAction 对象形成了两级处理机制,前一级与 request 对象紧密相关,把数据封装起来形成一个 Event 对象,再传给了EJBAction 对象,后者与 Request 对象无关。这个方式可以形成一个 session 级别的数据处理机制。下图显示了这个方法。HTTPAction1 对象处理一个请求,并把数据放到一个状态SessionBean 内,HTTPAction2 也如此,当 HTTPAction3 接收到 HTTP 请求之后,把控制传给

36、EJBAction, 后者获取状态 SessionBean 数据,处理请求,成功后清控状态 SessionBean的内容。这个机制非常适应多个输入页面才能满足一个业务的输入数据的情况(比如购物车) 。2.4.3. 优缺点分析优点屏幕导航定义明确为框架的扩展提供了一个空间缺点源码比较乱,稳定性和可靠性没人验证。只是一个框架躯干,没有正式的 model 层,视图的概念不强没有模型到视图的定义修改意见只有一个框架躯干,正为实现自己的应用框架提供了灵活性。没有僵化的视图概念,提供了在网页输入到模型的扩充接口,比如插入 XML 数据交换。结合 Struts 和 Hibernate 谈 J2EE 数据表示

37、2008-11-13 作者: 梦紫纤芊 来源:网络 阅读 185 次在 struts+ hibernate 这种结构中,是不应该把 Hibernate 产生的 PO 直接传递给 JSP 的,不管他是 Iterator,还是 List,这是一个设计错误。 我来谈谈在 J2EE 架构中各层的数据表示方法:Web 层的数据表示是 FormBean,数据来源于 HTML Form POST业务层的数据表示是 VO持久层的数据表示是 PO,其数据来源于数据库,持久层的数据表示例如 CMP在一个规范的 J2EE 架构中,不同层的数据表示应该被限制在层内,而不应该扩散到其它层,这样可以降低层间的耦合性,提高

38、 J2EE 架构整体的可维护性和可扩展性。比如说 Web 层的逻辑进行了修改,那么只需要修改 FormBean 的结构,而不需要触动业务层和持久层的代码修改。同样滴,当数据库表进行了小的调整,那么也只需要修改持久层数据表示,而不需要触动业务层代码和 Web 层代码。不过由于 Hibernate 的强大功能,例如动态生成 PO, PO 的状态管理可以脱离Session,使得在应用了 Hibernate 的 J2EE 框架中,PO 完全可以充当 VO,因此我们下面把PO 和 VO 合并,统称为 PO。先来谈谈 ActionFormBean 和持久层的 PO 之间的重大区别。在简单的应用中,Acti

39、onFormBean 和 PO 几乎是没有区别,所以很多人干脆就是用ActionFormBean 来充当 PO,于是 ActionFormBean 从 JSP 页面到 Servlet 控制层再到业务层,然后穿过持久层,最后一直映射到数据库表。真是一竿子捅到了底!但是在复杂的应用中,ActionFormBean 和 PO 是分离的,他们也不可能一样。ActionFormBean 是和网页里面的 Form 表单一一对应的, Form 里面有什么元素,Bean 里面就有什么属性。而 PO 和数据库表对应,因此如果数据库表不修改,那么 PO 也不会修改,如果页面的流程和数据库表字段对应关系不一致,那么

40、你又如何能够使用ActionFormBean 来取代 PO 呢?比如说吧,用户注册页面要求注册用户的基本信息,因此 HTML Form 里面包含了基本信息属性,于是你需要一个 ActionFormBean 来一一对应(注意:是一一对应) ,每个 Bean属性对应一个文本框或者选择框什么的。而用户这个持久对象呢?他的属性和 ActionFormBean 有什么明显不同呢?他会有一些ActionFormBean 所没有的集合属性,比如说用户的权限属性,用户的组属性,用户的帖子等等。另外还有可能的是在 ActionFormBean 里面有 3 个属性,分别是用户的 First Name, Middl

41、e Name, Last Name,而在我的 User 这个持久对象中就是一个 Name 对象属性。假设我的注册页面原来只要你提供 First Name,那么 ActionFormBean 就这一个属性,后来我要你提供全名,你要改 ActionFormBean,加两个属性。但是这个时候 PO 是不应该修改滴,因为数据库没有改。那么在一个完整的 J2EE 系统中应该如何进行合理的设计呢?JSP(View) - ActionFormBean(Module) - Action(Control)ActionFormBean 是 Web 层的数据表示,它和 HTML 页面 Form 对应,只要 Web

42、页面的操作流程发生改变,它就要相应的进行修改,它不应该也不能被传递到业务层和持久层,否则一旦页面修改,会一直牵连到业务层和持久层的大面积的代码进行修改,对于软件的可维护性和可扩展性而言,是一个灾难,Actiont 就是他的边界,到此为止!Action(Web Control) - Business Bean - DAO - ORM -DB而 PO 则是业务层和持久层的数据表示,它在业务层和持久层之间进行流动,他不应该也不能被传递到 Web 层的 View 中去,而 ActionServlet 就是他的边界,到此为止!然后来看一看整个架构的流程:当用户通过浏览器访问网页,提交了一个页面。于是 A

43、ction 拿到了这个 FormBean,他会把 FormBean 属性读出来,然后构造一个 PO 对象,再调用业务层的 Bean 类,完成了注册操作,重定向到成功页面。而业务层 Bean 收到这个 PO 对象之后,调用 DAO 接口方法,进行持久对象的持久化操作。当用户查询某个会员的信息的时候,他用全名进行查询,于是 Action 得到一个UserNameFormBean 包括了 3 个属性,分别是 first name, middle name, last name,然后Action 把 UserNameFormBean 的 3 个属性读出来,构造 Name 对象,再调用业务 Bean,把

44、Name 对象传递给业务 Bean,进行查询。业务 Bean 取得 Name(注意 : Name 对象只是 User 的一个属性 )对象之后调用 DAO 接口,返回一个 User 的 PO 对象,注意这个 User 不同于在 Web 层使用的 UserFormBean,他有很多集合属性滴。然后业务 Bean 把 User 对象返回给 Action。Action 拿到 User 之后,把 User 的基本属性取出( 集合属性如果不需要就免了),构造UserFormBean,然后把 UserFormBean request.setAttribute(.),然后重定向到查询结果页面。查询页面拿到 r

45、equest 对象里面的 ActionFormBean,自动调用 tag 显示之。总结:FormBean 是 Web 层的数据表示,他不能被传递到业务层;PO 是持久层的数据表示,在特定情况下,例如 Hibernate 中,他可以取代 VO 出现在业务层,但是不管 PO 还是 VO都必须限制在业务层内使用,最多到达 Web 层的 Control,绝不能被扩散到 View 去。FormBean 和 PO 之间的数据转化是在 Action 中进行滴。BTW:JDO1.x 还不能像 Hibernate 功能这样强大,PO 不能脱离持久层,所以必须在业务层使用 VO,因此必须在业务层进行大量的 VO

46、和 PO 的转化操作,相对于 Hibernate 来说,编程比较烦琐。初学者如何开发出一个高质量的 J2EE 系统2008-11-13 作者: 梦紫纤芊 来源:网络 阅读 169 次J2EE 学习者越来越多,J2EE 本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习 J2EE 学习方向。 首先我们需要知道 Java 和 J2EE 是两个不同概念,Java 不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以 Java 有时是指一种软件系统的流派,当然目前主要是.NET 和 Java 两大主流体系。J2EE 可以说指 Java 在

47、数据库信息系统上实现,数据库信息系统从早期的 dBase、到Delphi/VB 等 C/S 结构,发展到 B/S(Browser 浏览器/Server 服务器)结构,而 J2EE 主要是指B/S 结构的实现。J2EE 又是一种框架和标准,框架类似 API、库的概念,但是要超出它们。如果需要详细了解框架,可先从设计模式开始学习。J2EE 是一个虚的大的概念,J2EE 标准主要有三种子技术标准:WEB 技术、EJB 技术和 JMS,谈到 J2EE 应该说最终要落实到这三个子概念上。这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web 容器也是指 Jsp/Servlet 容器,你如

48、果要开发一个 Web 应用,无论是编译或运行,都必须要有Jsp/Servlet 库或 API 支持(除了 JDK/J2SE 以外) 。Web 技术中除了 Jsp/Servlet 技术外,还需要 JavaBeans 或 Java Class 实现一些功能或者包装携带数据,所以 Web 技术最初裸体简称为 Jsp/Servlet+JavaBeans 系统。谈到 JavaBeans 技术,就涉及到组件构件技术(component),这是 Java 的核心基础部分,很多软件设计概念(设计模式 )都是通过 JavaBeans 实现的。JavaBeans 不属于 J2EE 概念范畴中,如果一个 JavaB

49、eans 对象被 Web 技术(也就是Jsp/Servlet)调用,那么 JavaBeans 就运行在 J2EE 的 Web 容器中;如果它被 EJB 调用,它就运行在 EJB 容器中。EJB(企业 JavaBeans)是普通 JavaBeans 的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。至此,JavaBeans 组件发展到 EJB 后,并不是说以前的那种 JavaBeans 形式就消失了,这就自然形成了两种 JavaBeans 技术:EJB 和 POJO,POJO 完全不同于 EJB 概念,指的是普通 JavaBeans,而且这个 JavaBeans 不依附某种框架,或者干脆可以说:这个 JavaBeans是你为这个应用程序单独开发创建的。J2EE 应用系统开发工具有很多:如 JBuilder、Eclipse 等,这些 IDE 首先是 Java 开发工具,也就是说,它们首要基本功能是可以开发出 JavaBeans 或 Java class,但是如果要开发出 J2EE 系统,就要落实到要么是 Web 技术或 EJB 技术,那么就有可能要一些专门模块功能(如 eclipse 需要 lomboz 插件) ,最重要的是,因为 J2EE 系统区分为容器和应用两个部分,所以,在任何开

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报