Servlets 在Tomcat中反映的DD(init参数、context参数)更改,无需重新部署

Servlets 在Tomcat中反映的DD(init参数、context参数)更改,无需重新部署,servlets,tomcat9,init-parameters,Servlets,Tomcat9,Init Parameters,最近我一直在关注HeadFirstJSP和Servlets的书,书中说ServletConfig对象在servlet的生命周期中只创建了一次,然后被传递给servlet的init方法 我正在测试书中给出的一些示例,以便使用HttpServletResponse的out.println方法打印出在我的webapp的DD中定义的init参数和context参数 我看到的是,如果我在DD中进行任何更改,添加或更改参数名称、值,并在chrome浏览器中重新加载URL,指向webapp中的特定servle

最近我一直在关注HeadFirstJSP和Servlets的书,书中说ServletConfig对象在servlet的生命周期中只创建了一次,然后被传递给servlet的init方法

我正在测试书中给出的一些示例,以便使用HttpServletResponse的out.println方法打印出在我的webapp的DD中定义的init参数和context参数

我看到的是,如果我在DD中进行任何更改,添加或更改参数名称、值,并在chrome浏览器中重新加载URL,指向webapp中的特定servlet,它将使用新添加的参数进行更新。事实不应如此。我不是通过停止并再次运行tomcat服务来重新部署servlet,这将导致重新创建ServletConfig对象。这里发生了什么


我在Windows8上的tomcat9上运行这个,而书中提到的是tomcat5。自那以后,是否有动态更新ServletConfig和Context init参数的更改?我在互联网上看不到任何迹象表明这一点。

查看Tomcat日志,您将看到应用程序正在重新部署


默认情况下,对web.xml的更改将触发应用程序重新部署。修改检查每10-15秒进行一次,我忘记了检查的频率。

这是tomcat自动重新部署应用程序的默认行为 更新/WEB-INF/WEB.xml文件时

根据以下文件: :

如果Host autoDeploy属性为true,则主机将根据需要尝试动态部署和更新web应用程序,例如,如果将新的.WAR放入appBase中。要使其工作,主机需要启用后台处理,这是默认配置

autoDeploy设置为true,并且运行的Tomcat允许:

如果更新了/web-INF/web.xml文件或定义为WatchedResource的任何其他资源,则重新加载web应用程序

要绕过默认行为,请将autoDeploy设置为false并重新启动tomcat。 您可以更新server.xml以将autoDeploy设置为false值 $CATALINA_基地/配置

我只能更新server.xml文件,尽管文档中说:在Tomcat的早期版本中,上下文描述符配置的内容通常存储在Tomcat的主配置文件server.xml中,但现在不鼓励这样做,尽管它目前仍然有效

因此,在回答您的问题时,没有根据tomcat 5.x.x和tomcat 9.x.x的文档将autoDeploy设置为true或false的更改。我还运行tomcat 9.x.x,通过将autoDeploy设置为false来验证此默认行为