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

Nan*_*com 22 resources spring spring-mvc

我在使用标签时遇到了一些问题(Spring 3.0.5).我想将图像添加到我的Web应用程序,但它不起作用.

这是我的bean配置的一部分:

<mvc:annotation-driven/>
<mvc:default-servlet-handler default-servlet-name="ideafactory"/>
<mvc:resources mapping="/resources/**" location="/, classpath:/WEB-INF/public-resources/" cache-period="10000" />
Run Code Online (Sandbox Code Playgroud)

尝试在jsp文件中添加图像:

<img src="<c:url value="/resources/logo.png" />" alt="Idea Factory" />
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

编辑:这里给出的解决方案:Spring Tomcat和静态资源以及mvc:资源也不起作用......添加没有成功.

编辑2:我试图删除mvc:resource标签,只让mvc:default-servlet-handler> one,给了我无限循环和stackoverflow ... o_O(用Spring 3提供静态内容)

Nan*_*com 26

发现错误:

最终的xxx-servlet.xml配置:

<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/" />
Run Code Online (Sandbox Code Playgroud)

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

作品!


Ral*_*lph 24

<mvc:resources mapping="/resources/**"
               location="/, classpath:/WEB-INF/public-resources/"
               cache-period="10000" />
Run Code Online (Sandbox Code Playgroud)

将资源放在:src/main/webapp/images/logo.png然后通过它访问它们/resources/images/logo.png.

war他们将在那里images/logo.png.所以第一个location(/)表单mvc:resources将会提取它们.

第二个位置(classpath:/WEB-INF/public-resources/)mvc:resources(看起来你使用了一些基于roo的模板)可以公开资源(例如js-files)形式的jar,如果它们位于WEB-INF/public-resourcesjar 的目录中.


Wes*_*lor 5

通过在$ {webappRoot}/resources目录中提供静态资源来处理对资源/**的HTTP GET请求的资源建议是在配置​​文件中添加以下行:

<resources mapping="/resources/**" location="/resources/" />
Run Code Online (Sandbox Code Playgroud)

它对我有用.

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


Xel*_*ian 5

正如@Nancom所说

<mvc:resources location="/resources/" mapping="/resource/**"/>
Run Code Online (Sandbox Code Playgroud)

所以为了清楚起见,让我们的图像在

resources/images/logo.png"
Run Code Online (Sandbox Code Playgroud)

mvc:resources标签的location属性定义了您要提供的静态资源的基本目录位置。可以是目录下可用的图片路径;您可能想知道为什么我们只提供/resources/作为位置值而不是. 这是因为我们把目录作为所有资源的基础目录,我们可以在目录下有多个子目录来放置我们的图片和其他静态资源文件。src/main/webapp/resources/images/src/main/webapp/resources/images/resourcesresources

第二个属性mapping只是表示需要映射到这个resources目录的请求路径。在我们的例子中,我们已分配/resource/**为映射值。因此,如果任何 Web请求/resource请求路径开头,那么它将被映射到该resources目录,并且该/**符号表示递归查找基resources目录下的任何资源文件。

所以对于像 http://localhost:8080/webstore/resource/images/logo.png. 因此,在处理此 Web 请求时,Spring MVC 会将其视为/resource/images/logo.png请求路径。因此,它将尝试映射/resource到由location属性指定的基本目录,resources. 从该目录中,它将尝试查找 URL 的剩余路径,即/images/logo.png. 由于我们在images目录下有resources目录,Spring可以很容易地从images目录中定位到图像文件。

所以

 <mvc:resources location="/resources/" mapping="/resource/**"/>
Run Code Online (Sandbox Code Playgroud)

为我们提供给定的 [请求] -> [资源映射]:

http://localhost:8080/webstore/resource/images/logo.png -> 搜索 resources/images/logo.png

http://localhost:8080/webstore/resource/images/small/picture.png -> 搜索 resources/images/small/picture.png

http://localhost:8080/webstore/resource/css/main.css -> 搜索 resources/css/main.css

http://localhost:8080/webstore/resource/pdf/index.pdf -> 搜索 resources/pdf/index.pdf