Mega Code Archive

 
Categories / Java Tutorial / Network
 

Http connection Utilities

/**********************************************************************************  *  * Copyright (c) 2003, 2004 The Regents of the University of Michigan, Trustees of Indiana University,  *                  Board of Trustees of the Leland Stanford, Jr., University, and The MIT Corporation  *  * Licensed under the Educational Community License Version 1.0 (the "License");  * By obtaining, using and/or copying this Original Work, you agree that you have read,  * understand, and will comply with the terms and conditions of the Educational Community License.  * You may obtain a copy of the License at:  *  *      http://cvs.sakaiproject.org/licenses/license_1_0.html  *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE  * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  *  **********************************************************************************/ import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; /**  * HTTP utilites  */ public class HttpTransactionUtils {   private HttpTransactionUtils() {   }   /**    * Default HTTP character set    */   public static final String DEFAULTCS = "ISO-8859-1";   /*    * Parameter handling    */   /**    * Format one HTTP parameter    *     * @param name    *          Parameter name    * @param value    *          Parameter value (URLEncoded using default chracter set)    * @return Parameter text (ampersand+name=url-encoded-value)    */   public static String formatParameter(String name, String value) {     return formatParameter(name, value, "&", DEFAULTCS);   }   /**    * Format one HTTP parameter    *     * @param name    *          Parameter name    * @param value    *          Parameter value (will be URLEncoded)    * @param separator    *          Character to separate parameters    * @param cs    *          Character set specification (utf-8, etc)    * @return Parameter text (separator+name=url-encoded-value)    */   public static String formatParameter(String name, String value, String separator, String cs) {     StringBuilder parameter = new StringBuilder();     parameter.append(separator);     parameter.append(name);     parameter.append('=');     try {       parameter.append(URLEncoder.encode(value, cs));     } catch (UnsupportedEncodingException exception) {       throw new IllegalArgumentException("Invalid character set: \"" + cs + "\"");     }     return parameter.toString();   }   /*    * HTTP status values    */   /**    * Informational status?    *     * @return true if so    */   public static boolean isHttpInfo(int status) {     return ((status / 100) == 1);   }   /**    * HTTP redirect?    *     * @return true if so    */   public static boolean isHttpRedirect(int status) {     return ((status / 100) == 3);   }   /**    * Success status?    *     * @return true if so    */   public static boolean isHttpSuccess(int status) {     return ((status / 100) == 2);   }   /**    * Error in request?    *     * @return true if so    */   public static boolean isHttpRequestError(int status) {     return ((status / 100) == 4);   }   /**    * Server error?    *     * @return true if so    */   public static boolean isHttpServerError(int status) {     return ((status / 100) == 5);   }   /**    * General "did an error occur"?    *     * @return true if so    */   public static boolean isHttpError(int status) {     return isHttpRequestError(status) || isHttpServerError(status);   }   /**    * Set up a simple Map of HTTP request parameters (assumes no duplicate names)    *     * @param request    *          HttpServletRequest object    * @return Map of name=value pairs    */   public static Map getAttributesAsMap(HttpServletRequest request) {     Enumeration enumeration = request.getParameterNames();     HashMap map = new HashMap();     while (enumeration.hasMoreElements()) {       String name = (String) enumeration.nextElement();       map.put(name, request.getParameter(name));     }     return map;   }   /**    * Format a base URL string ( protocol://server[:port] )    *     * @param url    *          URL to format    * @return URL string    */   public static String formatUrl(URL url) throws MalformedURLException {     return formatUrl(url, false);   }   /**    * Format a base URL string ( protocol://server[:port][/file-specification] )    *     * @param url    *          URL to format    * @param preserveFile    *          Keep the /directory/filename portion of the URL?    * @return URL string    */   public static String formatUrl(URL url, boolean preserveFile) throws MalformedURLException {     StringBuilder result;     int port;     result = new StringBuilder(url.getProtocol());     result.append("://");     result.append(url.getHost());     if ((port = url.getPort()) != -1) {       result.append(":");       result.append(String.valueOf(port));     }     if (preserveFile) {       String file = url.getFile();       if (file != null) {         result.append(file);       }     }     return result.toString();   }   /**    * Pull the server [and port] from a URL specification    *     * @param url    *          URL string    * @return server[:port]    */   public static String getServer(String url) {     String server = url;     int protocol, slash;     if ((protocol = server.indexOf("//")) != -1) {       if ((slash = server.substring(protocol + 2).indexOf("/")) != -1) {         server = server.substring(0, protocol + 2 + slash);       }     }     return server;   }   /*    * urlEncodeParameters(): URL component specifications    */   /**    * protocol://server    */   public static final String SERVER = "server";   /**    * /file/specification    */   public static final String FILE = "file";   /**    * ?parameter1=value1&parameter2=value2    */   public static final String PARAMETERS = "parameters";   /**    * /file/specification?parameter1=value1&parameter2=value2    */   public static final String FILEANDPARAMS = "fileandparameters";   /**    * Fetch a component from a URL string    *     * @param url    *          URL String    * @param component    *          name (one of server, file, parameters, fileandparameters)    * @return URL component string (null if none)    */   public static String getUrlComponent(String url, String component) throws MalformedURLException {     String file;     int index;     if (component.equalsIgnoreCase(SERVER)) {       return getServer(url);     }     if (!component.equalsIgnoreCase(FILE) && !component.equalsIgnoreCase(PARAMETERS)         && !component.equalsIgnoreCase(FILEANDPARAMS)) {       throw new IllegalArgumentException(component);     }     file = new URL(url).getFile();     if (file == null) {       return null;     }     /*      * Fetch file and parameters?      */     if (component.equalsIgnoreCase(FILEANDPARAMS)) {       return file;     }     /*      * File portion only?      */     index = file.indexOf('?');     if (component.equalsIgnoreCase(FILE)) {       switch (index) {       case -1: // No parameters         return file;       case 0: // Only parameters (no file)         return null;       default:         return file.substring(0, index);       }     }     /*      * Isolate parameters      */     return (index == -1) ? null : file.substring(index);   }   /**    * URLEncode parameter names and values    *     * @param original    *          Original parameter list (?a=b&c=d)    * @return Possibly encoded parameter list    */   public static String urlEncodeParameters(String original) {     StringBuilder encoded = new StringBuilder();     for (int i = 0; i < original.length(); i++) {       String c = original.substring(i, i + 1);       if (!c.equals("&") && !c.equals("=") && !c.equals("?")) {         c = URLEncoder.encode(c);       }       encoded.append(c);     }     return encoded.toString();   }   /*    * Test    */   public static void main(String[] args) throws Exception {     String u = "http://example.com/dir1/dir2/file.html?parm1=1&param2=2";     System.out.println("Server: " + getUrlComponent(u, "server"));     System.out.println("File: " + getUrlComponent(u, "file"));     System.out.println("Parameters: " + getUrlComponent(u, "parameters"));     System.out.println("File & Parameters: " + getUrlComponent(u, "fileandparameters"));     System.out.println("Bad: " + getUrlComponent(u, "bad"));   } }