2013-11-25 15 views
1

5 API: Web容器不能在过滤器放置到服务,如果init方法要么 1.Throws一个的ServletException 2,不被web容器中定义的时间周期内返回是否有可能不把servlet过滤器投入使用?基于Java EE

什么我做的是在init方法的任何部分工作失败时抛出一个ServletException。 但是,我观察到的是Web容器启动,但所有的请求将返回404错误。有什么建议么?

+0

您期望的行为是什么 - 容器关闭? – home

+0

@home no。相反,Web应用程序仍应该在不调用该过滤器的情况下工作 – Bobo

回答

2

我相信这样做的逻辑是过滤器是处理请求的组成部分;如果零件失败,则整个请求失败。因此,无法启动的过滤器被认为无法提供服务,因此任何通常会通过它的请求都会失败。

如果过滤器是可选的话,那么我会建议一个逻辑(几乎是伪代码):

private boolean canServe = false; 

public void init(FilterConfig fc) { 
    if(filter activation condition) { 
     canServe = true; 
    } 
} 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { 
    if(canServe) { 
     // filter logic - filter is ON 
    } 
    else chain.doFilter(request, response); // filter is OFF 
} 

另外,如果过滤器的可用性可以在编译时被配置(例如环境基础 - DEV ,STAGING,PRODUCTION),可以使用将从web.xml中删除过滤器定义的条件构建(例如Ant)。

相关问题