我在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>