这个问题似乎已被问过几次,但在审查了太多这些问题之后,我仍然看到了这个问题。
我的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>
航点-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
标记解决了此问题。
当我添加mvc:resource
标记时,我看到了.jsp的404错误。即使我将servlet映射更改为/*
,/**
,/<some-name>/
和/<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" />
有没有人在此之前能够伸出援助之手?这将不胜感激。如果您需要任何其他信息,请告诉我。
感谢。
解
我能够通过将* .css和* .js的servlet映射添加到fefault 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" />
感谢阅读!
答案 0 :(得分:1)
我不确定为什么<mvc:resources>
标签在您的情况下不起作用,因为它应该从春季3.2.0开始。在web.xml
中添加以下行,这些是不安分网址的常见问题
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
您需要将文件放在web-inf之外,以使其对截获的请求可见。
这里有一个很好的tutorial
答案 1 :(得分:1)
彩票喜欢回答:)胜利组合应该是
1)结构,根据你的第二个'树',所以
| - resources
| | - css
| | ` css...
| | - js
| ` js...
| - WEB-INF
2)映射应该是
<resources mapping="/resources/**" location="/resources/" />
3)从JSP访问静态资源,如
<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet" type="text/css" />
我认为尽管尝试了很多,但由于配置错误导致静态文件失败,上面应该修复它