这些天来,我一直在关注第一本JSP和Servlets,它说ServletConfig对象在Servlet的生命周期中仅创建一次,然后传递给Servlet的init方法。
我正在测试书中给出的一些示例,以仅使用HttpServletResponse的out.println方法打印出在我的Web应用程序的DD中定义的init-params和context-params。
我看到的是,如果我对DD进行了任何更改(添加或更改参数名称,值),并在chrome浏览器中重新加载指向Web应用程序内特定servlet的URL,它将使用新添加的参数进行更新。事实并非如此。我没有重新部署Servlet(通过再次停止并重新运行tomcat服务),这将导致重新创建ServletConfig对象。这是怎么回事?
我正在Windows 8的tomcat9上运行此程序,而本书中提到了tomcat5。自从动态更新ServletConfig和Context init参数以来,是否进行了更改?我在互联网上看不到任何指示。
答案 0 :(得分:1)
查看Tomcat日志,您将看到该应用程序已重新部署。
默认情况下,对web.xml的更改将触发应用程序重新部署。修改检查每10到15秒进行一次(我忘了多久一次。)
答案 1 :(得分:0)
这是tomcat自动重新部署应用程序的默认行为 当 /WEB-INF/web.xml 文件更新时。
根据文档在 express middleware:
“如果 Host autoDeploy 属性为“true”,Host 将根据需要尝试动态部署和更新 Web 应用程序,例如,如果将新的 .WAR 放入 appBase。为此,Host 需要启用后台处理,这是默认配置。
autoDeploy 设置为“true”并且正在运行的 Tomcat 允许:
如果 /WEB-INF/web.xml 文件(或定义为 WatchedResource 的任何其他资源)更新,则重新加载 Web 应用程序。"
要绕过默认行为,将 autoDeploy 设置为 false 并重新启动 tomcat。 您可以更新 server.xml 以将 autoDeploy 设置为 false 值。该文件位于 $CATALINA_BASE/conf
我只能更新“server.xml”文件,尽管文档说:在早期版本的 Tomcat 中,上下文描述符配置的内容通常存储在 Tomcat 的主要配置文件 server.xml 中,但现在是气馁(尽管它目前仍然有效)。
因此,为了回答您的查询,根据 tomcat 5.x.x 和 tomcat 9.x.x 的文档,将 autoDeploy 设置为 true 或 false 没有任何变化。我也在运行 tomcat 9.x.x,因为我通过将 autoDeploy 设置为 false 来验证此默认行为。