代码之家  ›  专栏  ›  技术社区  ›  Mac

Spring MVC JSP无法找到Javascript或CSS

  •  2
  • Mac  · 技术社区  · 10 年前

    这个问题似乎被问了几次,但在回顾了太多的问题之后,我仍然看到了这个问题。

    我的SpringMVC项目中的.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>
    

    航路点服务.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:资源 标记,我看到.jsp的404个错误。即使我将servlet映射更改为 /* , /** , /<some-name>/ /<some-name>/* .

    我还尝试将静态文件移出WEB-INF文件夹:

    | - resources
    |  | - css
    |  |   ` css...
    |  | - js
    |      ` js...
    | - WEB-INF
    

    正如我提到的,我为 mvc:资源 标记,用于上述两种文件结构。一些示例包括:

    <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映射添加到fefaultservlet来解决这个问题:

    <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" />
    

    感谢阅读!

    2 回复  |  直到 10 年前
        1
  •  1
  •   Santhosh    10 年前

    我不知道为什么 <mvc:resources> 标签在您的情况下不工作,因为它应该来自弹簧3.2.0。在您的 web.xml ,这些是不稳定url的常见问题

    <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
    </servlet-mapping>
    

    您需要将文件放置在web inf之外,以使其对拦截的请求可见。

    一个不错的 tutorial 在这里

        2
  •  1
  •   Master Slave    10 年前

    类似彩票的答案:)中奖组合应该是

    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" />
    

    我认为,尽管尝试了很多,但静态文件由于错误的配置而失败,上面应该会修复它