3

@WebFilter私は Servlet 2.5 ベースの webapp を Servlet 3.0 に移行している途中で、これらの異なるフィルター マッピングをクラスの 1 つの注釈に絞り込む方法がわからないというこの問題に遭遇しました。

フィルター:

<!-- 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ますか?

4

1 に答える 1

3

で注釈が付けられた単一のクラスでは不可能@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 */ }
于 2013-09-17T16:06:35.193 に答える