2013-09-17 4 views
3

Я нахожусь в середине миграции Servlet 2.5 на веб-сервере Servlet 3.0 и сталкивался с этой проблемой, что я не знаю, как сжать эти различные сопоставления фильтров в одну аннотацию @WebFilter класс.@WebFilter различные параметры init для разных типов

Фильтры:

<!-- Day is 12 hours, so if we update at night the new content will be fetched first  thing in the morning --> 
<filter> 
    <filter-name>CacheForDay</filter-name> 
    <filter-class>x.web.client.filter.CacheHeaderFilter</filter-class> 
    <init-param> 
     <param-name>CacheTime</param-name> 
     <param-value>43200</param-value> 
    </init-param> 
</filter> 

<filter> 
    <filter-name>CacheForWeek</filter-name> 
    <filter-class>x.web.client.filter.CacheHeaderFilter</filter-class> 
    <init-param> 
     <param-name>CacheTime</param-name> 
     <param-value>604800</param-value> 
    </init-param> 
</filter> 

<filter> 
    <filter-name>CacheForMonth</filter-name> 
    <filter-class>x.web.client.filter.CacheHeaderFilter</filter-class> 
    <init-param> 
     <param-name>CacheTime</param-name> 
     <param-value>18144000</param-value> 
    </init-param> 
</filter> 

<filter> 
    <filter-name>noCache</filter-name> 
    <filter-class>x.web.client.filter.CacheHeaderFilter</filter-class> 
    <init-param> 
     <param-name>CacheTime</param-name> 
     <param-value>0</param-value> 
    </init-param> 
</filter> 

Фильтрующие Отображения:

<filter-mapping> 
    <filter-name>CacheForDay</filter-name> 
    <url-pattern>*.png</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
    <filter-name>CacheForDay</filter-name> 
    <url-pattern>*.gif</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
    <filter-name>CacheForDay</filter-name> 
    <url-pattern>*.js</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
    <filter-name>CacheForDay</filter-name> 
    <url-pattern>*.css</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
    <filter-name>CacheForMonth</filter-name> 
    <url-pattern>*.ico</url-pattern> 
    </filter-mapping> 

Как я могу заменить их @WebFilter?

ответ

3

Это невозможно с одним классом, аннотированным @WebFilter. Вам необходимо либо:

  • Продолжить использование метода web.xml; это неплохо, учитывая ситуацию.
  • Реализовать логику в базовом классе и написать тривиальные расширения, аннотированные соответствующим @WebFilter. Я думаю, это выглядело бы неплохо.

Пример позже:

public class BaseCacheFilter implements Filter 
{ 
    public void doFilter(...) { 
     ...implementation here... 
    } 
    .... 
} 

@WebFilter(
    urlPatterns={"*.png","*.gif",...}, 
    [email protected](name="CacheTime",value="43200") 
) 
public class CacheForDay extends BaseCacheFilter 
{ /* EMPTY */ } 

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

  • Нет связанных вопросов^_^