0

当我在 Eclipse 中使用 Tomcat 并让我的 Web 应用程序通过 Eclipse 运行时,对 Java 类或 JSP 页面的任何更改似乎都会直接推送到 tomcat 中,而无需重新启动 tomcat 或应用程序。

有没有办法在 Eclipse 下配置 Jetty 以使其工作方式相同?到目前为止,我似乎所能做的就是更改代码,然后手动重新启动码头。

4

1 回答 1

0

配置 jetty.xml 以使用启用“热部署”的 ContextDeployer。这可能已经默认配置。本质上,Jetty 会以预定的时间间隔扫描 contexts 文件夹。如果它检测到 WAR 文件或 war 目录已更改,则它会自动重新加载上下文。

在下面的示例中,${jetty.home}/contexts 文件夹被配置为查找上下文 XML 文件,这些文件告诉 Jetty 要监控哪些 Web 应用程序。scanInterval 设置为 5 毫秒,这意味着 Jetty 每 5 毫秒检查一次更改。您将在 jetty.xml 中找到此配置:

<!-- =========================================================== -->
<!-- Configure the context deployer                              -->
<!-- A context deployer will deploy contexts described in        -->
<!-- configuration files discovered in a directory.              -->
<!-- The configuration directory can be scanned for hot          -->
<!-- deployments at the configured scanInterval.                 -->
<!--                                                             -->
<!-- This deployer is configured to deploy contexts configured   -->
<!-- in the $JETTY_HOME/contexts directory                       -->
<!--                                                             -->
<!-- =========================================================== -->
<Call name="addLifeCycle">
  <Arg>
    <New class="org.mortbay.jetty.deployer.ContextDeployer">
      <!-- the ContextHandlerCollection to modify once a webapp is added or removed (Allows Hot Deployment) -->
      <Set name="contexts"><Ref id="Contexts"/></Set>

      <!-- the directory which will contain your context.xml files -->
      <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>

      <!-- the interval in milliseconds to periodically scan the configurationDir -->
      <Set name="scanInterval">5</Set>
    </New>
  </Arg>
</Call>

您还需要创建一个 WebAppContext 条目。将它放在一个名为 test.xml 的文件中,并将该文件放在 /contexts 目录中:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <Set name="contextPath">/test</Set>
  <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set>
</Configure>

请注意,<Set name="war">指的是实际文件夹,而不是 WAR 文件。此文件夹应包含应用程序的根目录,例如 /WEB-INF 文件夹和所有其他文件。

如果您希望立即识别 JSP 和其他页面,则需要将 webapps 文件夹中的 Web 应用程序配置为从展开的 WAR 而非 WAR 文件本身运行。之后,您需要将 Eclipse 指向该位置,这样您就可以直接从 webapps/test 文件夹修改和编译文件。

总之,您并不清楚您正在运行哪个版本的 Jetty。然而,虽然不同版本的 Jetty 配置可能会有很大差异,但这应该可以帮助您入门。有关 Jetty 配置和故障排除的更多文档,请参阅Jetty 网站Webtide 网站

一旦一切配置正确,您就可以直接从该文件夹修改和编译代码,而无需重新启动 Jetty。

该规则的唯一例外是修改 web.xml 的情况。如果您修改 web.xml,您很可能需要重新启动 Jetty。

最后要注意的是,请确保不要在 webapps 文件夹中部署任何名为 test.war 的 WAR 文件,除非您首先禁用了 WAR 文件的爆炸。您最终可能会覆盖您的代码!

如果您需要更多指导,您可能会发现ContextDeployers 上的 Jetty 文档以及Deploying a Webapp to Jetty很有帮助。祝你好运!

于 2012-05-24T04:09:28.950 回答