war是一个JAR文件,其内容包含: JSP页面,JavaServlet,Java classes,XML文件,标签库,静态页面以及其它组成(constitute)Web应用程序的资源。
结构特征
- 一个web.xml文件;
- 所有的JAR文件放在/WEB-INF/lib目录中;
- 所有的.class文件放在/WEB-INF/classes目录中。
- META-INF这个目录直接放在war中,与WEB-INF目录是同一级的,一般只有一个文件:MANIFEST.MF。
一般来说,需要区分的主要是两个目录,一个是WEB-INF目录,一个是根目录下除WEB-INF以外的目录。前者有访问保护,后者则可以被公开访问。
应用上下文(application context)
每一个war文件都有一个应用上下文,这个上下文就是一个相对于应用服务器完全限定域名(full qualified domain name)的保留命名空间(reservednamespace)。这个命名空间的名字默认是war包的文件名。
比如你的服务器的完全限定域名是:http://localhost:8080/,而你的war文件的名字是webapp.war,那么访问这个war包中的文件,就需要使用如下方式: http://localhost:8080/webapp
web.xml
web.xml用来定义web应用程序的结构。如果只有JSP页面,web.xml甚至可以没有。
如果有servlet,则需要在web.xml中配置一个URL将导向哪一个servlet。同时,也可以在web.xml文件中配置上下文变量供servlet使用。
优/缺点
优点:
- 易于开发,测试和部署;
- 发布的版本易于识别;
- 所有的J2EE容器都支持WAR文件。
缺点:
- 任何细微的改动都需要重新生成和部署整个war文件。
JBoss
在jboss中,默认有一个ROOT.war。我们可以删除ROOT.war文件,而使用自己的war包作为上下文根(context root)。在JBOSS中有两种方式来使用自己的context root:
- 用自己的内容替换ROOT.war文件中的内容;
- 直接删除ROOT.war文件,在自己war包的WEB-INF目录中添加jboss-web.xml文件:
<?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包来处理。