【问题标题】:Changes in DD (init-param, context-param) reflecting in Tomcat without re-deployingDD(init-param,context-param)的变化反映在Tomcat中,无需重新部署
【发布时间】:2019-11-13 10:43:24
【问题描述】:

这些天我在关注 headfirst JSP and Servlets book,它说 ServletConfig 对象在 servlet 的生命周期中只创建一次,然后传递给 servlet 的 init 方法。

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

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

我在 Windows 8 上的 tomcat9 上运行它,而这本书指的是 tomcat5。自从动态更新 ServletConfig 和 Context init 参数后是否发生了变化?我在互联网上没有看到任何表明这一点的东西。

【问题讨论】:

    标签: servlets tomcat9 init-parameters


    【解决方案1】:

    查看 Tomcat 日志,您会看到应用正在重新部署。

    默认情况下,对 web.xml 的更改将触发应用程序重新部署。每 10 到 15 秒检查一次修改(我忘了具体是多久一次)。

    【讨论】:

      【解决方案2】:

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

      根据文档 http://tomcat.apache.org/tomcat-9.0-doc/deployer-howto.html#Deploying_on_a_running_Tomcat_server

      “如果 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.标签名称是主机,如下所示

          <Host name="localhost"  appBase="webapps"
              unpackWARs="true" autoDeploy="true">
      

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        相关资源
        最近更新 更多