[Java] Как я могу получить код статуса HTTP из ServletResponse в ServletFilter?


Answers

Начиная с сервлета 3.0 существует HttpServletResponse#getStatus() .

Итак, если есть возможность для обновления, перейдите на Servlet 3.0 (Tomcat 7, Glassfish 3, JBoss AS 6 и т. Д.), И вам не нужна оболочка.

chain.doFilter(request, response);
int status = ((HttpServletResponse) response).getStatus();
Question

Я пытаюсь сообщить о каждом коде состояния HTTP, возвращенном из моего webapp. Однако код статуса не представляется доступным через ServletResponse, или даже если я передал его HttpServletResponse. Есть ли способ получить доступ к этому значению в ServletFilter?




Помимо ответа Дэвида, вы также захотите переопределить метод сброса:

@Override
public void reset() {
    super.reset();
    this.httpStatus = SC_OK;
}

... а также устаревший setStatus (int, String)

@Override
public void setStatus(int status, String string) {
    super.setStatus(status, string);
    this.httpStatus = status;
}



Одна вещь, отсутствующая в ответе Дэвида выше, заключается в том, что вы также должны переопределить другую форму sendError:

@Override
public void sendError(int sc, String msg) throws IOException {
    httpStatus = sc;
    super.sendError(sc, msg);
}