tomcat - 静态内容。 tomcat6 和 tomcat7 行为的区别

标签 tomcat tomcat6 tomcat7

很抱歉,如果我问的问题已经被问过 1000 次,但我搜索了它却没有找到任何东西:)

我有 2 个 tomcat 安装。 Windows 上的 tomcat 6 和 linux 机器上的 tomcat 7。我有一个使用 spring 的项目,它有一些静态内容,我希望能够在不让请求通过 Spring 的情况下提供这些内容。

这是我的 servlet 配置:

<servlet-mapping>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>/static/*</url-pattern>
</servlet-mapping>

我的静态文件位于 WEB-INF 文件夹旁边的“static”文件夹中。

现在有趣的是,当我向 http://myserver.com/myproject/static/css/main.css 发出请求时,在 tomcat7 上它在/webapps/myproject/static/css/main.css 中查找文件,但在 tomcat6 上它在/webapps/myproject/css/main.css 中查找它并产生错误,指出没有这样的文件。

我应该调整什么配置才能让两台服务器以相同的方式工作?

最佳答案

您实际上是在滥用 Tomcat 的默认 servlet。默认 servlet 不是由 servlet API 定义的,而是特定于 servlet 容器的。已知 Tomcat 的默认 servlet 存在一个错误,当以这种方式被滥用时能够暴露 /WEB-INF/META-INF 的所有内容,特此敞开大门到敏感信息。这被报告为 issue 50026并已在 Tomcat 6.0.30 及更高版本中得到修复。

解决方案很简单:您根本不应该在 web.xml 中显式映射默认 servlet。如错误报告中所述,您必须使用 this approach相反。

关于tomcat - 静态内容。 tomcat6 和 tomcat7 行为的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764675/

相关文章:

java - Tomcat7(本地主机 :8080): 404 error

java - tomcat 池未重置池。连接错误太多

java - 如何使用 IP 地址从另一台机器运行 java 动态 Web 项目

java - 无需重启服务器即可清理Tomcat内存

java - TomEE 中的 ManagedScheduledExecutorService

spring-boot - Spring Boot - 内存泄漏 - H2 数据库 - 不注销驱动程序

java - Tomcat 6 中的每个 webapp 是否独立加载核心类?

java - 在 tomcat 上运行计划方法

Java servlet : Setting HTTP status code doesn't work with TomCat 6

java - 从命令行执行java spring项目