Spring和tag mvc资源,无法访问.css和.js文件

时间:2012-03-29 11:35:44

标签: spring-mvc resources tags

我的应用程序使用Spring 3.0.4(这是第一个版本,其中标签mvc:resources工作正常)。 目前的问题是我的应用无法从映射的资源中获取.css和.js文件。

结构test.war:

/test -root
   |
   /static-resource
            |
            /css
               |
               /screen.css
            |
            /js
   |
   /WEB-INF
   |
   /index.jsp

我的test-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/jee       http://www.springframework.org/schema/jee/spring-jee.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/aop       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

        <mvc:annotation-driven/>
    <mvc:resources mapping="/resources/**" location="/static-resource/"/>

    <context:annotation-config/>
    <context:component-scan base-package="org.web"/>
    <tx:annotation-driven/>

        <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
            <property name="definitions">
                <list>
                    <value>/WEB-INF/tiles-defs.xml</value>
                </list>
            </property>
        </bean>

        <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
        </bean>

 <bean id="authenticationInterceptor" class="org.util.AuthenticationInterceptor"/>

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="cacheSeconds" value="-1"/>
    </bean>

    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
    </bean>

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="en"/>
        <property name="cookieName" value="bovalta_language"/>
    </bean>

    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="authenticationInterceptor"/>
            <ref bean="localeChangeInterceptor"/>
       </list>
   </property>
    </bean>



</beans>

在index.jsp中,我尝试使用spring url和JSTL url两种方式访问​​资源,如下所示

<%-- With JSTL url --%>
<link media="screen" rel="stylesheet" href="<c:url value="/resources/css/screen.css"/>" type="text/css"/>
<%-- With Spring url --%>
<spring:url value="/resources" var="resourceUrl"/>
<link media="screen" rel="stylesheet" href="${resourceUrl}/css/screen.css" type="text/css" />

当我在Tomcat AS中取消部署war文件时,应用程序正常工作没有任何异常,但Tomcat服务器无法从资源中找到我的css和js文件。 我尝试通过网址http://localhost:8080/test/resources/css/screen.css访问css文件 但是Tomcat没找到它。任何建议都会有用。

提前致谢

3 个答案:

答案 0 :(得分:7)

FYI

对于所有与我有同样问题的人,我解决了我的问题,并与您分享:

test-servlet.xml与我上面的帖子一样没有修改。

  <mvc:annotation-driven/>
  <mvc:resources mapping="/resources/**" location="/static-resource/"/>
index.jsp页面中的

将是:

<spring:url value="/resources/css/screen.css" var="resourceUrl"/>
<link media="screen" rel="stylesheet" href="${resourceUrl}" type="text/css" />

主要问题出现在我的web.xml中,因为我使用

映射了spring servlet
<url-pattern>/*.htm</url-pattern>

而不是你必须只映射

<url-pattern>/</url-pattern>

web.xml将会显示:

    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

谢谢大家!

答案 1 :(得分:1)

我遇到了同样的问题,这就是我解决问题的方法: 在spring配置文件中 替换

<mvc:resources mapping="/resources/**" location="/resources/"/>
With
<mvc:default-servlet-handler/>

在JSP中提供以下路径以加载静态内容

<link rel="stylesheet" href="resources/css/Mass.css" type="text/css"/>

希望这会有所帮助!

答案 2 :(得分:0)

测试servlet.xml中

    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"></mvc:resources>

<link href="<c:url value="../resources/css/style.css" />" rel="stylesheet">