diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java index 68218c13f8..9256d0a8c8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java @@ -161,6 +161,11 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic private static final String INIT_PARAM_DELIMITERS = ",; \t\n"; + /** Checking for Servlet 3.0+ HttpServletResponse.getStatus() */ + private static final boolean responseGetStatusAvailable = + ClassUtils.hasMethod(HttpServletResponse.class, "getStatus"); + + /** ServletContext attribute to find the WebApplicationContext in */ private String contextAttribute; @@ -1054,16 +1059,19 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic } } - private void publishRequestHandledEvent(HttpServletRequest request, HttpServletResponse response, long startTime, Throwable failureCause) { + private void publishRequestHandledEvent( + HttpServletRequest request, HttpServletResponse response, long startTime, Throwable failureCause) { + if (this.publishEvents) { // Whether or not we succeeded, publish an event. long processingTime = System.currentTimeMillis() - startTime; + int statusCode = (responseGetStatusAvailable ? response.getStatus() : -1); this.webApplicationContext.publishEvent( new ServletRequestHandledEvent(this, request.getRequestURI(), request.getRemoteAddr(), request.getMethod(), getServletConfig().getServletName(), WebUtils.getSessionId(request), getUsernameForRequest(request), - processingTime, failureCause, response.getStatus())); + processingTime, failureCause, statusCode)); } }