1、部署描述文件
部署描述文件(deployment descriptors)描述部署单位内容并相对于应用环境配置组件和应用程序。同时对它们与组件之间的关系做出了一定的处理,从而可以在无需编程的情况下对这些关系加以管理。部署工具通常会自动生成部署描述文件,所以开发人员不必直接编辑和管理它们。
通常部署描述文件有四种类型,每种对应于一个类型部署单位:
*EJB部署描述文件;
*Web层部署描述文件;
*应用客户部署描述文件;
*资源适配器部署描述文件。
各种部署描述文件的定义都可以在相应的XML文档类型定义(document type definition)中找到。部署描述文件包含由组件容器使用的信息及组件通过JNDI访问的信息。
有关EJB部署、应用客户部署及资源适配器部署请读者参考有关J2EE资料,在此就不多说了,下面我们讨论一下Web层部署内容。
2、Web程序部署
Web程序的部署主要包括将Web程序以标准格式打包和将Web程序放入Web服务器中运行两步。Web程序的部署描述文件(deployment descriptor)建立了Web程序和Web程序服务器之间的信息交流。一个部署描述文件采用符合特定标准的格式来描述一个Web程序内的构件(如 servlet,filter,listener,JSP等)和使用方式(如安全机制、错误处理方法等)。当Web程序服务器启动并加载一个Web程序时,它会根据其部署描述文件设置其运行状态并初始化Web构件。
1)web.xml文件的格式
由于Web程序开发中各种人员有不同分工,而Web程序的部署描述文件是程序构件提供者、程序组装者和程序部署者之间的沟通机制;Servlet 2.4之前的版本规定了在Web服务器中使用DTD格式的web.xml,而Servlet 2.4将依照XML schema格式定义web.xml;实际上这两种格式的web.xml只是在头部有区别,其内容都是描述Web程序的部署信息。在web.xml中出现的部署元素主要包含以下信息:
*ServletContext的初始化变量(Init Parameters);
*交互会话(Session)的设置;
*Servlet的声明定义;
*Servlet和网址URL的映射(Mapping);
*应用程序生命周期的监听器(Application Lifecycle Listener);
*过滤器声明;
*过滤器和网址URL或Servlet/JSP的映射;
*MIME类型;
*欢迎文件(Welcome File);
*错误网页(Error Pages);
*安全设置信息;
*taglib配置;
*JNDI对象(env-entry,ejb-ref,ejb-local-ref,resource-ref,resource-env-ref)。
其中taglib配置与JNDI对象这两项是支持J2EE的Web服务器必须要求的。对于不支持J2EE的servlet/JSP服务器,不需要这两项;在web.xml中的元素需要按照规定的大小写和顺序出现。
2)Web程序结构和部署方式
在设置了部署描述文件后,需要对Web程序进行编译和打包,一个Web程序需要依照标准的目录和文件格式组织其内容。例如在Tomcat 5.0中的目录和文件格式,其中WEB-INF目录中有web.xml部署描述文件和包括该Web程序Java类的classes目录。在Web服务器中部署Web程序的方式有两种:一种是直接将依照标准格式的Web程序的整个目录编译后放入Web服务器的webapps目录,这样Web服务器启动时会自动加载Web程序;另一种是将Web程序编译并打包生成一个war文件,然后放入Web服务器的webapps目录。Web服务器可以选择不需解压直接加载这个Web程序的war文件,或者将这个war文件解压到一个目录后加载。在/conf/server.xml中可以设定选择何种加载方式。如果 <Host>标记的unpackWARs="flase",表明Web服务器不需要将war文件解压成目录;如果unpackWARs= "true",表明Web服务器会在第一次加载Web程序时将该war文件解压成一个目录。
<Host name="localhost" appBase="webapps" debug="0" unpackWARs="false">
第二种方式的优点是增强了Web程序的可移植性,一个war文件可以在不同的符合标准的Web服务器中运行而且文件比较小;当需要将Web程序给予其他人员时,给对方一个war文件当然比给一个目录方便;但是生成war文件需要将一个Web程序的目录进行压缩,在调试过程中,如果编程者需要经常对程序的某些部分进行改动,使用第一种方式就比较方便。每次需要改动时就在webapps的Web程序目录中用改动的文件替代旧的文件,而不用每次打包生成war文件。
3)使用编程工具编译和打包
一个war文件就是有特定格式(如WEB-INF目录)的 jar文件,它将一个Web程序的所有内容进行压缩。在生成war文件之前,所有WEB-INF/classes目录下面的servlet,filter 等类需要首先被成功编译,最基本的方法是直接使用javac命令编译所有的类。需要注意的是classpath环境变量要包括最新的servlet和 JSP的jar,为了简单高效地编译Web程序并进行打包,可以使用提供Web程序管理功能的开发工具(IDE),比如Sun的Forte for Java IDE提供非常方便的Web程序开发环境,它可以统一管理程序的classpath和Java文档,用来编写大型的J2EE程序非常方便。可以使用Web 服务器的deploytool打包,比如sun的JWSDP1.0就提供了一个图形界面的deploytool;也可以使用Apache软件组织开发的 Ant(蚂蚁)工具进行编译和打包,完成Web程序部署。
参考资料:
《Java 2 参考大全》 Herbert Schildt 清华大学出版社
《Java 2 应用开发指南》 飞思科技产品研发中心 电子工业出版社
《21天学通J2EE》 Martin Bond 人民邮电出版社
作者:务实,多年从事J2EE网站及应用系统项目的开发和应用。
