热部署:所谓热部署,就是在系统正在运行的时候升级软件,却不需要重新启动应用。
直接将一个web项目打成一个war包,并将war包放入tomcat的webapps目录下,此时tomcat服务器会自动将次war包解压并在服务器上进行部署发布。
使用Tomcat自带的Tomcat Manager来对tomcat上的web项目进行管理。
找到tomcat-users.xml这个配置文件,在这个配置文件的最下方,有如下这么几行标签:
--
"tomcat"/>
"role1"/>
"tomcat" password="" roles="tomcat"/>
"both" password="" roles="tomcat,role1"/>
"role1" password="" roles="role1"/>
-->
以一个具体的配置为例:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manage-script"/>
最后,启动Tomcat服务器,访问http://localhost:8080/manager,然后输入用户名密码,此时用户名和密码都是:tomcat
登入成功能够以客户端的形式来进行tomcat上web项目,找到如下所示这一栏:
此处可以将一个war包上传到服务器中,上传成功后便会自动部署并发布(ps:有关Tomcat Manager的更多用处,有兴趣的朋友可以自己再去了解一下,此处主要说明tomcat的热部署)。
1、在pom文件中配置如下插件即可:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<configuration>
<port>8080port>
<path>/qingpath>
<url>http://localhost:8080/manager/texturl>
<username>tomcatusername>
<password>tomcatpassword>
configuration>
plugin>
plugins>
build>
2、进入Tomcat的bin目录启动tomcat服务器,或者在myeclipse、eclipse中启动tomcat服务器
3、在eclipse或者myeclipse中右键点击需要热部署的web项目,选择:Run As–>Maven build..,输入:
3.最后点击Run,然后访问:http://localhost:8080/qing/index.html,能够成功访问项目说明项目部署成功。
注:
1、想要在maven项目中进行tomcat的热部署,必须要开启Tomcat Manager
2、部署到远程服务器也是相同的道理,只需要将localhost改为tomcat所在的服务器IP即可
在部署到远程服务器时,出现以下问题:
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
[INFO] Retrying request
Uploading: http://******/manager/text/deploy?path=%2F
4098/35084 KB
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
[INFO] Retrying request
Uploading: http://******/manager/text/deploy?path=%2F
4096/35084 KB
经过查询资料后发现,这是由于Tomcat的远程地址拦截器造成的结果,默认情况下,Tomcat的Manager和Host-Manager只接受本机的请求,要让它接受远程的请求,需要添加manager.xml的配置。
在tomcat服务器的conf/Catalina/localhost/目录下创建一个manager.xml文件:
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
Context>
如果需要实现允许特定的IP地址访问Manager的需求,可在上面的allow属性中设置规则。具体规则设置见下面的链接:
详情链接
同时在解决问题的过程中也考虑到多次重复部署带来的问题,也就是tomcat内存泄漏,Tomcat会为项目新建一个类加载器,而旧的类加载器没有被GC回收。
classloader-leak-prevention-servlet
用来解决maven部署内存泄漏的问题,添加依赖到项目:
<dependency>
<groupId>se.jiderhamn.classloader-leak-preventiongroupId>
<artifactId>classloader-leak-prevention-servletartifactId>
<version>2.1.0version>
dependency>
并在项目的web.xml 中添加监听器 (该listener 必须为项目的第一个监听器,否则不起作用)
se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventorListener
附上:在pom.xml文件中,在plugins节点下添加如下plugin节点:
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<url>你的tomcatd的IP:端口号/manager/texturl>
<server>tomcatserver>
<username>adminusername>
<password>adminpassword>
<update>trueupdate>
<path>/${project.build.finalName}path>
configuration>
plugin>
用
mvn tomcat7:redeploy
取代undeploy
和deploy
来重新部署