我正在使用 Tomcat 7 并希望提供一个简单的登录屏幕,然后将用户引导至基于 Spring MVC/EXT-JS 的门户。在 web.xml 中,我定义了对 spring 区域的访问,如下所示:
<servlet>
<servlet-name>portal-web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/portal-web-servlet-app-ctx.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>portal-web</servlet-name>
<url-pattern>/portal/*</url-pattern>
</servlet-mapping>
这部分工作正常(/portal/* 的 URL 被正确定向)。但是,我的静态登录页面现在未提供,/index.html 和/css/*.css 调用返回 404 错误。我尝试将以下内容添加到我的 web.xml 中:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
这确实让我可以访问/index.html,但仍然无法访问 css 文件。
这是我的项目布局:
-src
-main
+extjs
+java
-resources
hibernate.cfg.xml
log4j2.xml
-webapp
-css
first.css
second.css
+WEB-INF
index.html
为什么 tomcat 不提供 webapp/css 下的静态文件?
谢谢!
最佳答案
对我有用的是通过 spring xml 文件和 mvc:resources 标签控制到 spring mvc 的静态映射。
在 web.xml 中:
<servlet> <servlet-name>portal-web</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/portal-web-servlet-app-ctx.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>portal-web</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
在 portal-web-servlet-app-ctx.xml 中,我添加了以下内容:
<mvc:resources mapping="/resources/**" location="/resources/" />
我的文件夹布局现在如下所示:
-src -main +extjs +java -resources hibernate.cfg.xml log4j2.xml -webapp -resources -css first.css second.css index.html +WEB-INF
我还建议任何使用这些 xmls/文件夹的人都使用独立的 tomcat。我使用的是集成了 eclipse 的 tomcat,很多时候我对 xml 文件/文件夹所做的更改都没有反射(reflect)出来。
关于spring - 使用 Spring MVC 时无法让 Tomcat 提供一些静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891987/