Author: eli
Date: Fri Aug 12 03:17:33 2011
New Revision: 1156947
URL: http://svn.apache.org/viewvc?rev=1156947&view=rev
Log:
HADOOP-7531. Add servlet util methods for handling paths in requests.
Contributed by Eli Collins
Modified:
hadoop/common/trunk/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common/src/main/java/org/apache/hadoop/util/ServletUtil.java
Modified: hadoop/common/trunk/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common/CHANGES.txt?rev=1156947&r1=1156946&r2=1156947&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common/CHANGES.txt Fri Aug 12 03:17:33 2011
@@ -322,6 +322,8 @@ Trunk (unreleased changes)
HADOOP-7526. Add TestPath tests for URI conversion and reserved
characters. (eli)
+ HADOOP-7531. Add servlet util methods for handling paths in requests. (eli)
+
OPTIMIZATIONS
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
Modified:
hadoop/common/trunk/hadoop-common/src/main/java/org/apache/hadoop/util/ServletUtil.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common/src/main/java/org/apache/hadoop/util/ServletUtil.java?rev=1156947&r1=1156946&r2=1156947&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common/src/main/java/org/apache/hadoop/util/ServletUtil.java
(original)
+++
hadoop/common/trunk/hadoop-common/src/main/java/org/apache/hadoop/util/ServletUtil.java
Fri Aug 12 03:17:33 2011
@@ -21,10 +21,15 @@ import java.io.*;
import java.util.Calendar;
import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.httpclient.URIException;
+import org.apache.commons.httpclient.util.URIUtil;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
+import com.google.common.base.Preconditions;
+
@InterfaceAudience.Private
@InterfaceStability.Unstable
public class ServletUtil {
@@ -107,4 +112,55 @@ public class ServletUtil {
public static String percentageGraph(float perc, int width) throws
IOException {
return percentageGraph((int)perc, width);
}
-}
+
+ /**
+ * Escape and encode a string regarded as within the query component of an
URI.
+ * @param value the value to encode
+ * @return encoded query, null if the default charset is not supported
+ */
+ public static String encodeQueryValue(final String value) {
+ try {
+ return URIUtil.encodeWithinQuery(value, "UTF-8");
+ } catch (URIException e) {
+ throw new AssertionError("JVM does not support UTF-8"); // should never
happen!
+ }
+ }
+
+ /**
+ * Escape and encode a string regarded as the path component of an URI.
+ * @param path the path component to encode
+ * @return encoded path, null if UTF-8 is not supported
+ */
+ public static String encodePath(final String path) {
+ try {
+ return URIUtil.encodePath(path, "UTF-8");
+ } catch (URIException e) {
+ throw new AssertionError("JVM does not support UTF-8"); // should never
happen!
+ }
+ }
+
+ /**
+ * Parse and decode the path component from the given request.
+ * @param request Http request to parse
+ * @param servletName the name of servlet that precedes the path
+ * @return decoded path component, null if UTF-8 is not supported
+ */
+ public static String getDecodedPath(final HttpServletRequest request, String
servletName) {
+ try {
+ return URIUtil.decode(getRawPath(request, servletName), "UTF-8");
+ } catch (URIException e) {
+ throw new AssertionError("JVM does not support UTF-8"); // should never
happen!
+ }
+ }
+
+ /**
+ * Parse the path component from the given request and return w/o decoding.
+ * @param request Http request to parse
+ * @param servletName the name of servlet that precedes the path
+ * @return path component, null if the default charset is not supported
+ */
+ public static String getRawPath(final HttpServletRequest request, String
servletName) {
+
Preconditions.checkArgument(request.getRequestURI().startsWith(servletName+"/"));
+ return request.getRequestURI().substring(servletName.length());
+ }
+}
\ No newline at end of file