这个问题似乎已经被问过几次了,但是在检查了太多以至于无法计算之后,我仍然看到了这个问题。
我的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标签解决了此问题的文章。
mvc:resource
当包含mvc:resource标记时,我的.jsp文件出现404错误。当我改变servlet映射到会出现这种情况/*,/**,/<some- name>/,和/<some-name>/*。
/*
/**
/<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文件,如下所示:
<mvc:resource>
resource/css/
WEB- INF
<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet" type="text/css" />
谢谢阅读!
我不确定为什么该<mvc:resources>标签在您的情况下不起作用,因为它应该从Spring 3.2.0起开始使用。在您的代码中添加以下几行web.xml,这是不安网址的常见问题
<mvc:resources>
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/images/*</url-pattern> </servlet-mapping>
您需要将文件放置在web-inf之外,以使其对截获的请求可见。
一个很好的教程在这里