0

我们正在将大约 20 个 Web 上下文从 Tomcat 6.0.48 迁移到 Tomcat 7.0.76,但是我们遇到了由父级web.xml( tomcat7\conf\web.xml) 中配置的 servlet 处理的请求的问题。/some_file.html问题是对, /some_file.jsp,/images/some-image.jpg的请求/index.xhtml返回 404 NOT FOUND,而web.xml 在上下文中声明的其他自定义 servlet工作正常。多年来,所有 20 个上下文在 Tomcat 6 中都运行良好,但只有10 个在 Tomcat 7 上失败。我们比较了那些可以工作的和不能工作的,但它们非常不同(不足为奇),我们还没有发现问题。

测试

项目是在 Windows 下使用 Eclipse 部署的,一些测试是直接在 /webapps 上部署 WAR 文件执行的,结果相同。所有项目都是 Java 1.8 并且它们是 mavenized。测试包括部署一个工作上下文和一个不工作的上下文并导航到:、、/some_file.html并查看响应是 200 还是 404。/some_file.jsp/images/some-image.jpg

  • 我们尝试将 javax.servlet.servlet-api(2.5 到 3.0.1)和 javax.servlet.jsp.jsp-api(2.0 到 2.2)的版本与 Tomcat 7 在依赖项(Parent聚甲醛)。没变。
<dependency>
  <groupId>javax.servlet</groupId>
  <!-- <artifactId>servlet-api</artifactId>
  <version>2.5</version> -->
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <!-- <version>2.0</version> -->
  <version>2.2</version>
  <scope>provided</scope>
</dependency>
  • 我们已经从应用程序web.xml的 Tomcat 文件中复制了默认和 jsp servlet 映射配置web.xml。没变。
<!-- The mapping for the default servlet -->
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- The mappings for the JSP servlet -->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>
  • 我们已将 url 模式更改/为默认 servlet/*的 tomcat文件中的内容,并且开始使用静态资源但不适用于文件(Faces)。但正如 servlet 规范 (JSR-315) 中所述,它应该与. 无论哪种方式,此更改都破坏了所有上下文的 *.jsp 请求(¿?)。web.xml*.jsp*.xhtml/
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
<servlet-name>default</servlet-name>
<url-pattern>/*</url-pattern>
  • 我们已经从上下文文件中删除了所有内容servlet-mapping,以查看是否存在任何冲突。没变。filter-mappingweb.xml

我们怀疑...

要么tomcatweb.xml没有被读取,要么被覆盖,要么被某些上下文描述符破坏/的url模式。*.jsp

有什么线索吗?

提前致谢。

4

0 回答 0