我编辑了Tomcat 8 conf
文件夹中的“ server.xml”文件。我Host
为新网站添加了新标签。
我必须重新启动Tomcat服务器吗?
我可以让Tomcat解析并应用新编辑的server.xml
吗?
<Host>
不是<Context>
。
server.xml
在启动时解析一次。不重新启动就无法重新加载。
我编辑了Tomcat 8 conf
文件夹中的“ server.xml”文件。我Host
为新网站添加了新标签。
我必须重新启动Tomcat服务器吗?
我可以让Tomcat解析并应用新编辑的server.xml
吗?
<Host>
不是<Context>
。
server.xml
在启动时解析一次。不重新启动就无法重新加载。
Answers:
我首先要说的是,这个问题并未完全正确提出,因为很可能无需重新启动Tomcat即可实际编辑文件,但是正在运行的进程会忽略这些更改。
真正的问题是如何在server.xml
不重新启动Tomcat的情况下应用更改。
从启动过程和Tomcat联机文档上的类加载器页面中收集信息,可以更详细地了解这一点。
更具体地说,它在serverStartup.txt和启动过程的UML图中进行了描述,相关部分可以总结如下:
Sequence 1. Start from Command Line ... Sequence 2. Process command line argument (start, startd, stop, stopd) Class: org.apache.catalina.startup.Bootstrap (assume command->start) What it does: a) Catalina.setAwait(true); b) Catalina.load() b3) createStartDigester() Configures a digester for the main server.xml elements b4) Load the server.xml and parse it using the digester Parsing the server.xml using the digester is an automatic XML-object mapping tool, that will create the objects defined in server.xml Startup of the actual container has not started yet. b6) Calls initialize on all components, this makes each object register itself with the JMX agent.
这是在创建servlet引擎(Catalina)的Bootstrap类加载器之后发生的。
有了这些信息,现在很清楚在启动过程中何时server.xml
解析该文件,但是并不能真正回答为什么需要重新启动Tomcat才能对该文件应用更改的问题。
答案是它的某些部分可以在运行时使用JMX进行动态修改。为此,必须注册适当的MBean(上述b6步骤),并且还必须接受SET操作(某些MBean仅具有GET接口)。
在您的特定情况下,由于没有任何准备,因此无法在运行时创建和注册新主机,这就是为什么您必须重新启动Tomcat进程以使Bootstrap类加载器实例化该对象并向其注册的原因。 JMX代理。
之后,可以从JMX客户端(例如jconsole
与任何JDK捆绑在一起的)修改该主机。
将您连接jconsole
到启用了JMX的Tomcat,并浏览Host MBean以检查所有可用属性:
并检查所有可用的操作(以下示例为其中之一):
we’re talking about <Host>, not <Context>.
-1抱歉的人的回答很差,我很少这样做,但是我必须...