Author: j...@google.com Date: Tue Apr 7 12:01:27 2009 New Revision: 5194 Modified: trunk/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
Log: Add support for logging response headers, and support multiple headers with the same name with Jetty. Patch by: t.broyer Review by: jat Modified: trunk/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java ============================================================================== --- trunk/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java Tue Apr 7 12:01:27 2009 @@ -27,6 +27,7 @@ import org.mortbay.jetty.RequestLog; import org.mortbay.jetty.Response; import org.mortbay.jetty.Server; +import org.mortbay.jetty.HttpFields.Field; import org.mortbay.jetty.handler.RequestLogHandler; import org.mortbay.jetty.nio.SelectChannelConnector; import org.mortbay.jetty.webapp.WebAppClassLoader; @@ -37,7 +38,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; -import java.util.Enumeration; +import java.util.Iterator; /** * A {...@link ServletContainerLauncher} for an embedded Jetty server. @@ -87,17 +88,29 @@ if (response.getContentCount() > 0) { bytesString = " " + response.getContentCount() + " bytes"; } - TreeLogger branch = logger.branch(logStatus, String.valueOf(status) - + " - " + request.getMethod() + ' ' + request.getUri() + " (" - + userString + request.getRemoteHost() + ')' + bytesString); - TreeLogger headers = branch.branch(logHeaders, "Request headers"); - Enumeration<String> headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String hdr = headerNames.nextElement(); - String hdrVal = request.getHeader(hdr); - headers.log(logHeaders, hdr + ": " + hdrVal); + if (logger.isLoggable(logStatus)) { + TreeLogger branch = logger.branch(logStatus, String.valueOf(status) + + " - " + request.getMethod() + ' ' + request.getUri() + " (" + + userString + request.getRemoteHost() + ')' + bytesString); + if (branch.isLoggable(logHeaders)) { + // Request headers + TreeLogger headers = branch.branch(logHeaders, "Request headers"); + Iterator<Field> headerFields = request.getConnection().getRequestFields().getFields(); + while (headerFields.hasNext()) { + Field headerField = headerFields.next(); + headers.log(logHeaders, headerField.getName() + ": " + + headerField.getValue()); + } + // Response headers + headers = branch.branch(logHeaders, "Response headers"); + headerFields = response.getHttpFields().getFields(); + while (headerFields.hasNext()) { + Field headerField = headerFields.next(); + headers.log(logHeaders, headerField.getName() + ": " + + headerField.getValue()); + } + } } - // TODO(jat): add response headers } } @@ -237,8 +250,8 @@ * A {...@link WebAppContext} tailored to GWT hosted mode. Features hot-reload * with a new {...@link WebAppClassLoader} to pick up disk changes. The default * Jetty {...@code WebAppContext} will create new instances of servlets, but it - * will not create a brand new {...@link ClassLoader}. By creating a new - * {...@code ClassLoader} each time, we re-read updated classes from disk. + * will not create a brand new {...@link ClassLoader}. By creating a new {...@code + * ClassLoader} each time, we re-read updated classes from disk. * * Also provides special class filtering to isolate the web app from the GWT * hosting environment. --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---