作者:自由的猪 制作整理:左岸网络http://www.leftworld.net |
第9章 网络客户端及组件本部分翻译:Eward Ding 当基于浏览器的网络客户端与J2EE应用程序通信时,它是通过服务方的称为网络组件的对象实现的。有两种类型的网络组件:Java Servlet 和JSP。Servlet是Java编程语言的类,它能够动态处理请求并响应。JSP页面是基于文本的能作为Servlet运行,但它能够以更自然的方式创建动态内容。尽管Servlet和JSP可以交互使用,但他们各有各的优点,Servlet适用于功能控制管理,例如,分派请求及处理非文本数据;JSP页面则适合于产生基于文本的标记语言如HTML,SVG,WMLXML。 这章描述了为网络客户端打包、配置、部署的过程,第10章及11章将讲述如何开发这些组件。许多JSP技术的特点取决于Servlet技术,因此你必须熟练那部分内容,哪怕你不打算写Servlet。 多数J2EE客户端都使用HTTP协议,支持HTTP是网络组件的主要部分。在附录A有关于HTTP协议的简单小结。 网络客户端的生命周期 网络客户端部分的服务端由网络组件组成,静态的资源文件如图像、帮助类、及库。J2EE平台提供了数多服务,如提高网络组件的能力以使程序易于开发。然而,因为考虑到这些服务,处理创建及运行网络客户端的过程不同于传统的单一的Java类。 网络组件运行在称为网络容器的环境中。网络容器提供如请求分派,安全,并发,生命周期管理的服务。它也为网络组件提供J2EE平台的API入口如:命名,事务及电子邮件。 在它运行之前,网络客户端必须打包为网络应用包(WAR),一各类似于JAR的包。 某些网络客户端的行为再它部署之后会被配置。配置信息包含在XML格式的称为网络应用部署描述符的文件。当你使用J2EE软件开发包部署工具创建网络客户及组件时,它会自动的通过部署工具输入的数据产生或更新部署描述符。你也可以根据Java Servlet规范手工创建部署符。 这个创建,部署及运行网络客户程序的过程可以总结如下: 1.开发网络组件代码; 2.打包这些网络组件及任何静态资源及组件引用的帮助类; 3.部署应用程序; 4.进入引用网络客户端的URL 开发网络组件代码在第10、11章中,步骤2到4将在下几节中展开,下面是一个Hello,world型程序,它让用户在一表单中输入名字,在提交后接着显示问候:
部署网络组件代码的部分将在后面的相关章节中介绍。 网络应用结构 网络客户端被打包到WAR,除了网络组件,一个WAR通常包含以下文件: ☆ 服务端的工具类(数据Bean,购物车等),这些类遵守JavaBean组件结构; ☆ 静态网页内容(HTML,image,sound files,etc.) ☆ 客户端类(applets和帮助类)。 网络组件及静态网页内容统称为网络资源。 一个WAR由一个特定的目录结构。WAR的顶级目录时应用程序的文档根。这个根是JSP,客户端类及包,静态网络资源的存放点。 根又包含有子目录WEB-INF,它包括以下文件及子目录: ☆ web.xml:网络应用部署符; ☆ 标签库描述文件; ☆ 类:包含服务方的类如:servlet,帮助类及JavaBean组件; ☆ 库:包含JAR库的一个目录。 你也可以在跟或WEB-INF/classes目录下创建特定应用程序的子目录 创建WAR文件 当你第一次把网络组件加到J2EE应用程序时,部署工具自动的创建了一个新的WAR文件。后面的部分描述了如何加入网络组件。 你也可以通过一下三种方式手动的创建WAR: 1、使用J2EE SDK随带的打包工具。 2、使用ant便携工具。 3、使用随J2SE一起发布的JAR工具。如果你要安排应用程序开发目录以符合WAR格式,直接创建WAR格式即可,只需简单的在顶级目录执行下面的命令: jar cvf archiveName.war 注意:要应用其中的任一方法,你必须手工创建正确格式的部署符。 将WAR文件加入到EAR文件中 如果你手工创建了一个WAR文件或者从合作者那儿获得了WAR文件,你可以通过下面的方法将它加入到一个存在的EAR文件中: 1、选择一个J2EE程序; 2、选择FileàAddàWeb WAR; 3、选择要加入的WAR文件,单击Add Web WAR. 你也可以使用打包工具将一个WAR文件加入到J2EE程序。 增加一个Web组件到WAR文件中 下面的过程描述了如何在应用程序HelloApp中创建并加入一个Web组件到WAR。尽管当你加入一个组件时,Web组件想到会提示组件级配置信息,本章将描述如何在应用程序中增加组件及提供配置信息,WAR,Web组件检查: 1、到目录j2eetutorial/examples,编译例子并运行 ant hello1。 2、创建一个名为HelloApp的应用程序。 a. 选择 File àApplication; b. 单击浏览; c. 选择j2eetutorial/examples/src/web/hello1; d. 在文件名框中输入HelloApp; e. 单击New Application f. 单击OK. 3、创建WAR文件,增加GreetingServlet Web组件及所有的HelloApp应用程序内容。 a. 通过选择FileàWeb组件使用Web组件向导; b. 在标注有Create New WAR文件的复选框中选择Hello1App.输入HelloWAR c. 单击Edit以增加内容文件 d. 在编辑对话框中,选择j2eetutorial/examples/build/web/hello1.选择GreetingServlet.class,ResponseServlet.class.及duke.waving.gif,单击Add,点击OK e. 单击Next; f. 选择Servlet单选按钮; g. 选择Next; h. 从Servlet复选框中选择GreetingServlet i. 单击Finish. 4、增加ResponseServlet Web组件 a. 通过选择FileàWeb组件调用Web组件向导; b. 在复选框标注 Add to Existing WAR File,选择HelloWAR. c. 单击Next; d. 选择Servlet单选按钮; e. 单击Next; f. 从Servlet类复选框中选择ResponseServlet; g. 单击Finish. 配置Web客户 下面部分描述了经常需要指定的Web客户配置参数。配置参数在三级需要指定:application,WAR,及组件。一些安全参数可以在WAR及组件级应用。 应用级配置 Context root Context root 是获得映射到文档根的Web客户。如果你的客户上下文的根是:catalog,那么请求URL http://<host>:8000/catalog/index.html 将从文档根处得到index.html文件。 在部署工具中为HelloApp指定上下文的根 1、选择HelloApp 2、选择Web context tab 3、在上下文根于内输入hello1. WAR级的配置 下面的部分给出了指定WAR级配置信息的一般过程。 上下文参数 WAR中的Web组件共享一个代表网络上下文的对象。指定符合上下文的初始参数。 组件及配置 初始化参数 指定符合Web组件的初始化参数, 1、选择Web组件 2、选择Init.Parameters 标签 3、单击Add以加入一个新的参数及值。 指定别名参数 当Web容器收到请求时,它必须决定哪一个Web组件来响应请求。这通过URL映射到Web组件。一个URL路径包含上下文根及别名路径: http://<host>:8000/contextroot/aliaspath 在servlet能够响应之前,Web容器必须有至少一个组件别名。别名路径必须以“/”开始,以字符串或以通配符表达式结尾(如*.jsp)。由于Web容器能自动的映射到以*.jsp结尾的别名路径,你不需要为JSP页面指定一个别名路径,除非你希望引用一个页面。 部署网络客户 在创建、打包、配置网络客户之后,下一步就是部署EAR文件。 运行网络客户 当浏览器指向一个映射到客户程序的一个组件容器的URL时网络客户就被执行。 更新网络客户 在部署期间,也许你经常需要将网络客户进行变动,通过修改servlet源文件,重新编译servlet类,更新WAR内的组件,并重新部署应用程序。 当你运行该程序时,响应就会发生变化:
国际化网络客户 国际化就是让一个应用程序支持各国语言的处理过程。本地化就是采用使国际化的应用程序支持指定的语言或本地语言。尽管客户界面都应当国际化和本地化,在网络客户中尤为重要,为了更好的了解国际化及本地化可以参看: http://java.sun.com/docs/books/tutorial/i18n/index.html 在简化的国际化程序中,字符串从包含为使用语言进行翻译的资源包中读取数据。资源包映射一个显示给用户字符串程序的键,这样,不必在代码里直接创建字符串,你创建一个资源包(包含翻译且从包中使用响应的键读取翻译)。资源包可以使文本文件或一个包含映射的类。 |