我很抱歉,如果我问了一些被问过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并产生一个错误,说明没有这样的文件。
我应该调整哪个配置以使两个服务器以相同的方式工作?
答案 0 :(得分:2)
你实际上是在滥用Tomcat的默认servlet。缺省servlet不是由servlet API定义的,而是特定于servlet容器的。已知Tomcat的默认servlet有一个错误,当以这种方式滥用时,它能够公开/WEB-INF
和/META-INF
的所有内容,从而为敏感信息敞开大门。这被报告为issue 50026,并已在Tomcat 6.0.30及更高版本中修复。
解决方案很简单:您根本不应在web.xml
中明确映射默认servlet。如错误报告中所述,您必须改为使用this approach。
答案 1 :(得分:0)