我怎样才能在球衣上效仿404?

时间:2012-04-01 17:25:19

标签: tomcat jersey

简而言之:

  • pictures/pic.png上的GET应首先由泽西岛处理,然后由tomcat本身处理
  • 理由:
    1. tomcat知道何时发送304 Not Modified。 (响应是特定于客户的)
    2. pic.png可能需要更新。更新应该在调用图片时发生。

冗长的解释:

我在给定的网址上有一张图片。图片可能需要一个参考。我想在请求时进行新鲜度检查。因此,我编写了一个处理图片URL请求的泽西资源。如有必要,它会刷新文件系统上的图片。我不想重新编写缓存机制,而是依赖于tomcat的实现。因此,我想在内部处理程序链中“转发”请求。我试过return new Viewable(sb.toString());,但可见的不是图片。我可以使用什么返回类型?

我可以让具体图片驻留在另一个URL上并发送307(临时重定向)。总是发送它作为答案对我来说似乎很奇怪。

可能,在“GET”方法中进行更新的解决方案在设计上是错误的。可能,“PUT”/“POST”方法应该更新图片,GET应该始终由tomcat处理。

为什么题为“我怎样才能在球衣上效仿404?”的问题。功能 com.sun.jersey.config.feature.FilterForwardOn404做了类似的事情:如果资源无法由泽西处理,它将通过过滤器/ servlet链转发。我想,我的问题与此类似。

相关问题:How to return a PNG image from Jersey REST service method to the browser

1 个答案:

答案 0 :(得分:0)

恕我直言,处理此问题的最佳方法是不要尝试重定向客户端,而是自己获取请求的项目。你试图让球衣以一种不应该表现的方式运动。当有人为图像之类的东西打电话给休息服务时(对于休息服务而言,这不是最好的用途),你应该回应图像。因此,从它所在的任何缓存中获取它并返回它。不要让客户去拿它。

欢迎您将该图像的提取委托给您的缓存服务...

Response getImage(...) {
   if(image.isNotCached()) {
       ... get image locally
      cacheService.set(image,key);
      return Response.ok().entity(<image>);
   } else {
      return Response.ok().entity(cacheServce.get(key);
   }
}

或类似的东西