MyEclipse6Java开发中文教程 另外,EJB的客户端文件,也是」jar格式的。 16132WAR文件 WAR,就是 Web archive的缩写(Web档案)。在8.2Web项目和术语一节,我们已 经简述了Web项目的结构,而WAR就是将所有的文件按照规定的目录结构打包成ZP文件后 所得到的压缩包,其结构如图1611所示。每个WAR文件包含一个Web模块。例如我们可 以随时将 Tomcat下的 webapps文件夹下的任意一个文件夹压缩成WAR格式,需要注意的是 不要在WAR里面加入一层目录,例如图1612显示了两个将 Tomcat的ROOT应用打包后所 形成的WAR文件,左侧的是正确的打包方式,而右侧的则是错误的。有的服务器只支持WAR 方式的Web应用。一般来说访问的应用路径和war文件的名字相对应,例如awa对应访问 地址为http://localhost:8080lal Assembl Root WEB-INF JSP pages, static HTML pages, applet classes, etc. classes tag web. xml sun-web xm tld Library All server-side All tag files archive files class files for for this this web module web module 图16.11WAR文件格式 关于WAR文件的制作,绝大多数开发工具都支持(大名鼎鼎的 Eclipse无插件版本除 外, Eclipse33的 Java ee版本里面支持),最简便的当属是用JDK的jar命令或者 WinziP, WinRAR等软件直接添加目录内容为文件,例如下面的是将 Tomcat的 webapps下面的 ROOT目录打包为 ROOTwar时所用的命令(执行命令的目录在 TOMCAT安装目录 刘长炯著
MyEclipse 6 Java 开发中文教程 16 刘长炯著 另外,EJB 的客户端文件,也是 jar 格式的。 16.1.3.2 WAR 文件 WAR,就是Web ARchive的缩写(Web档案)。在 8.2 Web 项目和术语一节,我们已 经简述了Web项目的结构,而WAR就是将所有的文件按照规定的目录结构打包成ZIP文件后 所得到的压缩包,其结构如图 16.11 所示。每个WAR文件包含一个Web模块。例如我们可 以随时将Tomcat下的webapps文件夹下的任意一个文件夹压缩成WAR格式,需要注意的是, 不要在WAR里面加入一层目录,例如图 16.12 显示了两个将Tomcat的ROOT应用打包后所 形成的WAR文件,左侧的是正确的打包方式,而右侧的则是错误的。有的服务器只支持WAR 方式的Web应用。一般来说访问的应用路径和war文件的名字相对应,例如a.war对应访问 地址为 http://localhost:8080/a/。 图 16.11 WAR 文件格式 关于 WAR 文件的制作,绝大多数开发工具都支持(大名鼎鼎的 Eclipse 无插件版本除 外,Eclipse 3.3 的 Java EE 版本里面支持),最简便的当属是用 JDK 的 jar 命令或者 WinZIP, WinRAR 等软件直接添加目录内容为文件,例如下面的是将 Tomcat 的 webapps 下面的 ROOT 目录打包为 ROOT.war 时所用的命令(执行命令的目录在 TOMCAT 安装目录
MyEclipse6Java开发中文教程 webapps下) jar cfv ROOT.war-℃ROOT 名字 DROOTwar 名字 冒EB-工NF Admin GWEB-INF □WEB-IF OWEB-INF Oasf-logo-wide.gif Pasf-logo-wide.gif Tomcat"power.gif tomcat"power.gif f index. html index. html 图1612打包的WAR文件(左侧为正确格式) 至于 MyEclipse,则提供了导出WAR的向导,非常简单的内容,在16131节,我 们执行命令Fie> Export时,已经可以在图65中看到此向导,点击Next后进入如图1613 所示的设置界面非常简单,就需要设置一个WAR文件名字。在这里我们打包的是 HelloS 这个小项目,点击 Finish按钮后即可完成打包过程。 WAR Export 回囟 WAR Export Exp ort J2EE web project resources as WAR file to local file system Select the J2EE web project to export: EHelloJSP WAR file: E: \workspace \HelloJSP\HelloJSP,war 〈 Back Hext>[ Finish C Cancel 图1613 MyEclipse中的打包WAR文件向导 同样的,WAR文件是 Java EE规范所固定的文件发布格式。支持自动发布的服务器需 要将其放入指定目录即可,而手工的则需要通过控制台等方式进行发布。散包发布,即按照 目录结构放好,则一般是开发的时候所采用的发布方式。 16133EAR文件 个 Java ee应用通常以 Enterprise Archive(EAR)文件的格式发布,内容是一个标 准的 Java archive(JAR)文件,后缀为ear,其实就是ZP格式。每个EAR里面又可以包含 其它的一个或者多个独立模块例如JAR,WAR,RAR等等,构成一个完整的企业应用模块 每个EAR文件(参考图16.14),都包括了 Java ee模块以及发布描述符。发布描述符是 XML文件,描述了应用的设置,或者单个模块或组件的设置。由于发布描述符是用声明方 刘长炯著
MyEclipse 6 Java 开发中文教程 17 刘长炯著 \webapps 下): jar cfv ROOT.war -C ROOT . 。 图 16.12 打包的 WAR 文件(左侧为正确格式) 至于 MyEclipse,则提供了导出 WAR 的向导,非常简单的内容,在 16.1.3.1 一节,我 们执行命令File > Export时,已经可以在图16.5中看到此向导,点击Next后进入如图16.13 所示的设置界面非常简单,就需要设置一个 WAR 文件名字。在这里我们打包的是 HelloJSP 这个小项目,点击 Finish 按钮后即可完成打包过程。 图 16.13 MyEclipse 中的打包 WAR 文件向导 同样的,WAR 文件是 Java EE 规范所固定的文件发布格式。支持自动发布的服务器需 要将其放入指定目录即可,而手工的则需要通过控制台等方式进行发布。散包发布,即按照 目录结构放好,则一般是开发的时候所采用的发布方式。 16.1.3.3 EAR 文件 一个 Java EE 应用通常以 Enterprise Archive (EAR) 文件的格式发布,内容是一个标 准的 Java Archive(JAR)文件,后缀为.ear,其实就是 ZIP 格式。每个 EAR 里面又可以包含 其它的一个或者多个独立模块例如 JAR,WAR,RAR 等等,构成一个完整的企业应用模块。 每个 EAR 文件 (参考图 16.14) ,都包括了 Java EE 模块以及发布描述符。发布描述符是 XML 文件,描述了应用的设置,或者单个模块或组件的设置。由于发布描述符是用声明方
MyEclipse6Java开发中文教程 式编写的,因此它可以在不需要修改源代码的方式下进行修改。运行的时候, Java ee服务 器阅读发布描述符并进行必要的配置和操作。 Assembly Root EJB META-INF e Module Application Resource Client Module Adapter Module application. xml un-application. xml 图1614EAR文件结构 发布描述符有两种: Java ee标准的和运行时描述符。 Java ee发布描述符通过 Java ee规 范来规定,并且可以在任何 Java ee兼容的服务器实现上进行设置。运行时描述符一般被 成为厂商特定描述符,这个是各个公司互不兼容的,甚至同一个公司的不同版本的之间也是 互不通用的,它配置了运行的时候服务器的特定配置信息,是不可迁移的,需要开发人员根 据不同的服务器版本进行配置。例如上图中的sun-开头的文件,都是Sn的服务器 Sun Java System Application Server PlatformEdition9里面的特定描述文件,而 JBoss的文件名有和 它不一样,内容也不同 个EAR包的内容可能如下 App EAR ql. jal /myconnectorrar 而其中的每个子文件又可以根据规范有自己的目录结构,层层嵌套。不过,一个EAR里 面不能嵌套另一个EAR。 有四种 Java ee模块 ■EJB模块,包含了企业bean的类文件和EJB发布描述符。通常用JAR格式打包,文 件后缀为jar ■Web模块,包含了 servlet类文件,JSP文件以及附带的用户类文件,图片和静态HTML 页面,以及web应用的发布描述符。其后缀一般是war( leb archive) ■应用程序客户端模块,包括了类文件和应用程序客户端发布描述符。通常以jar后缀打 包。不过实用中这种模块很少见到,因为它其实是单独的访问EJB的客户端Java类 ■资源适配器( Resource Adapter)模块,包括了Java接口,类和本地类库,以及文档 和资源适配器发布文档。这些内容完整的实现了 Connector architecture(连接器)规范,通 常用于和老系统中的模块进行集成,将遗留系统整合进 Java ee服务器中。打包内容也是 刘长炯著
MyEclipse 6 Java 开发中文教程 18 刘长炯著 式编写的,因此它可以在不需要修改源代码的方式下进行修改。运行的时候,Java EE 服务 器阅读发布描述符并进行必要的配置和操作。 图 16.14 EAR 文件结构 发布描述符有两种: Java EE 标准的和运行时描述符。Java EE 发布描述符通过 Java EE 规 范来规定,并且可以在任何 Java EE 兼容的服务器实现上进行设置。运行时描述符一般被 成为厂商特定描述符,这个是各个公司互不兼容的,甚至同一个公司的不同版本的之间也是 互不通用的,它配置了运行的时候服务器的特定配置信息,是不可迁移的,需要开发人员根 据不同的服务器版本进行配置。例如上图中的 sun-开头的文件,都是 Sun 的服务器 Sun Java System Application Server PlatformEdition 9 里面的特定描述文件,而 JBoss 的文件名有和 它不一样,内容也不同。 一个 EAR 包的内容可能如下所示: MyApp.EAR /myweb.war /myejb.jar /lib/mysql.jar /myconnector.rar ,而其中的每个子文件又可以根据规范有自己的目录结构,层层嵌套。不过,一个 EAR 里 面不能嵌套另一个 EAR。 有四种 Java EE 模块: ■ EJB 模块,包含了企业 bean 的类文件和 EJB 发布描述符。通常用 JAR 格式打包,文 件后缀为.jar。 ■ Web 模块,包含了 servlet 类文件,JSP 文件以及附带的用户类文件,图片和静态 HTML 页面,以及 web 应用的发布描述符。其后缀一般是 .war (Web ARchive)。 ■ 应用程序客户端模块,包括了类文件和应用程序客户端发布描述符。通常以.jar 后缀打 包。不过实用中这种模块很少见到,因为它其实是单独的访问 EJB 的客户端 Java 类。 ■ 资源适配器(Resource Adapter)模块,包括了 Java 接口,类和本地类库,以及文档, 和资源适配器发布文档。这些内容完整的实现了 Connector Architecture (连接器)规范,通 常用于和老系统中的模块进行集成,将遗留系统整合进 Java EE 服务器中。打包内容也是
MyEclipse6Java开发中文教程 JAR格式,文件后缀是rar( resource adapter archive,资源适配器档案)。注意这个RAR 和 WinRAR的不是同一种格式,千万不可混用。图1615列出了RAR文件的格式。 Assembly Root META-INF All class/jar Native libraries files for this ( dll or so files) connector module ra. xm sun-ra. xml 图1615资源 文件格式 1614 Java ee开发中的角色划分 按照 Java ee的规范,整个 Java ee的开发分成了好几种角色,不过在实际开发中很 可能好多角色是重复的 Java ee product Provider Java ee产品提供者一般都是商业性的大公司或者是像 Apache这样的开源机构,例如 BEA,IBM,唫金蝶, Redhat等等,他们开发了服务器软件,一般商业服务器都以高价出售, 国外的公司多从事这方面的工作。这些服务器软件都需要兼容 Java ee规范,这样不管是 哪个公司的产品,只要开发人员按照规范编写了程序,都可以运行。举个最简单的例子,为 什么同样一个JSP页面放到不同的服务器上都能运行并得到同样的输出呢?这是因为他们 符合了 Servlet规范,所以基于 Spring的开发并非不需要 Java ee的容器技术,只不过只 是用到了Web层而已。 Tool Provider 工具提供者提供开发工具,可以是公司或者个人,也就是像 MyEclipse, JBuilder这样的软 件,可以被组件开发人员或组装人员和发布人员使用。其实大部分服务器自身都带有一些这 样的工具,例如可以发布或者删除应用 Application Component Provider 应用程序组件提供者是一些公司或者个人,它们创建可以用于 Java ee应用的组件,包括 Web组件,EJB, Applets或者应用程序客户端 下面还有很多内容,按照理论是可以划分成很多的。我们还是根据实际情况来做个介绍 刘长炯著
MyEclipse 6 Java 开发中文教程 19 刘长炯著 JAR 格式,文件后缀是.rar (resource adapter archive,资源适配器档案)。注意这个 RAR 和 WinRAR 的不是同一种格式,千万不可混用。图 16.15 列出了 RAR 文件的格式。 图 16.15 资源适配器文件格式 16.1.4 Java EE 开发中的角色划分 按照 Java EE 的规范,整个 Java EE 的开发分成了好几种角色,不过在实际开发中很 可能好多角色是重复的。 Java EE Product Provider Java EE 产品提供者一般都是商业性的大公司或者是像 Apache 这样的开源机构,例如 BEA,IBM,金蝶,RedHat 等等,他们开发了服务器软件,一般商业服务器都以高价出售, 国外的公司多从事这方面的工作。这些服务器软件都需要兼容 Java EE 规范,这样不管是 哪个公司的产品,只要开发人员按照规范编写了程序,都可以运行。举个最简单的例子,为 什么同样一个 JSP 页面放到不同的服务器上都能运行并得到同样的输出呢?这是因为他们 符合了 Servlet 规范,所以基于 Spring 的开发并非不需要 Java EE 的容器技术,只不过只 是用到了 Web 层而已。 Tool Provider 工具提供者提供开发工具,可以是公司或者个人,也就是像 MyEclipse,JBuilder 这样的软 件,可以被组件开发人员或组装人员和发布人员使用。其实大部分服务器自身都带有一些这 样的工具,例如可以发布或者删除应用。 Application Component Provider 应用程序组件提供者是一些公司或者个人,它们创建可以用于 Java EE 应用的组件,包括 web 组件,EJB,Applets 或者应用程序客户端。 下面还有很多内容,按照理论是可以划分成很多的。我们还是根据实际情况来做个介绍
MyEclipse6Jaa开发中文教程 吧,例如我们购买了BEA的 WebLogic服务器,那么BEA就是 Java ee产品提供者;如 果你下载了 Tomcat,那么 Apache也是 Java ee产品提供者。之后你开发了个JSP的应用, 那么你就是应用程序组件提供者。你把它打包成了war文件,那么你就是应用程序组装者 般的公司测试服务器和上线的生产服务器( Production)是分开的,服务器有专人管理 那么他就是服务器管理员,普通开发人员不能随便发布程序到生产机。如果再加上有专人负 责发布程序并观察结果,那么此人就是应用程序发布者。一般情况下,服务器管理员和发布 者是同一组的,他们通常还要负责管理多台服务器集群,定时重启,调优性能等等,有一个 专门的职业就是服务器管理员(和网管差不多,不过工作重点主要集中在服务器上)。也许 有人奇怪了,为啥服务器还要重启呢?那是因为随着服务器上的程序越来越多,一般都会不 堪重负,Java的垃圾回收并非100%的,随着时间增长服务器进程所占内存越来越多,当 到达一个极限后,服务器就崩溃了,换句话就是叫宕机了(常说的服务器挂了),所以需要 定时重启。 1615 Java Bean和EJB的区别 Java bean是可复用的组件,对 Java bean并没有严格的规范,理论上讲,任何一个 Java类都可以是一个Bean(例如 Spring中就是这样,所有的类都可以配置为bean)。但 通常情况下,由于 Java bean是被容器所创建(如 Tomcat)的,所以 Java bean应具有 个无参的构造器,另外,通常 Java bean还要实现 Serializable接口用于实现Bean的持久 性。 Java bean实际上相当于微软cOM模型中的本地进程内COM组件,它是不能被跨进 程访问的。 Enterprise Java Bean相当于DCOM,即分布式组件。它是基于Java的远程方 法调用(RM)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布 署在诸如 Webspere、 WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件, 而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户 通过容器来访问真正的EJB组件 1616EJB和 Spring能否共存 答案是肯定的,由于 Spring容器本身就是普通的 JavaBean,所以它可以集成到EJB 中来使用。而且由于 Spring本身不提供分布式和集群服务,所以 Spring+EJB有时候是 个非常好的解决方案。而且Spng本身也对客户端访问EJB提供了很好的支持。 162系统需求 本章内容需要 JBoss服务器, MyEclipse6以及 MySQL或者 Derby数据库即可。 163准备工作 1631 My Eclipse对EJB提供的开发支持 坦白说 MyEclipse对EJB的开发不是太好,它对EJB21的开发是通过 XDoclet的方 式进行的,而 JBuilder2006中有EJB设计器,可以可视化的生成和修改EJB。而它对EJB 刘长炯著
MyEclipse 6 Java 开发中文教程 20 刘长炯著 吧,例如我们购买了 BEA 的 WebLogic 服务器,那么 BEA 就是 Java EE 产品提供者;如 果你下载了 Tomcat,那么 Apache 也是 Java EE 产品提供者。之后你开发了个 JSP 的应用, 那么你就是应用程序组件提供者。你把它打包成了.war 文件,那么你就是应用程序组装者。 一般的公司测试服务器和上线的生产服务器(Production)是分开的,服务器有专人管理, 那么他就是服务器管理员,普通开发人员不能随便发布程序到生产机。如果再加上有专人负 责发布程序并观察结果,那么此人就是应用程序发布者。一般情况下,服务器管理员和发布 者是同一组的,他们通常还要负责管理多台服务器集群,定时重启,调优性能等等,有一个 专门的职业就是服务器管理员(和网管差不多,不过工作重点主要集中在服务器上)。也许 有人奇怪了,为啥服务器还要重启呢?那是因为随着服务器上的程序越来越多,一般都会不 堪重负,Java 的垃圾回收并非 100%的,随着时间增长服务器进程所占内存越来越多,当 到达一个极限后,服务器就崩溃了,换句话就是叫宕机了(常说的服务器挂了),所以需要 定时重启。 16.1.5 JavaBean 和 EJB 的区别 Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean(例如 Spring 中就是这样,所有的类都可以配置为 bean)。但 通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat)的,所以 Java Bean 应具有一 个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久 性。Java Bean 实际上相当于微软 COM 模型中的本地进程内 COM 组件,它是不能被跨进 程访问的。Enterprise Java Bean 相当于 DCOM,即分布式组件。它是基于 Java 的远程方 法调用(RMI)技术的,所以 EJB 可以被远程访问(跨进程、跨计算机)。但 EJB 必须被布 署在诸如 Webspere、WebLogic 这样的容器中,EJB 客户从不直接访问真正的 EJB 组件, 而是通过其容器访问。EJB 容器是 EJB 组件的代理,EJB 组件由容器所创建和管理。客户 通过容器来访问真正的 EJB 组件。 16.1.6 EJB 和 Spring 能否共存 答案是肯定的,由于 Spring 容器本身就是普通的 JavaBean,所以它可以集成到 EJB 中来使用。而且由于 Spring 本身不提供分布式和集群服务,所以 Spring+EJB 有时候是一 个非常好的解决方案。而且 Spring 本身也对客户端访问 EJB 提供了很好的支持。 16.2 系统需求 本章内容需要 JBoss 服务器,MyEclipse 6 以及 MySQL 或者 Derby 数据库即可。 16.3 准备工作 16.3.1 MyEclipse 对 EJB 提供的开发支持 坦白说 MyEclipse 对 EJB 的开发不是太好,它对 EJB 2.1 的开发是通过 XDoclet 的方 式进行的,而 JBuilder 2006 中有 EJB 设计器,可以可视化的生成和修改 EJB。而它对 EJB