war是一个JAR文件,其内容包含: JSP页面,JavaServlet,Java classes,XML文件,标签库,静态页面以及其它组成(constitute)Web应用程序的资源。
一般来说,需要区分的主要是两个目录,一个是WEB-INF目录,一个是根目录下除WEB-INF以外的目录。前者有访问保护,后者则可以被公开访问。
每一个war文件都有一个应用上下文,这个上下文就是一个相对于应用服务器完全限定域名(full qualified domain name)的保留命名空间(reservednamespace)。这个命名空间的名字默认是war包的文件名。
比如你的服务器的完全限定域名是:http://localhost:8080/,而你的war文件的名字是webapp.war,那么访问这个war包中的文件,就需要使用如下方式: http://localhost:8080/webapp
web.xml用来定义web应用程序的结构。如果只有JSP页面,web.xml甚至可以没有。
如果有servlet,则需要在web.xml中配置一个URL将导向哪一个servlet。同时,也可以在web.xml文件中配置上下文变量供servlet使用。
优点:
易于开发,测试和部署;发布的版本易于识别;所有的J2EE容器都支持WAR文件。缺点:
任何细微的改动都需要重新生成和部署整个war文件。在jboss中,默认有一个ROOT.war。我们可以删除ROOT.war文件,而使用自己的war包作为上下文根(context root)。在JBOSS中有两种方式来使用自己的context root:
用自己的内容替换ROOT.war文件中的内容;直接删除ROOT.war文件,在自己war包的WEB-INF目录中添加jboss-web.xml文件: [html] view plain copy <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.3//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_3_0.dtd"> <jboss-web> <context-root>/</context-root> </jboss-web> jboss-web.xml中的context-root元素会告诉jboss,把war文件中的内容加载到应用服务器的根上下文中,所以像 http://localhost:8080/这个请求,将会由你的war包来处理。