Author: markt Date: Thu Nov 24 21:11:22 2016 New Revision: 1771230 URL: http://svn.apache.org/viewvc?rev=1771230&view=rev Log: Refactor to reduce code duplication
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java tomcat/trunk/java/org/apache/catalina/util/RequestUtil.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1771230&r1=1771229&r2=1771230&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Thu Nov 24 21:11:22 2016 @@ -83,6 +83,7 @@ import org.apache.catalina.core.Applicat import org.apache.catalina.core.AsyncContextImpl; import org.apache.catalina.mapper.MappingData; import org.apache.catalina.util.ParameterMap; +import org.apache.catalina.util.RequestUtil; import org.apache.catalina.util.URLEncoder; import org.apache.coyote.ActionCode; import org.apache.coyote.UpgradeToken; @@ -2288,44 +2289,9 @@ public class Request implements HttpServ } - /** - * Reconstructs the URL the client used to make the request. - * The returned URL contains a protocol, server name, port - * number, and server path, but it does not include query - * string parameters. - * <p> - * Because this method returns a <code>StringBuffer</code>, - * not a <code>String</code>, you can modify the URL easily, - * for example, to append query parameters. - * <p> - * This method is useful for creating redirect messages and - * for reporting errors. - * - * @return A <code>StringBuffer</code> object containing the - * reconstructed URL - */ @Override public StringBuffer getRequestURL() { - - StringBuffer url = new StringBuffer(); - String scheme = getScheme(); - int port = getServerPort(); - if (port < 0) - { - port = 80; // Work around java.net.URL bug - } - - url.append(scheme); - url.append("://"); - url.append(getServerName()); - if ((scheme.equals("http") && (port != 80)) - || (scheme.equals("https") && (port != 443))) { - url.append(':'); - url.append(port); - } - url.append(getRequestURI()); - - return url; + return RequestUtil.getRequestURL(this); } Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java?rev=1771230&r1=1771229&r2=1771230&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java Thu Nov 24 21:11:22 2016 @@ -41,6 +41,7 @@ import org.apache.catalina.Globals; import org.apache.catalina.Manager; import org.apache.catalina.Session; import org.apache.catalina.util.ParameterMap; +import org.apache.catalina.util.RequestUtil; import org.apache.tomcat.util.buf.B2CConverter; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.http.Parameters; @@ -488,25 +489,7 @@ class ApplicationHttpRequest extends Htt */ @Override public StringBuffer getRequestURL() { - - StringBuffer url = new StringBuffer(); - String scheme = getScheme(); - int port = getServerPort(); - if (port < 0) - port = 80; // Work around java.net.URL bug - - url.append(scheme); - url.append("://"); - url.append(getServerName()); - if ((scheme.equals("http") && (port != 80)) - || (scheme.equals("https") && (port != 443))) { - url.append(':'); - url.append(port); - } - url.append(getRequestURI()); - - return (url); - + return RequestUtil.getRequestURL(this); } Modified: tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java?rev=1771230&r1=1771229&r2=1771230&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java (original) +++ tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java Thu Nov 24 21:11:22 2016 @@ -44,6 +44,7 @@ import javax.servlet.http.PushBuilder; import org.apache.catalina.AccessLog; import org.apache.catalina.Globals; import org.apache.catalina.core.ApplicationPushBuilder; +import org.apache.catalina.util.RequestUtil; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -621,23 +622,7 @@ public class RemoteIpFilter extends Gene @Override public StringBuffer getRequestURL() { - StringBuffer url = new StringBuffer(); - String scheme = getScheme(); - int port = getServerPort(); - if (port < 0) { - port = 80; // Work around java.net.URL bug - } - url.append(scheme); - url.append("://"); - url.append(getServerName()); - if ((scheme.equals("http") && (port != 80)) - || (scheme.equals("https") && (port != 443))) { - url.append(':'); - url.append(port); - } - url.append(getRequestURI()); - - return url; + return RequestUtil.getRequestURL(this); } @Override Modified: tomcat/trunk/java/org/apache/catalina/util/RequestUtil.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/RequestUtil.java?rev=1771230&r1=1771229&r2=1771230&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/util/RequestUtil.java (original) +++ tomcat/trunk/java/org/apache/catalina/util/RequestUtil.java Thu Nov 24 21:11:22 2016 @@ -16,6 +16,8 @@ */ package org.apache.catalina.util; +import javax.servlet.http.HttpServletRequest; + /** * General purpose request parsing and encoding utility methods. * @@ -62,4 +64,37 @@ public final class RequestUtil { } return result.toString(); } + + + /** + * Build an appropriate return value for + * {@link HttpServletRequest#getRequestURL()} based on the provided + * request object. Note that this will also work for instances of + * {@link javax.servlet.http.HttpServletRequestWrapper}. + * + * @param request The request object for which the URL should be built + * + * @return The request URL for the given request object + */ + public static StringBuffer getRequestURL(HttpServletRequest request) { + StringBuffer url = new StringBuffer(); + String scheme = request.getScheme(); + int port = request.getServerPort(); + if (port < 0) { + // Work around java.net.URL bug + port = 80; + } + + url.append(scheme); + url.append("://"); + url.append(request.getServerName()); + if ((scheme.equals("http") && (port != 80)) + || (scheme.equals("https") && (port != 443))) { + url.append(':'); + url.append(port); + } + url.append(request.getRequestURI()); + + return url; + } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1771230&r1=1771229&r2=1771230&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Thu Nov 24 21:11:22 2016 @@ -98,6 +98,11 @@ Refactor the <code>org.apache.naming</code> package to reduce duplicate code. Duplicate code identified by the Simian tool. (markt) </scode> + <scode> + Refactor the implementations of + <code>HttpServletRequest#getRequestURL()</code> to reduce duplicate + code. Duplicate code identified by the Simian tool. (markt) + </scode> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org