@WebFilter 不同类型的不同初始化参数

Posted

技术标签:

【中文标题】@WebFilter 不同类型的不同初始化参数【英文标题】:@WebFilter different init param for different type 【发布时间】:2013-09-22 03:27:30 【问题描述】:

我正在将基于 Servlet 2.5 的 webapp 迁移到 Servlet 3.0 并遇到了这个问题,我不知道如何将这些不同的过滤器映射压缩到该类的一个 @WebFilter 注释中。

过滤器:

<!-- 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

【问题讨论】:

【参考方案1】:

@WebFilter 注释的单个类是不可能的。您必须:

继续使用web.xml方式;考虑到这种情况,这还不错。 在基类中实现逻辑并编写简单的扩展,并使用适当的@WebFilter 进行注释。我认为这看起来不太好。

后面的例子:

public class BaseCacheFilter implements Filter

    public void doFilter(...) 
        ...implementation here...
    
    ....


@WebFilter(
    urlPatterns="*.png","*.gif",...,
    initParams=@WebInitParam(name="CacheTime",value="43200")
)
public class CacheForDay extends BaseCacheFilter
 /* EMPTY */ 

【讨论】:

以上是关于@WebFilter 不同类型的不同初始化参数的主要内容,如果未能解决你的问题,请参考以下文章

初始化与清理

初始化与清理

java基础-对象的初始化

Java初始化与清理

《Java编程思想》笔记 第五章 初始化与清理

构造函数与默认构造函数