3

对不起,如果我要问的问题已经被问了 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 文件夹旁边的“静态”文件夹中。

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

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

4

2 回答 2

2

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

解决方案很简单:您根本不应该显式映射默认 servlet web.xml。如错误报告中所述,您必须改用这种方法

于 2011-01-21T23:05:40.113 回答
0

casey对BalusC链接到的同一问题提供的另一个更简单的答案是指定欢迎文件列表并将最后一个欢迎文件映射到应用程序 servlet 的 URL 模式。在这种配置中,默认的 servlet 处理静态内容,而任何不匹配的 URL 都会进入应用程序。

完整的答案,带代码,来自 casey

于 2012-02-23T18:36:10.883 回答