Полосы 1.5: работа на Tomcat - лучший способ управления заголовками HTTP (контроль кэша)? - PullRequest
1 голос
/ 16 декабря 2010

В настоящее время я использую модифицированную версию фильтра сервлетов, описанную здесь:

http://onjava.com/pub/a/onjava/2004/03/03/filters.html

И подключил его к сервлету диспетчера полос:

 <filter-mapping>
        <filter-name>CacheControl</filter-name>
        <servlet-name>StripesDispatcher</servlet-name>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

Что работает: но дает эффект контроля всего моего контента - как я могу получить контроль на основе JSP и / или на основе метода actionBean?

Я собирался попробовать и расширить«ForwardResolution» и внедрить здесь, но, кажется, не в состоянии сделать это в моей собственной структуре пакета?(Защищенный конструктор, я думаю).

У меня были еще две идеи (которые мне не особо нравятся):

  1. Создание случайного ключа кэша на всех JSP, которыевызов в ActionBean (тем самым лишает законной силы элемент управления кэшем).
  2. Передача параметра HTTP, который я затем могу проверить в фильтре CacheControl, чтобы добавить, добавлять ли заголовки элемента управления кэшем.
  3. Могу ли я просто добавить директиву к моим JSP?Каков рекомендуемый способ сделать это.

[в дополнение, кажется, что мой фильтр вызывается дважды для каждого вызова ... это побочный эффект от того, как я подключился?фильтр к полоскам сервлет может быть?]

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

На самом деле - дальнейшее копание показало, что полоса 1.5 имеет механизм аннотации для управления заголовками кеша HTTP:

http://www.stripesframework.org/display/stripes/News

// Управление кешем клиента.Новая аннотация @HttpCache может быть применена к классу ActionBean и / или методу обработчика событий, чтобы контролировать, как клиент кэширует ответ.Аннотации к методам переопределяют аннотации к классам, и аннотация наследуется от суперклассов.Это особенно полезно для вызовов AJAX из IE.//

2 голосов
/ 16 декабря 2010

Я начну задом наперед - ваш фильтр вызывается дважды, возможно, потому что одна и та же страница запрашивает два ресурса - страницу и, например, CSS. Или делает ajax-вызов.

Тогда, если вы хотите управлять кешем для каждого запрошенного ресурса, вот решение для двух сервлетов. Я не знаю полос, поэтому там может быть лучше:

  • создайте служебный класс + метод, скажем CacheUtils.addCacheHeaders(response). В этом методе добавьте все заголовки кэша в ответ. Вызывайте это где угодно - одна строка для добавления кэшей. Это программный подход

  • Определить (разделенный запятыми) список URL-адресов запросов в init-param фильтра. Метод in init(..) анализирует параметр, сохраняет его в списке и применяет кеш только в том случае, если текущий запрос uri (request.getRequestURI()) соответствует одному в списке. Это декларативный подход

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...