`
tiankefeng0520
  • 浏览: 148345 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

理解J2EE组件和容器(转)

阅读更多
转自:http://longtangwan.iteye.com/blog/806797

  EJB容器,是用来管理组件行为的一技术的发展是顺应世界变化的趋势的,从C/S 过渡到B/S模式,从客户端的角度考虑企业级应用或者说电子商务领域不在关心客户端维护问题,这个任务已经交给了任何一台PC都会有的浏览器去维护;从服务器端的角度考虑,以往C/S中的TCP/IP协议实现载体ServerSocket被Web Server Container所取代,例如大家都很熟悉的Tomcat、JBoss、WebLogic等等。总之一切的转变都是为了使得Java技术能更好的为人类生产生活所服务。

有人会问,直接去学J2ee跳过J2se行否?笔者是肯定不赞成的,实际上确实有人走这条路,但笔者自身体会是正是由于J2se的基础很牢固,才会导致在J2ee学习的道路上顺风顺水,知识点上不会有什么迷惑的地方。举个简单的例子吧:

笔者曾经跟大学同学讨论下面这两种写法的区别:
ArrayList list = new ArrayList(); //笔者不说反对,但至少不赞成
List list = new ArrayList(); //笔者支持
曾经笔者跟同学争论了几个小时,他非说第一种写法更科学,第二种完全没有必要。我无法完全说服他,但笔者认为良好的习惯和意识是任何时候都应该针对接口编程,以达到解耦合和可扩展性的目的。下面就以接口开始进入J2ee的世界吧:

1. J2EE与接口

每一个版本的J2EE都对应着一个确定版本的 JDK,J2ee1.4对应Jdk1.4,现在比较新的是JDK5.0,自然也会有J2EE 5.0。其实笔者一直在用的是J2EE1.4,不过没什么关系,大家可以下任何一个版本的J2ee api来稍微浏览一下。笔者想先声明一个概念,J2ee也是源自Java,所以底层的操作依然调用到很多J2se的库,所以才建议大家先牢牢掌握J2se 的主流技术。

J2ee api有一个特点,大家比较熟悉的几个包java.jms、javax.servlet.http、javax.ejb等都以interface居多,实现类较少。其实大家真正在用的时候百分之六十以上都在反复的查着javax.servlet.http这个包下面几个实现类的api函数,其他的包很少问津。笔者建议在学习一种技术之前,对整体的框架有一个了解是很有必要的,J2ee旨在通过interface的声明来规范实现的行为,任何第三方的厂商想要提供自己品牌的实现前提也是遵循这些接口定义的规则。如果在从前J2se学习的道路上对接口的理解很好的话,这里的体会将是非常深刻的,举个简单的例子:

public interface Mp3{
  public void play();
  public void record(); 
  public void stop(); 
}


如果我定义这个简单的接口,发布出去,规定任何第三方的公司想推出自己的名字为Mp3的产品都必须实现这个接口,也就是至少提供接口中方法的具体实现。这个意义已经远远不止是面向对象的多态了,只有厂商遵循 J2ee的接口定义,世界上的J2ee程序员才能针对统一的接口进行程序设计,最终不用改变代码只是因为使用了不同厂商的实现类而有不同的特性罢了,本质上说,无论哪一种厂商实现都完成了职责范围内的工作。这个就是笔者想一直强调的,针对接口编程的思想。

接口到底有什么好处呢?我们这样设想,现在有 AppleMp3、SonyMp3、SamsungMp3都实现了这个Mp3的接口,于是都有了play、 record、stop这三个功能。我们将Mp3产品座位一个组件的时候就不需要知道它的具体实现,只要看到接口定义知道这个对象有3个功能就可以使用了。那么类似下面这样的业务就完全可以在任何时间从3个品牌扩展到任意个品牌,开个玩笑的说,项目经理高高在上的写完10个接口里的方法声明,然后就丢给手下的程序员去写里面的细节,由于接口已经统一(即每个方法传入和传出的格式已经统一),经理只需关注全局的业务就可以天天端杯咖啡走来走去了,^_^:

public Mp3 create();
public void copy(Mp3 mp3);
public Mp3 getMp3();



最后用一个简单的例子说明接口:一个5号电池的手电筒,可以装入任何牌子的5号电池,只要它符合5号电池的规范,装入之后任何看不到是什么牌子,只能感受到手电筒在完成它的功能。那么生产手电筒的厂商和生产5号电池的厂商就可以完全解除依赖关系,可以各自自由开发自己的产品,因为它们都遵守5号电池应有的形状、正负极位置等约定。这下大家能对接口多一点体会了么?

2. EJB组件和EJB容器

针对接口是笔者特意强调的 J2ee学习之路必备的思想,另外一个就是比较常规的组件和容器的概念了。很多教材和专业网站都说J2EE的核心是一组规范与指南,强调J2ee的核心概念就是组件+容器,这确实是无可厚非的。随着越来越多的J2ee框架出现,相应的每种框架都一般有与之对应的容器。

EJB容器,是用来管理组件行为的一个集合工具,组件的行为包括与外部环境的交互、组件的生命周期、组件之间的合作依赖关系等等。J2ee包含的容器种类大约有 Web容器、Application Client容器、EJB容器、Applet客户端容器等。但在笔者看来,现在容器的概念变得有点模糊了,大家耳熟能详是那些功能强大的开源框架,比如 Hibernate、Struts2、Spring、JSF等,其中Hibernate就基于JDBC的基础封装了对事务和会话的管理,大大方便了对数据库操作的繁琐代码,从这个意义上来说它已经接近容器的概念了,EJB的实体Bean也逐渐被以Hibernate为代表的持久化框架所取代。

EJB组件,本意是指可以重用的代码单元,一般代表着一个或者一组可以独立出来的功能模块,在J2ee中组件的种类有很多种,比较常见的是EJB组件、DAO组件、客户端组件或者应用程序组件等,它们有个共同特点是分别会打包成.war,.jar,.jar,.ear,每个组件由特定格式的xml描述符文件进行描述,而且服务器端的组件都需要被部署到应用服务器上面才能够被使用。
稍微理解完组件和容器,还有一个重要的概念就是分层模型,最著名的当然是MVC三层模型。在一个大的工程或项目中,为了让前台和后台各个模块的编程人员能够同时进行工作提高开发效率,最重要的就是实现层与层之间的耦合关系,许多分层模型的宗旨和开源框架所追求的也就是这样的效果。在笔者看来,一个完整的 Web项目大概有以下几个层次:

a) 表示层(Jsp、Html、Javascript、Ajax、Flash等等技术对其支持)
b) 控制层(Struts、JSF、WebWork等等框架在基于Servlet的基础上支持,负责把具体的请求数据(有时卸载重新装载)导向适合处理它的模型层对象)
c) 模型层(笔者认为目前最好的框架是Spring,实质就是处理表示层经由控制层转发过来的数据,包含着大量的业务逻辑)
d) 数据层(Hibernate、JDBC、EJB等,由模型层处理完了持久化到数据库中)

当然,这仅仅是笔者个人的观点,仅仅是供大家学习做一个参考,如果要实现这些层之间的完全分离,那么一个大的工程,可以仅仅通过增加人手就来完成任务。虽然《人月神话》中已经很明确的阐述了增加人手并不能是效率增加,很大程度上是因为彼此做的工作有顺序上的依赖关系或者说难度和工作量上的巨大差距。当然理想状态在真实世界中是不可能达到的,但我们永远应该朝着这个方向去不断努力。最开始所提倡的针对接口来编程,哪怕是小小的细节,写一条List list= = new ArrayList()语句也能体现着处处皆使用接口的思想在里面。Anyway,这只是个开篇,笔者会就自己用过的J2ee技术和框架再细化谈一些经验。
分享到:
评论

相关推荐

    第18章 J2EE规范和EJB组件模型.ppt

    总结来说,J2EE规范和EJB组件模型为企业级应用开发提供了强大的工具集和标准架构,确保了跨平台的兼容性、高效开发和可靠的系统性能。通过理解并熟练运用这些知识,开发者可以构建出满足大规模企业需求的复杂应用。

    J2EE官网教程1

    J2EE容器则是运行和管理这些组件的环境,例如Web容器和EJB容器,它们负责实例化、初始化、管理和销毁组件,并提供服务如安全、事务和生命周期管理。 在J2EE应用的打包过程中,开发者通常会将不同类型的组件打包成...

    软件07级J2EE复习题

    【J2EE核心概念】 ...总结来说,这些复习题目涵盖了J2EE平台的基础概念,包括容器、组件、生命周期、Web应用体系、数据库访问接口(JDBC)以及软件设计模式等多个重要领域,是深入理解J2EE开发的关键知识点。

    J2EE平台上MVC模式的实现.pdf

    不同的J2EE组件对应不同的容器: - **Applet容器**:运行和管理Applet。 - **应用客户端容器**:运行和管理标准Java应用程序客户端。 - **Web容器**:运行和管理表现逻辑层的Servlet和JSP组件。 - **EJB容器**:...

    j2ee实例 j2ee实例j2ee实例

    学习如何设置消息队列和发布/订阅模型,以及如何在Java代码中发送和接收消息,是理解J2EE全貌的关键。 JNDI提供了一个统一的接口来查找和绑定网络资源,比如数据库连接、EJB引用等。在实例中,了解如何使用JNDI查找...

    J2EE中文教材

    涵盖了Web容器、EJB(Enterprise JavaBeans)、JSP(JavaServer Pages)以及JNDI(Java Naming and Directory Interface)等多个核心概念,同时通过DUKE的银行应用程序实例,让读者能够更直观地理解J2EE在实际开发中...

    J2EE架构和过程

    通过这些步骤,开发人员不仅可以理解J2EE架构的关键概念,还能根据具体的业务需求调整和优化开发流程。每个步骤都是相互关联的,共同确保了最终产品的质量和适应性。对于希望在J2EE平台上构建复杂系统的团队来说,...

    开发J2EE Web应用

    本书被视为J2EE开发WEB应用的官方权威指南,是专业开发人员深入理解J2EE架构与实践的必备读物。 ### J2EE的关键概念 #### 1. 平台概述 J2EE平台基于Java编程语言,为开发者提供了一套全面的API集合,旨在简化大型...

    J2EE课件 内含部分程序代码和相关课件

    J2EE容器和服务 J2EE应用运行在特定的容器中,这些容器提供了运行时环境和服务: - **Web容器**:管理Servlet和JSP组件,负责解析HTTP请求,调用相应的Servlet,并将响应返回给客户端。 - **EJB容器**:用于管理...

    J2EE完全参考手册-J2EE概述-pdf

    2. **容器和服务**:J2EE 容器为应用组件提供运行环境,如 Web 容器(Servlet 和 JSP)、EJB 容器(Enterprise JavaBeans)以及应用程序服务器(Application Server)。这些容器提供了诸如安全性、事务管理、资源...

    J2EE技术文档资料

    其中,j2se+doc+中文版.chm文件可能是Java SE的API中文帮助文档,这对于理解Java基础和J2EE组件的底层机制非常有用。 在学习J2EE时,不仅要掌握基本概念和组件,还要通过实践来加深理解,利用《Java API中文版》...

    J2EE初学者要理解的几个问题

    - **EJB容器**:专为Enterprise JavaBean设计,提供对EJB组件的管理和系统服务,如事务管理、邮件服务等。EJB容器与Web容器的主要区别在于它们处理的交互类型,EJB容器更多地与数据库和其他服务交互。 4. **J2EE...

    j2ee基础教程

    这些书籍提供了大量的实例和深入的理论知识,有助于学习者更好地理解J2EE的原理和实际应用。 总之,J2EE作为一个成熟的分布式计算平台,提供了企业级应用开发所需的标准服务和接口。通过学习J2EE,开发者能够掌握...

    简单的J2EE聊天室

    在"简单的J2EE聊天室"项目中,通过学习和分析源代码,我们可以深入理解J2EE组件的协作方式,以及如何利用这些技术来构建实时的、可扩展的网络应用。这个项目对于初学者来说是很好的实践机会,可以帮助他们巩固对J2EE...

    中兴 J2EE基础培训资料

    J2EE平台的执行模型展示了不同组件如何与各种容器和底层服务交互。例如,Application Client Container支持JMS、JNDI、RMI/IIOP和JDBC,Web Container处理HTTP请求,而EJB Container则处理EJB的生命周期和事务管理。...

    J2EE 基础教程ppt

    每个J2EE组件都有对应的部署描述符,如web.xml(Web应用)、ejb-jar.xml(EJB)和sun-ejb-jar.xml(Sun EJB扩展)。这些XML文件定义了组件的行为、依赖关系和其他配置信息。 **4. J2EE容器** J2EE容器负责管理组件...

    JAVA WEB 应用开发:J2EE和TOMCAT

    掌握Java Web开发,首先需要学习Java基础,然后深入理解Servlet和JSP,接着学习J2EE的相关概念和组件。对于Tomcat,了解其配置、部署以及管理技巧也是必不可少的。实践中,可以通过创建简单的Web应用,逐步过渡到...

    J2EE全实例教程 doc格式.doc

    【J2EE全实例教程】文档主要介绍了J2EE平台的基本概念、组件层次以及关键的技术规范,以下是详细解析: ...通过深入理解和实践教程中的例子,开发者可以更好地理解J2EE平台的工作原理和应用方法。

    J2EE与.NET技术架构比较

    J2EE采用组件-容器模型,组件(如EJB)运行在容器内,容器负责提供运行时环境和服务。J2EE的核心组件包括Servlet、JSP、EJB、JMS、JNDI、JDBC和JCA等,强调多层分布式架构,支持企业级应用的复杂需求。 .NET ...

Global site tag (gtag.js) - Google Analytics