war文件的生成

转自:https://blog.csdn.net/wk843620202/article/details/9179923


其实war文件就是Java中web应用程序的打包。借用一个老兄的话,“当你一个web应用程序很多的时候,如果你想把它部署到别的机器上,来回拷这些文件是件挺郁闷的事情,如果要是一个文件就好了。。。那么war文件就可以满足你这个小小的要求”。
 

那有人会说,这和直接打成rar文件不一样吗?区别大了!
 

如果你直接打成rar文件,你得手动的去解压缩,但是war文件不需要,你把它放到tomcat的webapp目录下,就可以直接运行了,我觉得这个功能够强大,哈哈。

在tomcat安装目录下的conf目录下有个server.xml,搜索“unpackWARs”关键字,你会看到在<Host>标签中会有对其的设置,如果设置成true,那么tomcat在启动的时候,会在webapps目录下自动解压你那个war文件;如果设置成false,则tomcat直接访问war文件。

假如他的值是true,你的tomcat已经启动了,你把自动解压的文件夹删了,tomcat又会自动解压,我觉得它是实时的在检查,一旦没有,就会解压。
 

如何生成war文件呢:


1
jar -cvf blog.war *

查看war文件的方式:


1
jar -tf blog.war

 

如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,我们可以将Web应用程序打包成Web归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。

一个WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个.war扩展名。下面我们将第2章的Web应用程序打包成WAR文件,然后发布。WAR文件的创建与JAR文件的创建使用相同的命令。

打开命令提示符,进入%CATALINA_HOME%\webapps\ch02\目录,执行下面的命令:

jar -cvf ch02.war *

这个命令将ch02目录下所有的子目录和文件都打包成一个名为ch02.war的归档文件。如果不想包含src目录及其下的Java源文件(在发布时不应该把Java源文件包含到WAR文件中),可以执行下面的命令:

jar -cvf ch02.war *.html WEB-INF/

要查看WAR文件的内容,可以执行下面的命令:

jar -tf ch02.war

这个命令将列出WAR文件的内容,或者用WinRAR工具软件查看ch02.war文件的内容,如图3-2所示。

图3-2 使用WinRAR查看ch02.war文件

如果修改了某个Servlet类文件,需要替换WAR文件中的旧文件,可以执行下面的命令:

jar -uf ch02.war WEB-INF/classes/org/sunxin/ch02/servlet/LoginServlet. class

当然你也可以利用WinRAR软件来更新压缩包中的文件。

如果我们将ch02.war文件放到%CATALINA_HOME%\webapps目录下,在Tomcat启动时,会自动解压这个WAR文件,按照打包前的目录层次结构生成与WAR文件的文件名同名的目录ch02及下面的子目录和文件。读者可以自己动手做一下实验,先删除在%CATALINA_HOME%\webapps目录下的ch02目录,然后将ch02.war文件复制到%CATALINA_HOME%\webapps目录下,启动Tomcat,你会看到在webapps目录下新产生了一个ch02目录。

当然,我们也可以直接从WAR文件运行Web应用程序,打开%CATALINA_ HOME%\conf\server. xml文件,找到<Host>元素的配置处,如下所示:

<Host name="localhost" appBase="webapps"

          unpackWARs="true" autoDeploy="true"

          xmlValidation="false" xmlNamespaceAware="false">

将unpackWARs属性的值设置为false,这样,Tomcat将直接运行WAR文件。关于<Host>元素各属性的含义,请参看附录C或Tomcat的文档。

删除Tomcat产生的目录ch02,重新启动Tomcat,查看%CATALINA_HOME%\webapps目录,可以看到这次没有产生ch02目录,打开浏览器,输入以前访问过的URL进行测试。

在建立WAR文件之前,需要建立正确的Web应用程序的目录层次结构。

— 建立WEB-INF子目录,并在该目录下建立classes与lib两个子目录。

— 将Servlet类文件放到WEB-INF\classes目录下,将Web应用程序所使用Java类库文件(即JAR文件)放到WEB-INF\lib目录下。

— 建立web.xml文件,放到WEB-INF目录下。

— 根据Web应用程序的需求,将JSP页面或静态HTML页面放到上下文根路径下或其子目录下。

— 如果有需要,建立META-INF目录,并在该目录下建立context.xml文件。

只有在确保这些工作后都完成后,才开始建立WAR文件。

要注意的是,虽然WAR文件和JAR文件的文件格式是一样的,并且都是使用jar命令来创建,但就其应用来说,WAR文件和JAR文件是有根本区别的。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。

我们什么时候应该使用WAR文件呢?在开发阶段不适合使用WAR文件,因为在开发阶段,经常需要添加或删除Web应用程序的内容,更新Servlet类文件,而每一次改动后,重新建立WAR文件将是一件浪费时间的事情。在产品发布阶段,使用WAR文件是比较合适的,因为在这个时候,几乎不需要再做什么改动了。

在开发阶段,我们通常将Servlet源文件放到Web应用程序目录的src子目录下,以便和Web资源文件区分。在建立WAR文件时,只需要将src目录从Web应用程序目录中移走,就可以打包了。


阅读更多
上一篇tomcat 配置详解
下一篇jsp中的指令和动作
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭