我的应用程序使用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没找到它。任何建议都会有用。
提前致谢
答案 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)
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"></mvc:resources>
<link href="<c:url value="../resources/css/style.css" />" rel="stylesheet">