2012-04-01 33 views
0

问题在短期:我怎样才能在运动衫上效仿404?

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

朗解释:

我有一个给定的URL的图片。图片可能需要重新添加。我希望在请求时做新鲜检查。因此,我编写了一个处理图片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

回答

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); 
    } 
} 

或类似的东西

+0

的像,总是transferered过线,是不是?如果图像没有被修改,我想要一个“304 Not Modiefied”作为回复。在客户端执行依赖于图像状态的操作使我重新实现http缓存,不是吗?为什么我应该如果tomcat已经做到了? – koppor 2012-04-02 12:17:20

+0

然后发送与Response.ok()。状态(...)304,但我不认为tomcat做这种缓存...客户端应该从下游缓存或cdn获取。 – 2012-04-02 13:29:14

+0

我不想发送304或307,因此我在问是否可以仿真。 Tomcat可以发送304.但是,304是客户端特定的... – koppor 2012-04-12 15:40:23