2010-12-15 2 views
1

В настоящее время я использую модифицированную версию Servlet фильтра, описанный здесь:Stripes 1.5: работает на Tomcat - лучший способ управления заголовками HTTP (cache-control)?

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. Создание случайного ключа кэша на всех JSPs, которые называют в ActionBean (тем самым недействительности контроль кэша - в эффект).
  2. Передача в HTTP-параметре, который затем я могу проверить в CacheControl Filter относительно того, добавлять ли в заголовки управления кешем.
  3. Могу ли я добавить директиву в свои JSP? Каков рекомендуемый способ сделать это.

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

ответ

2

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

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

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

2

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

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

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

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

+0

Благодарим за это (+1) - оба хороших звучащих решения.На самом деле я узнал, что более поздние версии Stripes имеют некоторые функции управления кешем: я отвечу на свой вопрос с этой информацией. – monojohnny 2010-12-16 10:53:57

Смежные вопросы