为什么更改 WEB-INF/web.xml 不会导致 tomcat 重新加载上下文?

use*_*924 3 java eclipse tomcat web.xml eclipse-wtp

我使用 Eclipse WTP Tomcat 创建了一个名为“test”的动态 Web 项目,Eclipse 版本是 Java EE Kepler Service Release 2,Tomcat 版本是 7.0.53,Servlet 3.0,Win 8.1 x86,jdk 1.6.0_45,但经过多次尝试,我发现在匹配以下所有条件时会出现问题:

  1. Webapp(网络上下文)不在 <CATALINA_HOME>/webapps(这是 appBase 的默认值)中,并且:
  2. 通过在 <CATALINA_HOME>\conf\server.xml 中的 <Host> 元素下编写一个 <Context> 元素来配置 Web 应用程序。

这是 <CATALINA_HOME>\conf\server.xml 的一部分?

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

    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>
    <Context docBase="D:/tmpdev/apache-tomcat-7.0.53/wtpwebapps/test" path="/test" reloadable="true"/>
  </Host>
Run Code Online (Sandbox Code Playgroud)

这是“test”的目录结构:

test
??META-INF
?      MANIFEST.MF
?
??WEB-INF
    ?  web.xml
    ?
    ??classes
    ?  ??test
    ?          HelloServlet.class
    ?          MyFilter1.class
    ?          MyFilter2.class
    ?          MyHttpSessionListener.class
    ?          MyServletContextListener.class
    ?
    ??lib
Run Code Online (Sandbox Code Playgroud)

尽管 WEB-INF/web.xml 默认是 <CATALINA_HOME>\conf\context.xml 中的 <WatchedResource>,但我尝试在以下每种格式中添加一个 <WatchedResource> 元素,仍然无效:

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF\web.xml</WatchedResource>
<WatchedResource>D:/tmpdev/apache-tomcat-7.0.53/wtpwebapps/test/WEB-INF/web.xml</WatchedResource>
<WatchedResource>D:\tmpdev\apache-tomcat-7.0.53\wtpwebapps\test\WEB-INF\web.xml</WatchedResource>
Run Code Online (Sandbox Code Playgroud)

这是其他有效的配置方式:

  1. 使用单独的文件 <CATALINA_HOME>\conf\Catalina\localhost\test.xml 来配置上下文,或者:
  2. 将“test”移动到 <CATALINA_HOME>\webapps 中,无需更多配置,或者:
  3. 检查 Eclipse WTP 中服务器选项的“无需发布即可提供模块”

Mar*_*mas 5

<WatchedResoucre> 仅适用于从 server.xml 部署上下文时不使用的自动部署功能。