【问题标题】:How to serve static content in spring mvc?如何在spring mvc中提供静态内容?
【发布时间】:2016-07-28 11:52:15
【问题描述】:

我在当前项目中使用 spring-mvc 框架。 ROOT文件夹有很多web文件夹,包含html、jsp、css、js等。我的spring mvc配置如下:

<context:annotation-config />

    <bean id="comicControllerBean" class="tv.cinemacraft.videogramwebapp.springmvc.controllers.ComicController" />
    <bean id="dashboardControllerBean" class="tv.cinemacraft.videogramwebapp.springmvc.controllers.DashBoardController" />
    <bean id="genericControllerBean" class="tv.cinemacraft.videogramwebapp.springmvc.controllers.GenericController" />
    <bean id="channelControllerBean" class="tv.cinemacraft.videogramwebapp.springmvc.controllers.ChannelController" />

    <!-- <context:component-scan base-package="tv.cinemacraft.videogramwebapp.springmvc.controllers" /> -->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
    </bean>

    <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
        <property name="basename" value="views" />
        <property name="order" value="0" />
    </bean>

我在我的 java 控制器中定义了映射。但这会导致像任何图像一样的静态内容消失。如果我通过访问 ROOT//.jpg 来请求任何文件夹中的任何图像,它会给我 404 响应代码,尽管图像存在。 如果我删除 spring-mvc,则会显示图像。

请注意,spring-mvc 的资源属性适用于静态内容,但需要我的静态内容存在于特定文件夹中,例如资源文件夹。所以这种方法对我没用。

【问题讨论】:

  • 你能抛弃这种方法来获得更好、健壮和简化的方法,即 Spring Boot 吗?使用 Spring boot 和纯 Java 编程而不是这些臃肿的 XML 配置,事情会变得容易得多。如果是,那么我将发布所有目录结构以及访问静态内容所需的注释和代码。 :)
  • 对不起,我们的项目完全在 spring-mvc 中
  • Spring mvc 是框架,而 spring boot 是应用程序设置方法,用于 spring mvc 项目。 spring.io/guides/gs/spring-boot

标签: java spring spring-mvc static


【解决方案1】:

假设您有一个目录 (/resources/my_images/),其中包含一些产品图片,并且您希望根据请求提供这些图片。例如,如果请求的 URL 是 http://localhost:8080/ mystore/resource/my_images/P123.png,那么您希望使用名称为 P123.png 的图像提供服务。同样,如果请求的 URL 是 http://localhost:8080/mystore/resource/images/P1234.png,则需要提供名称为 P1234.png 的图像。

现在如何使用 Spring MVC 提供静态图像?

  1. src/main/webapp/resources/my_images/目录下放置一些图片;
  2. 在我们的 Web 应用程序上下文的配置中添加以下标签 DispatcherServlet-context.xml 文件:&lt;mvc:resources location="/resources/" mapping="/resource/**"/&gt;
  3. 运行您的应用程序并输入 http://localhost:8080/mystore/resource/images/P123.png(更改 基于您放置的图像的 URL 中的图像名称

仅供参考:Web 应用程序上下文配置中的&lt;mvc:resources&gt; 标记告诉 Spring 这些图像文件在我们项目中的位置,以便 Spring 可以根据请求提供这些文件。

【讨论】:

  • 您好 Georges,上述实现的问题是我的 webapp 文件夹结构不包含资源文件夹。而且我们不想创建资源文件夹。它应该自动从图像所在的位置选择图像文件。例如。 http://localhost:8080/somepath/someimg.jpg 在这种情况下,spring mvc 框架拦截了请求,因此由于没有处理程序返回 404。
  • 所以你只需这样做: 只需删除资源。 !!保留其他资源,因为它的弹簧默认映射为静态内容。注意 de 区别 btw 资源和资源
  • 好的,我会尽力让你知道
  • 你好 Georges,我已经尝试过这个配置,我原来提供静态内容的问题已经解决,但它引发了另一个问题,现在它给出的非静态 URL 是 404 未找到。
  • 嘿,prashant,请打开一个新的详细问题
猜你喜欢
  • 1970-01-01
  • 2020-08-07
  • 2019-10-20
  • 1970-01-01
  • 2020-01-26
  • 2015-10-30
  • 2012-10-27
  • 2011-10-14
  • 2013-06-12
相关资源
最近更新 更多