我使用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(Web上下文)不在<CATALINA_HOME>/webapps中(这是appBase的默认值)且: 2. Webapp通过在<CATALINA_HOME>\conf\server.xml下的<Host>元素下编写<Context>元素进行配置。
下面是<CATALINA_HOME>\conf\server.xml的部分内容:
1. Webapp(Web上下文)不在<CATALINA_HOME>/webapps中(这是appBase的默认值)且: 2. Webapp通过在<CATALINA_HOME>\conf\server.xml下的<Host>元素下编写<Context>元素进行配置。
下面是<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 "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="D:/tmpdev/apache-tomcat-7.0.53/wtpwebapps/test" path="/test" reloadable="true"/>
</Host>
以下是“test”目录的目录结构:
test
├─META-INF
│ MANIFEST.MF
│
└─WEB-INF
│ web.xml
│
├─classes
│ └─test
│ HelloServlet.class
│ MyFilter1.class
│ MyFilter2.class
│ MyHttpSessionListener.class
│ MyServletContextListener.class
│
└─lib
虽然 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>
以下是其他可用的配置方式:
- 使用一个单独的文件 <CATALINA_HOME>\conf\Catalina\localhost\test.xml 来配置上下文,或者:
- 将 "test" 移动到 <CATALINA_HOME>\webapps 目录下,无需进行其他配置,或者:
- 在 Eclipse WTP 中的服务器选项中勾选 "Serve modules without publishing"。