spring mvc:resources - 本地缓存的文件是什么?

时间:2015-06-24 23:27:35

标签: spring spring-mvc caching

我在Spring中使用mvc:resources来提供静态内容。我正在通过Spring中的html表单将文件上传到位置目录。但是,在上传之后,Spring似乎仍然会返回404几秒钟。

我正在使用Spring mvc 4.1.4。

这是一个问题,因为我转发的视图试图显示图像。

我通过Java检查了Files.exists,它返回true。如果我添加一个Thread.sleep(5000),视图会正确显示它。

这种行为让我觉得mvc:resources至少缓存了哪些文件存在 - 是吗?有没有办法告诉它刷新或刷新缓存?或者有没有办法将其关闭 - 这只适用于开发。

编辑以添加代码示例:

我的请求处理程序如下所示:

@Controller
public class ProductController {
    @RequestMapping(value="/product/create",method=RequestMethod.GET)
    public String createProduct(Model model) throws Exception {
        return "product/create";
    }

    @RequestMapping(value="/product/create",method=RequestMethod.POST)
    public String createProduct(HttpServletRequest request, Model model, MultipartFile featuredImage) throws Exception {
        if (!featuredImage.isEmpty()) {
            String featuredImageUrl = "/static/tmp/" + UUID.randomUUID() + featuredImage.getContentType().replace("image/", ".");
            Path featuredImagePath = Paths.get(request.getServletContext().getRealPath(featuredImageUrl));
            Files.createDirectories(featuredImagePath.getParent());
            Files.write(featuredImagePath, featuredImage.getBytes());
            System.out.println("File exists: " + Files.exists(featuredImagePath));

            model.addAttribute("featuredImageUrl", featuredImageUrl);
        }

        return "product/view";
    }
}

如果我在返回之前放置了Thread.sleep(5000),则图像会在视图中正确显示。 Files.exists始终返回true。

在我的调度程序servlet的xml中,我有以下内容来提供静态目录:

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

如果featuredImageUrl不为null,则product / view.jsp文件基本上显示图像:

<%@include file="/WEB-INF/jsp/common/taglibs.jspf" %>
<c:if test="${not empty featuredImageUrl}">
  <img src="<c:url value="${featuredImageUrl}" />" /><br />
</c:if>

0 个答案:

没有答案