方法一
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\webapps\em" reloadable="true"></Context>
</Host>
修改server.xml配置文件,在conf文件夹下。这里在Host标签下新增Context标签,docBase为项目路径,docBase为你war包的路径,其中em为war包名称。
这样配置后,会导致项目进行两次部署。
原因是appBase默认为webapps,即对webapps目录下的war包进行一次部署,docBase也有着相同的效果,war包会再进行一次部署。
方法二
<Host name="localhost" appBase="" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\webapps\em" reloadable="true"></Context>
</Host>
修改server.xml配置文件。配置如上,将appBase置为空,这样就只有内层一次部署了。但这样配置有一个缺陷,就是war包不会自动解压。因此我们之后无法在webapps文件夹下修改已经解压好的war包,或者我们直接上传解压好的war包。
编辑:后经测试发现,再tomcat的根目录下新建了一个名为ROOT的文件夹,内容是解压后的war包文件。因此可以理解为appBase指定的是解压文件的路径,这里置为空的话默认就解压到根目录了。所以我们尽量不要使用这种方法,解压后的文件夹最好应在webapps下,方便管理。
方法三
方法二中的缺陷如何解决呢,这里我们还有一种暴力方法。
ROOT文件夹是tomcat默认的根目录,用来测试tomcat是否安装部署成功,也就是访问localhost:端口号时候会出来一只猫的页面。因此在生产环境上是没什么作用的。
所以这里可以直接把之前的ROOT文件夹干掉,把自己的包命名为ROOT.war。可自动解压,包名前缀会去掉。
方法四
上一种方法太不优雅了,这里介绍另一种方法。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\myapps\em.war" reloadable="true"></Context>
</Host>
同样是修改server.xml配置文件。
这里注意以下几点:
1.appBase为webapps,即我们解压后的文件会到这个目录下。
2.Context标签中的path为空
3.Context标签中的docBase,注意下路径不要在webapps文件夹下,这里我们新建了一个文件夹myapps,em.war,是我们项目的war包名称。
4.需要将webapps文件夹下原ROOT文件夹删除,因为我们这样做解压后的文件夹名为ROOT,如果原来已经有ROOT则不会发生解压操作。
方法五
方法四可以有另一种实现,即server.xml配置文件不做修改。
在“conf/Catalina/localhost”文件夹下新增一个xml文件,名为ROOT.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\myapps\em.war"></Context>
与上一个方法一样,需要先将webapps文件夹下的ROOT文件夹删除,否则不会正确解压。
总结
综上所述,还是应该采取方法三、四、五中的一种。
方法一会进行两次部署肯定是不可以的,会大大增加启动tomcat的速度。
方法二中无法显示解压后的文件夹,肯定也是不对的。因为使用tomcat肯定是为了可以很方便的动态替换部分文件,压缩的war包是无法实现这个效果的。
因此,在后三种方法,选择一种最适合自己的方法吧!!