文章目录
- 1 打war包
- 1.1 编辑工具打war包
- 1.2 DOS命令打war包
- 2 部署到Tomcat服务器
- 2.1 静态部署
- 2.2 动态部署
- 2.3 tomcat部署多应用
- 2.4 补充
1 打war包
我们知道Java
项目打war
包可以在Eclipse
和MyEclipse
工具中自动打包,就是右键,然后导出war
包就可以了,可是发现我的一个项目打war
包的过程中遇到点小麻烦,导出的war
包打开之后,里面少了很多东西,明显有问题。那怎么办呢,网上搜了许多偏方都没效果,请教同事,大家也没遇到过这种状况。
1.1 编辑工具打war包
附,eclipse导出war包方法:
首先右击项目–export,将出现下图:
在框中输入war
,然后选择导出位置就OK
1.2 DOS命令打war包
运用DOS
命令来手工打war
包:
首先,打开DOS
命令行,敲入“jar”
或 jar --help
,我们发现它提示不是内部或外部的命令这样的错误,这时八成是你的JAVA环境没有配置好,我们可以用JAVA_HOME
方式或者直接在Path
路径里配置,等配置好,(注意JDK
版本,里面有jar.exe
和javac.exe
的版本适合)再敲入"jar"
或 jar --help
,会出现如下效果,说明配置成功。
下面我们用DOS
命令进入到项目中,然后使用如下命令生成war
包
回车键入,等待它自动执行完:
OK,打包完成,现在我们来看下目录下的war包
已经打好了,我们放到Tomcat
的Webapps
下,启动tomcat
,自动解压完成。
2 部署到Tomcat服务器
在Tomcat
中部署Java Web
应用程序有两种方式:静态部署
和动态部署
。在下文中$CATALINA_HOME
指的是Tomcat
根目录。
假如项目名为:ItSourceManage
2.1 静态部署
静态部署
指的是在服务器启动之前部署我们的程序,只有当服务器启动之后,我们的Web
应用程序才能访问。以下3中方式都可以部署:
- 将
项目目录
拷贝到$CATALINA_HOME\webapps
下,然后启动服务器就可以了。这种方式比较简单,但是web应用程序
必须在webapps
目录下。访问地址如下:http://localhost:8080/项目名/
- 这种方式可以不必将
项目目录
目录拷贝到webapps
下,直接在F:\部署
。方法如下,更改$CATALINA_HOME\conf\server.xml
文件,在标签内添加标签,内容如下:
<Context docBase="/Users/a123/Desktop/apache-tomcat-9.0.0/work/Catalina/localhost/test/sm-template-1.0.0-SNAPSHOT"
path="/sm-template-1.0.0-SNAPSHOT" reloadable="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
其中reloadable="false"
表示当应用程序中的内容发生更改之后服务器不会自动加载,这个属性在开发阶段通常都设为true
,方便开发,在发布阶段应该设置为false
,提高应用程序的访问速度。docBase
为路径,可以使用绝对路径,也可以使用相对路径,相对路径相对于webapps
。path
属性的值是访问时的根地址。访问地址如下:http://localhost:8080/ItSource/
- 这种方式和第二种方式差不多,但是不是在
Server.xml
文件中添加Context标签,而是在$CATALINA_HOME\conf\Catalina\localhost
中添加一个xml
文件,如ItSource.xml
,内容如下:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/Users/a123/Desktop/apache-tomcat-9.0.0/work/Catalina/localhost/test/sm-template-1.0.0-SNAPSHOT"
path="/sm-template-1.0.0-SNAPSHOT" reloadable="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
大家可能发现和第二种方式差不多,如果缺少了path
属性,这种方式服务器会使用.xml
的名字
作为path
属性的值。访问地址如下:http://localhost:8080/ItSource/
我们刚才是将ItSourceManage
文件夹部署在了服务器中,我们知道可以将Web
应用程序的内容打成.war
包,然后在部署在服务器上。
这样在当前目录下应该有 myjspweb.war
文件。
部署ItSource.war
文件非常简单,将刚才有docBase="F:\ItSourceManage"
更改为docBase="F:\ItSource.war"
或者直接将其拷贝到webapps下也可以。重新启动服务器就可以将ItSource.war
部署为一个Web应用程序了。如果你够细心的话你会发现,服务器将ItSource.war文件解开,并且在webapps下面又生成了一个ItSource
文件夹,然后把ItSource.war
的内容拷贝到里面去了。我们可以通过以下方式取消自动解压缩,配置方式如下:
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="true">
2.2 动态部署
要开启Web
应用的自动部署,需要配置所在的虚拟主机;配置的方式就是Host
元素的deployOnStartup
和autoDeploy
属性。如果deployOnStartup
或autoDeploy
设置为true
,则tomcat
启动自动部署:当检测到新的Web
应用或Web
应用的更新时,会触发应用的部署(或重新部署)。二者的主要区别在于,deployOnStartup
为true
时,Tomcat
在启动时检查Web
应用,且检测到的所有Web
应用视作新应用;autoDeploy
为true
时,Tomcat
在运行时定期检查新的Web
应用或Web
应用的更新。除此之外,二者的处理相似。
appBase
属性指定Web
应用所在的目录,默认值是webapps
,这是一个相对路径,代表Tomcat
根目录下webapps
文件夹。xmlBase
属性指定Web
应用的XML
配置文件所在的目录,默认值为conf/<engine_name>/<host_name>
Tomcat按照如下的顺序进行扫描,来检查应用更新:
- 扫描虚拟主机指定的
xmlBase
下的XML
配置文件 - 扫描虚拟主机指定的
appBase
下的WAR
文件 - 扫描虚拟主机指定的
appBase
下的应用目录
动态部署是指可以在服务器启动之后部署web
应用程序,而不用重新启动服务器。动态部署要用到服务器提供的manager.war
文件,如果在$CATALINA_HOME\webapps\
下没有该文件,你必须去重新下载tomcat
,否则不能完成以下的功能。要想使用该管理程序必须首先编辑$CATALINA_HOME\conf\tomcat-users.xml
文件,内容如下:
<user username="tomcat" password="123456" roles="tomcat,manager-gui"/>
在浏览器中键入如下地址:http://localhost:8080/
应该看到一个漂亮的加菲猫了吧。点击左边的Tomcat Manager
链接,提示输入用户名和密码,本文都是coresun
在Context Path(option)
:中输入/ItSource
XML Configration file URL中要指定一个.xml文件,比如我们在F:\下建立一个ItSource.xml文件,内容如下:
docBase不用写了,因为在下一个文本框中填入。或者更简单点,这个文本框什么都不填。
在WAR or Directory URL:中键入F:\ItSourceManage或者F:\ItSource.war都可以,然后点击Deploy按钮,看看上面是不是已经看到了你web应用程序,名字就是你Context Path(option):中的名字。
如果你部署.war文件还有更加简单的方式,下面还有个Select WAR file uploae
点击浏览选择.war
文件,然后点击Deploy
也可以。
2.3 tomcat部署多应用
关于用tomcat
部署多个应用的3种方法:
- 配置文件中使用多个
Context
元素
这种配置好处是这些应用公用Connector
,也就是说访问端口是一样的,这样就可以都部署在8080
下了。这样有一个要求,就是应用程序在设计的时候就支持Context
,一些链接前面都先加上动态的应用名,而不是使用“/”
这样的绝对路径。Context
元素的path
一定不要以“/”
结尾,可以是""或者"/WEB1"
这样的。 - 配置文件中使用多个
Service
元素。
这种配置可以解决应用程序不支持动态应用名的情况,使用不同端口访问不同页面。不过这样有时候也不是很顺利,由于一个tomcat
的jvm
对一个jni
类只允许load
一次,你多个应用如果同时load
了某个jni
的类则会部署失败。这种情况可以把这个类从项目里拿出来放到tomcat
安装目录的lib
下作为公用的。不过还是有点麻烦 - 部署多个tomcat。
这个一般是做集群的时候用的,不过你也可以用来部署多应用,只要调整下端口不冲突就行。
2.4 补充
一般常用的方法:将你的项目或把项目的war
包复制到tomcat安装目录下的webapps
目录,然后启动tomcat
,tomcat
目录会自动解包并部署工程。
还有两种方法也可以试试:
- 在
TOMCAT_HOME\conf\Catalina\localhost
下新建一个xml
文件,其中内容指向你所在的工程的应用目录,然后启动tomcat
,也能实现工程的发布,这样的方式对于开发调试来说非常方便,是开发过程中经常使用的方式,xml内容格式如下:
<?xml version="1.0" encoding="UTF-8"?>
- 将编译后的整个工程文件夹拷贝到
webapps
下,然后启动tomcat
。
<Context path="/myapp" docBase="H:/work/projects/myapp/myappWebContext" crossContext="false"
debug="0" reloadable="true"></Context>