Я всегда думаю, что вы должны иметь возможность делать исключения для шаблонов URL в файле web.xml, например. если бы вы могли сделать что-то вроде этого:
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>
<match>/resources/*</match>
<except>/resouces/images/blah.jpg</except>
</url-pattern>
но ты не можешь, так что это тебе не поможет!
У вас, очевидно, есть доступ к URL-адресу в фильтре через объект запроса, чтобы вы могли сделать что-то вроде этого:
public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)sRequest;
if(!request.getRequestURI.equals("/resources/images/blah.jpg")) {
doLogging();
}
chain.doFilter();
}
(здесь жестко запрограммировано, но вы, вероятно, прочитали бы его из файла свойств), хотя это может оказаться бесполезным, поскольку вы упоминали сервлеты в своем запросе, а не шаблоны URL.
РЕДАКТИРОВАТЬ: другая мысль. Если вы не возражаете заняться регистрацией после завершения сервлета, вы можете сделать что-то вроде этого:
public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
FilterChain chain) throws IOException, ServletException {
sRequest.setAttribute("DO_LOGGING", new Boolean(true));
chain.doFilter();
Boolean doLogging = (Boolean)sRequest.getAttribute("DO_LOGGING");
if(doLogging) {
doLogging();
}
}
и ваш сервлет, который вы хотите исключить из журнала, может просто установить для этого атрибута значение false.
public void doGet(HttpServletRequest req,
HttpServletResponse res) throws IOException {
req.setAttribute("DO_LOGGING", new Boolean(false));
// other stuff
}