事实上,我正在编写一个带有spring的maven项目。在我想导入我的css文件之前一切正常。这是我的web.xml(只有servlet部分):
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
然后我在这个网址上访问我的网页:
http://localhost:8080/hello.do?method=reg
但是,我遇到了一个问题: style.css是404 Not Found
所以,我搜索了一些文件然后我得到了一个方法:在我的servlet.xml中添加一些配置(我的servlet是 mvc-dispatcher-servlet.xml ):
<mvc:resources mapping="resources/**" location="/WEB-INF/resources/" />
<mvc:default-servlet-handler />
如您所见,我的css文件位于“/WEB-INF/resources/”。但是,问题仍然存在。最后,我知道一件事:
当servlet映射到/或/ * 的URL模式时,无法访问静态资源
所以我将 web.xml 更改为:
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
最后,问题完全解决了,但这让我更加困惑,为什么tomcat无法访问静态资源(js,css),同时将前端控制器servlet映射到**模式的*。或者/或/ *
更新(2013年12月30日):
我的申请是:
MyApplication
pom.xml
src
test
main
java
com.roger.spring
controller
UserController.java
dao
impl
UserDaoImpl.java
UserDao.java
domain
User.java
service
impl
UserService.java
UserService.java
webapp
WEB-INF
applicationContext.xml
dao.xml
db.properties
mvc-dispatcher-servlet.xml
service.xml
web.xml
pages
index.jsp
taglib.jsp
user
login.jsp
reg.jsp
profile.jsp
resources
css
style.css
js
calendar.js
答案 0 :(得分:0)
使用默认的servlet映射会更简单,更简洁 - 而不是/user/*
和类似struts的*.do
映射:
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
现在所有请求都将通过Spring MVC发送 - 包括静态资源请求。
然后您应该修改您的控制器@RequestMapping
并删除*.do
- 这样您的网址就会变为:
http://localhost:8080/hello?method=reg
确保mvc-dispatcher-servlet.xml中仍有<mvc:default-servlet-handler />
。
然后,您应该能够使用<mvc:resources mapping="resources/**" location="/WEB-INF/resources/" />
提供静态资源而不会出现任何问题。