2013-11-25 5 views
1

на основе Java EE 5 апи: Веб-контейнер не может поместить фильтр в эксплуатацию, если метод инициализации либо 1.Throws в ServletException 2.Does не возвращает в течение периода времени, определенного веб-контейнераВозможно ли установить фильтр сервлета?

Что Я сделал это, чтобы бросить ServletException, когда какая-либо часть работы в методе init завершилась неудачно. Однако я заметил, что веб-контейнер запускается, но все запросы возвращаются с ошибкой 404. Какие-либо предложения?

+0

Какое поведение вы ожидаете - выключение контейнера? – home

+0

@home no. вместо этого веб-приложение должно работать без вызова этого фильтра – 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), может быть использована условная сборка (например, Ant), которая удалит определение фильтра из web.xml.

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