servlet如何进行热重新部署

时间:2013-11-30 20:11:48

标签: java tomcat

Servlet是否有办法热重新部署它所属的webapp?

我知道我可以将Tomcat配置为对web.xml的更改进行热重新部署,但我找不到任何方法可以从java代码中执行相同的操作。我不希望tomcat不得不一直看web.xml进行更改。

2 个答案:

答案 0 :(得分:0)

Servlet的生命周期取决于容器。这在这里解释 http://docs.oracle.com/javaee/5/tutorial/doc/bnafi.html

这意味着来自web.xml,容器根据请求计算匹配,如果存在这样的类,则将其作为类加载器资源加载。一旦发生这种情况,实例将保持加载状态,直到容器关闭,因此替换.class文件实际上不会实现“热部署”,除非您在tomcat的context.xml中设置了reloadable标志 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html#Common_Attributes

在任何情况下,Tomcat与否,一旦资源被ClassLoader加载,更改.class文件就不会完全改变你可能知道的正在运行的jvm的行为。因此,即使从文件系统中删除类文件也不会影响正常情况下运行的java进程。

但是,servlet可能可以启动后台任务,该任务执行您要“热部署”的新.class文件的基本文件副本(如果上下文属性'reloadable'为true)。然后,这会强制重新加载这些类,从而实现热部署。因此,虽然这超出了servlet旨在实现的范围,但答案是肯定的。

希望这会有所帮助。

答案 1 :(得分:0)

我相信可以使用JMX完成。

The Tomcat Manager is a web application that can be used interactively (via HTML GUI) or programmatically (via URL-based API) to deploy and manage web applications.

有链接 - http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html