Servlet是否有办法热重新部署它所属的webapp?
我知道我可以将Tomcat配置为对web.xml的更改进行热重新部署,但我找不到任何方法可以从java代码中执行相同的操作。我不希望tomcat不得不一直看web.xml进行更改。
答案 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