1、第第1章章 Java EE概述概述1.1 Java EE简介简介1.2 Java EE 分层架构分层架构 1.3 Java EE技术规范技术规范 1.4 敏捷轻型框架敏捷轻型框架 1.5 Java EE开发环境开发环境 习题习题 1.1 Java EE简介简介1.1.1 什么是Java EE Java EE是基于Java的解决方案,是Java平台的企业版,是一套技术架构。Java EE的核心是一组技术规范与指南,它使开发人员能够开发具有可移植性、安全性和可复用的企业级应用。Java EE良好定义和设计的体系结构保证了开发人员更多地将注意力集中于架构设计和业务逻辑上 。 1.1.2 Java E
2、E的新特性 1、标注(Annotation) 是Java EE 5引入的一个新特性。标注之于程序是一种元数据,标注这种元数据按照其作用可以分为三类:编写文档、代码分析、编译检查。用于编写文档是通过代码里的标注元数据生成文档,例如Documented,用于定制javadoc不支持的文档属性,并在开发中使用。用在代码分析的标注如Deprecated,指出这是个不建议使用的方法。 引入标注可以实现多种功能的简化,例如:(1)定义和使用Web Service。(2)开发EJB组件。(3)映射Java类到XML文档。(4)映射Java 类到数据库。(5)依赖注入。(6)指定部署信息等。 有了Annota
3、tion,在Web应用开发中直接在代码中使用标注就可以告知Java EE服务器如何部署及运行,而不必再编辑WEB-INF/web.xml文件了。2、EJB 3 EJB 3是EJB 2的升级,不像EJB 2是重量级框架,EJB 3的持久化变更加简化,是轻量级的。它不再需要EJB home接口,不再需要实现SessionBean接口,JDNI API也不再是必需的。EJB部署描述符变成可选的功能。此外,EJB 3中还引入了拦截器功能。拦截器是AOP在EJB中的实现,是可以对Bean 的业务方法进行拦截的组件。拦截器可以用于无状态会话Bean、有状态会话Bean和消息驱动Bean。拦截器用来监听程序
4、的一个或者多个方法,它对方法调用提供了控制。 3、 JPA JPA(Java Persistence API),即数据持久化API,它是一个轻量级的对象持久化模型,是Java EE的又一新特性。Sun公司推出JPA规范目的在于简化现有Java EE和Java SE应用的对象持久化工作,希望统一ORM技术,因为在JPA出现之前,各种ORM框架之间的API差异很大,使用了某种ORM框架的系统会受制于该ORM的标准。 JPA本质上是一种ORM规范,并未提供ORM实现,其具体实现由其他的厂商提供。程序员若要使用JPA,需要选择JPA的实现框架,Hibernate 3即是这样一个实现了JPA的一个框架
5、。 4、 Web Service支持 Web Service是建立可互操作的分布式应用程序的新平台,程序员可能使用COM或DCOM建立过基于组件的分布式应用程序,或者使用CORBA、RMI等技术实现远程调用。Web Service平台也是这样的一套标准,而且它做的更好。它定义了应用程序如何在Web上实现互操作。Web Service平台需要一套协议来实现分布式应用程序的创建。 5、依赖注入 所谓依赖注入(Dependency Injection)是指当某个角色(可能是一个Java实例,调用者)需要另外一个角色(另外一个Java 类的实例,被调用者)的协助时,在传统的程序设计过程中,通常是由调用
6、者来创建被调用者的实例。在一些轻型框架如Spring中,创建被调用者的任务不再由调用者完成,而是由Spring容器完成,然后以某种方式注入给调用者,称为依赖注入,也称为控制反转。 通过依赖注入降低了代码的耦合度,也使得资源访问变得更加容易。6、泛型 泛型(Generics)是程序设计语言的一种特性,支持泛型的程序设计语言允许程序员在编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型主要是引入了类型参数这个概念。Java EE 5通过引入泛型,使得集合元素类型参数化
7、,避免了运行时出现类型转换错误,因此不必要加入显式强制类型转换的操作了。下面的例子对此作了说明:不使用泛型时:ArrayList list = new ArrayList();list.add(0,new Integer(42);int total = (Integer)list.get(0).inValue();使用了泛型后:ArrayList list = new ArrayList();list.add(0,new Integer(42);int total = list.get(0).inValue();读者可以体会这两个例子之间的微妙差异,进而理解用反型的好处。 7、枚举枚举类型是J
8、ava EE 5开始引入的类型,本质上枚举类型就是一个命名变量的列表。枚举类型通过关键字enum来声明。下面是一个枚举的例子:public enum Week Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday对命名常量可以通过类似对象成员的方法或者通过方法values()、valueOf()、ordinal()、name()等方法进行存取操作。下面的for循环将输出枚举的所有命名常量。for(Week w:Week.values() System.out.println(w);8、增强的for循环Java EE 5中的
9、增强的for循环简化了数组和集合的遍历操作,其语法更简单,可以防止下标越界的问题出现,而且还可以避免由于强制类型转换导致的错误。下面是一个使用增强for循环对数组元素进行遍历的例子。int a = 1,2,3,4,5,6;for(int num:a) System.out.println(num); 9、函数可变参数 Java EE 5之前,方法的参数个数是固定的。Java EE 5允许创建具有可变参数的方法,这使得某些操作变得更方便了。下面的程序例子可以说明这一点。public class VarArgumentpublic static void main(String args) Sys
10、tem.out.println(add(2,3); System.out.println(add(2,3,4,5);public static int add(intargs) int sum = 0; for(int i =0;iargs.length;i+) sum += argsi; return sum;10、静态导入 在Java EE 5之前的版本中,程序中使用静态成员要在其前面加类名引导。Java EE 5引入静态导入意味着不必再写类名,而是直接通过静态成员的名字来访问它们。例如: /静态导入 import static java.lang.System.*; import sta
11、tic java.lang.Math.*; /调用静态成员 out.println(sqrt(6); /不再是Math.sqrt(6)1.2 Java EE分层架构分层架构1.2.1分层模式概述 分层模式是常见的架构模式。分层描述的是这样一种架构设计过程:从最低级别的抽象开始,称为第1层。在此基础上逐步向上进行抽象。直至达到功能的最高级别。 分层模式的特点包括:l伸缩性:伸缩性是指应用程序能支持更多用户的能力。应用的层数少,可以增加资源(如CPU、内存等)的机会就少。反之,则可以把每层分布在不同的机器上。l可维护性:指的是发生需求变化时,只需修改软件的局部,不必改动其他部分的代码。l 可扩展性
12、:可扩展性是指在现有系统增加新功能的能力。分层的结构中可扩展性较好,这是由于可以每个层中插入功能扩展点,而不改变原有的整体框架。l 可重用性:可重用性指的是同一程序代码可以满足多种需求的能力。例如,业务逻辑层可以被多种表示层共享,即业务逻辑层的代码被重用了。l 可管理性:指管理系统的难易程度。1.2.2 Java EE的结构Java EE使用多层分布式的应用模型,该模型通过四层来实现,分别为:客户层:运行在客户计算机上的组件。Web层:运行在Java EE服务器上的组件。业务层:同样是运行在Java EE服务器上的组件。企业信息系统层(EIS):是指运行在EIS服务器上的软件系统。有时我们把客
13、户层和Web层视为一个层,这样就可以将以上结构按三层来划分,如下图所示。 在这个分层体系中,客户层组件可以使基于Web方式的,也可以是基于传统方式的。Web层组件可以使JSP页面或者Servlet。 对于业务逻辑层组件,其代码是处理如银行、零售等具体行业或领域的业务需要,由运行在业务层上的Enterprise Bean进行处理。 企业信息系统层处理企业信息系统软件,包括企业基础建设系统,例如企业资源计划(ERP)、大型机事务处理、数据库系统和其他遗留系统。1.3 Java EE技术规范1JDBC(Java Database Connectivity)JDBC API为访问不同的数据库提供了一种
14、统一的机制,像ODBC一样,JDBC使操纵数据库的细节对开发者透明,另外,JDBC对数据库的访问也具有平台无关性。2JNDI(Java Name and Directory Interface)名字和目录服务,为应用提供一致的模型来访问企业级资源,如DNS和LDAP、本地文件系统或应用服务器中的对象。 3EJB(Enterprise Jav Bean) 企业Java组件,提供一个框架来描述分布式商务逻辑,开发具有可伸缩性和复杂的企业级应用。EJB规范定义了组件何时如何与它们的容器进行交互。容器负责提供公用的服务,如目录、事务管理、安全性等。需要说明的是,EJB并不是实现Java EE企业应用的
15、惟一渠道,它的意义在于它是专为分布式大型企业应用而设计,用它编写的程序具有良好的可扩展性和安全性。4RMI(Remote Method Invoke)远程方法调用,顾名思义,它用于调用远程对象的方法。它使用了序列化方式在客户端和服务器端传递数据。5Java IDL/CORBA(Java Interface Definition Language/Common Object Request Broker Architecture) Java 接口定义语言/公用对象请求代理结构。为 Java平台添加了 CORBA(Common Object Request Broker Architecture,
16、公用对象请求代理体系结构)功能,从而可提供基于标准的互操作性和连接性。 Java IDL 使分布式、支持 Web 的 Java 应用程序可利用 Object Management Group 定义的行业标准 OMG IDL(Object Management Group Interface Definition Language,对象管理组接口定义语言)及 IIOP(Internet Inter-ORB Protocol,Internet对象请求代理间协议)来透明地调用远程网络服务。运行时组件包括一个全兼容的 Java ORB,用于通过 IIOP 通讯进行分布式计算。 6JSP(Java Se
17、rver Pages) JSP页面由HTML代码和嵌入其中的Java代码组成。服务器在页面被客户端请求以后,对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。7Java Servlet Servlet是运行在服务器端的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行。Servlet提供的功能和JSP一致,只是二者的构成不同。JSP通常是HTML代码中嵌入Java代码,而Servlet全部由Java 写成并且生成HTML。8XML(eXtensible Markup Language) 扩展的标记语言,用来定义其他标记语言的语言。作为数
18、据交换和数据共享的语言,适用于很多的应用领域。9JMS(Java Message Service) Java消息服务,是Java平台上用于建立面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。 许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service等等。 使用JMS能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由
19、路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。10JTA(Java Transaction Architecture) Java事务体系结构,定义了一组标准的API,用于访问各种事务监控。11JTS(Java Transaction Service) Java 事务服务,是CORBA OTS(Object Transaction Service)事务监控的基本实现。12Java Mail 是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。它不仅支持SMTP服务器,也支持IMAP服务器。13JAF(JavaBeans Activation Framew
20、ork) JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者相反。1.4敏捷轻型框架 框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。这些组件是把不同的应用中有共性的任务抽取出来加以实现,做成程序供人使用。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。 框架的概念最早起源于Smalltalk环境,其中最著名的框架是Smalltalk 80的用户界面框架MVC(Model-View-Controller)。 框架可分为重型框架和轻型框架。一般称EJB这样的框架为重
21、型框架,因其软件架构较复杂,启动加载时间较长,系统相对昂贵,需启动应用服务器加载EJB组件。而轻型框架则不需要昂贵的设备和软件费用,且系统搭建容易,服务器启动快捷,适合于中小型企业或项目。目前,使用轻型框架开发项目非常普遍,常用的轻型框架包括Hibernate、Struts、Spring、WebWork、Tapestry、JSF等。1.4.1 轻型框架简介 1使用轻型框架的好处使用轻型框架的好处 软件技术发展至今,面临各类复杂的应用系统开发。软件系统开发任务涉及到的知识更综合、内容更丰富、问题更繁多。如何能使程序开发效率高、工作效果好,这是轻型框架设计的目的所在。框架可以完成开发中的一些基础性
22、工作,开发人员可以集中精力完成系统的业务逻辑设计。总体而言,适用轻型框架的好处有以下几方面:减少重复开发工作量、缩短开发周期、降低开发成本。使程序设计总体上更为规范、程序运行更稳定。软件开发更能适应需求变化,且运行维护费用也较低。2 目前流行的框架组合目前流行的框架组合 开发人员可以根据自己对框架的熟悉程度,在充分了解不同框架的性能,根据其满足系统功能和性能要求的前提下,自由地选择不同框架的搭配使用。下面是一些常见的框架组合。JSP+Servlet+JavaBean+JDBCStruts+MySQL+JDBCHibernate+JDBC+JSPStruts+HibernateHibernate
23、+SpringSpring+Struts+JDBCStruts+Hibernate+SpringStruts+EJBJSF+HibernateTapestry+Hibernate+SpringFreemaker+Struts+Hibernate+SpringJSP+EJB+Oracle1.4.2 Hibernate框架简介 Hibernate是一个面向Java环境的对象/关系映射工具,即ORM(Object-Relation Mapping)。它的作用是封装了JDBC的功能,即隐藏了数据访问的细节,负责Java对象的持久化。Hibernate的工作原理是通过文件把值对象和数据库表之间建立起一个
24、映射关系,这样,我们在应用程序中只需要借助Hibernate所提供的一些基本类通过操作这些值对象即可达到访问数据库的目的。这就使得Java程序员使用其所熟悉的面向对象范式进行开发。 了解了Hibernate,我们需要进一步了解JPA。前面已经介绍了JPA即Java 持久化API(Java Persistence API)。由于ORM框架产品多,且各具特点,互不相通,这就给开发者一个又一个难题,也成了应用移植的障碍。JPA是JCP组织发布的Java EE标准之一,任何符合JPA标准的框架都遵循同样的架构,提供相同的API,这就保证了基于JPA开发的企业应用经过小的修改即能够在不同的JPA框架下运
25、行。就是说,JPA是一个ORM模型和标准,而不是一个实际的框架。1.4.3 struts Struts是一种基于Java EE平台的MVC框架。它主要是用Servlet和JSP技术实现的。它使开发过程各个模块化分清晰易掌控。利用taglib获得可重用的代码;利用ActionServlet配合struts-config.xml实现对整个系统进行导航式建构,开发人员易于对系统的整体把握;用户界面、业务逻辑和控制的分离,带来系统结构更清晰,更容易分工协作,且系统具有良好的可扩展性和易维护性。 1.4.4 Spring Spring是一个应用于Java EE领域的轻量级的、功能强大的、灵活的应用程序框
26、架。可以提供快速的Java Web应用程序开发。Spring项目是个非常活跃的开源项目,因此它提供了众多优秀项目的集成,例如对MVC框架和视图技术的集成、与开源持久层ORM的集成、与动态语言的集成以及与其他企业级应用的集成。 Spring提供了一个完整的MVC框架,为模型、视图、控制器之间进行了非常清晰的划分,各部分耦合度极低。视图不再要求必须使用JSP,而可以选择Velocity、Freemaker或者其他视图技术。 Spring支持依赖注入(DI)和面向方面编程技术(AOP),更容易实现复杂的需求。支持事务管理,可以很容易地实现支持多个事务资源。支持JMS和JCA等技术,能方便地访问EJB
27、。1.4.5 JSF JSF(JavaServer Faces)是一种以组件为中心的用于构建Web应用程序的轻型框架,它主要可用于开发应用程序的用户界面。一般而言,用户界面设计是一件很费时的过程,JSF以组件为中心的结构可以极大地简化界面的设计工作。它为开发人员提供了标准的编程接口、丰富的UI组件库以及事件驱动模型等完整的应用框架,通过JSF,可以在页面中轻松地使用Web组件,捕获用户行为产生的事件,执行验证,建立页面导航等任务。 JSF的应用架构完全实现了MVC模式。用户界面代码(视图)与处理逻辑(模型)相分离,这使得JSF程序易于管理,而所有与应用程序的用户交互均由一个前端(Faces S
28、ervlet)(控制器)来处理。1.5 Java EE开发环境开发环境 1.5.1 JDK的下载和安装 JDK(Java Development Kit,Java开发工具包)是Java EE平台的应用程序的基础,利用它构建组件、开发应用程序。JDK是开源免费的工具,可以到Sun公司官网下载。网址为http:/ 例如下载jdk-6u21-windows-i586.exe文件后,可以直接双击运行该文件进行安装。按安装过程提示选择好安装路径及安装组件即可。 安装后需要设置环境变量JAVA_HOME、PATH及CLASSPATH。配置环境变量的目的是为了设置Java程序的编译和运行有关的环境信息。其中
29、JAVA_HOME设置为JDK的安装目录。PATH设置为JDK的程序(即exe文件)目录。CLASSPATH则用于设置JDK类库搜索路径。JDK目录结构为:bin目录:包含编译器、解释器和一些其他工具。lib目录:包含类库文件。demo目录:包含演示例子。include目录:包含C语言头文件,支持Java本地接口与Java虚拟机调试程序接口的本地编程技术。jre目录:包含Java虚拟机、运行时类包和应用启动器。sample目录:附带的辅助学习者学习的Java程序例子。src.zip:是源代码压缩文件。在bin目录下包含Java开发工具,其中最常用的几个如下:javac.exe:Java语言编译
30、器,将Java源代码编译转换为字节码文件(扩展名为.class),也称为类文件。java.exe:Java解释器,它启动Java虚拟机(JVM),提供Java程序运行环境。appletviewer.exe:Java小程序浏览器,提供Java小应用程序(applet)测试及运行环境。javadoc.exe:帮助文档生成器,建立关于类的信息的描述文档。jar.exe:对类进行打包的工具。1.5.2集成开发环境的安装和使用 Eclipse是IBM推出的开放源码的通用开发平台。它支持包括Java在内的多种开发语言。Eclipse采用插件机制,使一种可扩展的、可配置的集成开发环境(IDE)。 MyEcl
31、ipse本质上是Eclipse插件。其企业级开发平台(MyEclipse Enterprise Workbench)是功能强大的Java EE集成开发环境,在其上可以进行代码编写、配置、调试、发布等工作,支持HTML、JavaScript、CSS、JSF、Spring、Struts、Hibernate等开发。下面对MyEclipse的安装配置、使用方法进行概要介绍。1安装与配置安装与配置 从MyEclipse官网(http:/)下载MyElipse企业级开发平台。在列表中选择所用的平台的安装包下载,例如MyEclipse.6.0 GA版的安装包文件是MyEclipse 10.5。下载后双击该文
32、件即启动安装向导,按提示选择安装路径,其余选项可以按默认进行安装。在此过程中会自动搜索JDK进行环境配置,或者使用自带的JDK。 为了能够在MyEclipse中管理服务器,需要对其进行配置。具体配置过程如下:启动MyEclipse,选择Window中的Preferences,在弹出的窗口中选择MyEclipseServersTomcatTomcat6.x,然后进入如图1-2所示的配置窗口。选择Tomcat的安装目录,然后选择上面的Enable单选项,最后单击OK按钮完成配置。然后配置JDK路径。2使用方法使用方法启动 首次启动MyEclipse,选择【开始】【程序】MyEclipse6.0My
33、Eclipse6.0.1之后系统会弹出一个对话框,让用户来设置工作区。所谓工作区(workspace)是指用于存放源程序文件和配置文件的文件夹。选择一个文件夹设置为默认工作区之后,再次启动MyEclipse时就会直接使用该工作区并且装入其中的程序。一个工作区中可以包含同一个企业级应用的所有应用程序(application),每个应用程序对应着一个项目(project),MyEclipse正是以项目为单位管理应用程序的。用户界面MyEclipse的主界面如图1-3所示。其中包括菜单栏、工具栏、视图、编辑器和状态栏等。菜单包括File(文件)、Edit(编辑)、Source(源代码)、Refact
34、or(重构)、Navigate(导航)、Search(搜索)、Project(项目)、MyEclipse、Run(运行)、Window(窗口)和Help(帮助)。 主界面窗口划分为不同的子窗口,称为视图(View)。若干视图合为一个透视图(Perspective)。在window菜单中有多个命令与视图及透视图有关。例如:show view、open perspective、customize perspective、save perspective、close perspective等,有时候因为过多的操作改变了视图形状及大小而想要回到初始状态,则可以使用reset perspective命令
35、恢复到默认的透视图状态。应用开发在MyEclipse中进行应用开发的步骤如下。创建工作区:若非首次启动MyEclipse,则可经新建Web项目,并指定存储位置和目录,可创建一新的工作区。然后选择File|Switich Workspace命令切换到该工作区。创建项目:在默认打开的某工作区中创建新的项目,选择File|New|Project,输入项目名称,存储位置(location)勾选use default location即可。创建应用程序:选择File|New菜单中列出的常用组件(class、interface、applet、servlet、HTML、JSP)之一,进入相应的窗口,编写组件代码。编译:编写及保存的代码可进行编译。默认的编译方式为即时编译(JIT),也可以用project菜单的build project命令进行字节码编译。打包/发布应用:选择File|Export打包组件准备发布。