这个问题似乎已经被问过几次了,但是在审查了太多次之后,我仍然看到这个问题。
我的 Spring MVC 项目中的 .jsp 无法找到任何 .css 或 .js 文件,即使它们在战争中并且给定的文件路径是正确的。
根据我的配置,我看到两个错误。第一个是:
WARNING: No mapping found for HTTP request with URI [/waypoint/css/bootstrap.min.css] in DispatcherServlet with name 'waypoint'
请注意,我的控制器已被访问,并且我看到了该页面,只是没有任何格式或 JavaScript。
我通过以下配置看到此错误:
web.xml
<servlet-mapping>
<servlet-name>waypoint</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
waypoint-servlet.xml
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
文件结构:
WEB-INF
| - css
| ` - all .css files
| - js
| ` - you guessed it...
| - pages
| ` - all .jsp files
| - waypoint-servlet.xml
` - web.xml
我读过很多其他帖子,使用以下方法解决了这个问题mvc:resource
tag.
当我包括mvc:resource
标签,我看到我的 .jsp 出现 404 错误。即使我将 servlet 映射更改为/*
, /**
, /<some-name>/
, and /<some-name>/*
.
我还尝试将静态文件移到 WEB-INF 文件夹之外:
| - resources
| | - css
| | ` css...
| | - js
| ` js...
| - WEB-INF
正如我提到的,我尝试了许多不同的映射组合mvc:resource
标签,适用于上述两种文件结构。一些例子包括:
<mvc:resources mapping="waypoint/resources/css/**" location="/resources/css/" />
<mvc:resources mapping="resources/css/**" location="/resources/css/" />
<mvc:resources mapping="css/**" location="/resources/css/" />
<mvc:resources mapping="css/**" location="WEB-INF/css/" />
<mvc:resources mapping="css/**" location="css/" />
我也在 .jsp 端尝试了上述方法和以下内容的组合:
<link href="classpath:/resources/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href="../css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href="<c:url value="../resources/css/bootstrap.min.css"/>" rel="stylesheet" type="text/css" />
<link href="<c:url value="../css/bootstrap.min.css"/>" rel="stylesheet" type="text/css" />
以前有没有人经历过这种情况可以提供帮助?这将不胜感激。如果您需要任何其他信息,请告诉我。
Thanks.
SOLUTION
我能够通过将 *.css 和 *.js 的 servlet 映射添加到默认 servlet 来解决此问题:
<servlet-mapping>
<servlet-name>waypoint</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
这需要删除<mvc:resource>
标签。我还需要使用resource/css/
目录之外的WEB-INF
文件夹。我在JSP中引用了js和css文件,如下所示:
<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet" type="text/css" />
谢谢阅读!