2012-04-01 2 views
0

Проблема короче:Как я могу подражать вперед на 404 в майке?

  • GET на pictures/pic.png первым следует лечить Джерси, затем TOMCAT сам
  • Причины:
    1. кот знает, когда посылать 304 Not Modified. (Ответ зависит от клиента)
    2. pic.png может потребоваться обновление. Обновление должно происходить при вызове изображения.

Long Объяснение:

У меня есть изображение на данном URL. На картинке может понадобиться рефешок. Я хочу сделать проверку свежести во время запроса. Поэтому я закодировал ресурс трикотажа, обрабатывающий запрос на URL-адрес изображения. При необходимости он обновляет изображение в файловой системе. Я не хочу перекодировать кеширование mechansim, но полагаюсь на реализацию tomcat. Поэтому я хотел бы «отправить» запрос в цепочку внутренних обработчиков. Я пробовал return new Viewable(sb.toString());, но просмотр - это не фотография. Какой тип возврата я могу использовать?

Я мог бы разместить конкретную картинку на другом URL-адресе и отправить 307 (временный переадресация). Всегда посылать это как ответ кажется странным для меня.

Возможно, решение, имеющее обновление по методу «GET», ошибочно по дизайну. Возможно, метод «PUT»/«POST» должен обновить изображение, и GET всегда должен обрабатываться tomcat.

Почему возникает вопрос под названием «Как я могу подражать на 404 в майке?». Функция com.sun.jersey.config.feature.FilterForwardOn404 делает аналогичную вещь: если ресурс не может обрабатываться трикотажем, он пересылается через цепочку фильтров/сервлетов. Я думаю, моя проблема схожа с этим.

Связанные вопрос: 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 Modified» в качестве ответа, если изображение не будет изменено. Выполнение этой зависимости от состояния изображения на клиенте заставляет меня перепрограммировать кэширование HTTP, не так ли ?. Почему я должен, если tomcat уже это сделал? – koppor

+0

Затем отправьте 304 с Response.ok(). Status (...), но я не думаю, что tomcat делает это кеширование ... Клиент должен получить это из кэша вниз или cdn. –

+0

Я не хочу отправлять 304 или 307. Поэтому я спрашиваю, возможна ли эмуляция. Tomcat может отправлять 304. 304, однако, зависит от клиента ... – koppor