今天小编在面试的时候被问到如何实现tomcat的热部署,当时一脸的懵逼,因为小编都不知道tomcat热部署是什么意思,于是回来google了一下,然后在自己的Linux服务器上实现了tomcat的热部署功能,从此以后就不用担心考官面试这个问题了。
什么是tomcat热部署呢?先搞清楚概念问题。
所谓的tomcat热部署,就是在不重启tomcat服务器的前提下,将自己的项目部署到tomcat服务器中,这种方式是非常方便的,也称之为“开发即用”,热部署分为手动热部署与自动热部署。
手动热部署:就是不重启tomcat的情况下,在tomcat自带的管理界面,例如“http://ip:8080/manager/html/”里面,直接选择需要部署的war包,然后点击“deploy”部署按钮即可将项目部署到远程服务器中,如图所示:
自动部署:就是在不重启tomcat的情况下,结合maven的pom.xml配置,在里面直接配置tomcat插件,并设置好远程服务器manager管理界面的登录用户名与密码,当我们在eclipse开发工具中运行“tomcat7:deploy”或“tomcat7:redeploy”命令时,就会将我们的项目自动部署到远程服务器上。
了解了什么是tomcat服务器热部署之后,我们再来学习如何实现tomcat热部署吧!
步骤一:我们都知道tomcat服务器是解压之后就可以运行的,因此要想实现tomcat热部署,就要开启tomcat的manager管理功能,正常情况下我们这样访问“http://ip:8080/manager/html/”管理界面的时候会报403错误,也就是无权限访问,因此需要配置tomcat管理界面的访问权限。
方法:
修改tomcat的conf下的tomcat-users.xml文件,在<tomcat-users></tomcat-users>标签之间添加如下配置,表示允许用户名和密码为“admin”的用户登录管理界面(密码自己设置):
<role rolename="manager-gui" /> <role rolename="manager-script" /> <user username="admin" password="admin" roles="manager-gui, manager-script"/>
重启tomcat之后如果浏览器和服务器处于同一台机器上,你访问“http://ip:8080/manager/html/”管理界面是可以的,但是如果你的浏览器与服务器不是同一台设备,就需要在“/conf/Catalina/localhost”下添加一个“manager.xml”文件,并添加如下代码:
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>
它表示允许任何客户端访问管理界面
步骤二:在eclipse的pom.xml文件上添加maven配置文件,添加tomcat,并设置远程的登录用户名和密码,配置如下:
<build> <finalName>english</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> <uriEncoding>UTF-8</uriEncoding> <url>http://123.207.218.210:8080/manager/text</url> <username>admin</username> <password>admin</password> </configuration> </plugin> </plugins> </build>
此时我们在eclipse上如上图那样运行maven命令,就可以直接将我们的项目热部署到远程服务器上,就不用重启tomcat了,也就是“开发即用”!