Home » apache-tomcat-6.0.26-src » org.apache » tomcat » util » [javadoc | source]

    1   /*
    2    * The Apache Software License, Version 1.1
    3    *
    4    * Copyright (c) 1999 The Apache Software Foundation.  All rights 
    5    * reserved.
    6    *
    7    * Redistribution and use in source and binary forms, with or without
    8    * modification, are permitted provided that the following conditions
    9    * are met:
   10    *
   11    * 1. Redistributions of source code must retain the above copyright
   12    *    notice, this list of conditions and the following disclaimer. 
   13    *
   14    * 2. Redistributions in binary form must reproduce the above copyright
   15    *    notice, this list of conditions and the following disclaimer in
   16    *    the documentation and/or other materials provided with the
   17    *    distribution.
   18    *
   19    * 3. The end-user documentation included with the redistribution, if
   20    *    any, must include the following acknowlegement:  
   21    *       "This product includes software developed by the 
   22    *        Apache Software Foundation (http://www.apache.org/)."
   23    *    Alternately, this acknowlegement may appear in the software itself,
   24    *    if and wherever such third-party acknowlegements normally appear.
   25    *
   26    * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   27    *    Foundation" must not be used to endorse or promote products derived
   28    *    from this software without prior written permission. For written 
   29    *    permission, please contact apache@apache.org.
   30    *
   31    * 5. Products derived from this software may not be called "Apache"
   32    *    nor may "Apache" appear in their names without prior written
   33    *    permission of the Apache Group.
   34    *
   35    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   36    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   37    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   38    * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   39    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   40    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   41    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   42    * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   43    * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   44    * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   45    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   46    * SUCH DAMAGE.
   47    * ====================================================================
   48    *
   49    * This software consists of voluntary contributions made by many
   50    * individuals on behalf of the Apache Software Foundation.  For more
   51    * information on the Apache Software Foundation, please see
   52    * <http://www.apache.org/>.
   53    *
   54    * [Additional notices, if required by prior licensing conditions]
   55    *
   56    */ 
   57   
   58   
   59   package org.apache.tomcat.util;
   60   
   61   import java.net.URL;
   62   import java.io.File;
   63   import java.net.MalformedURLException;
   64   import java.io.IOException;
   65   
   66   /**
   67    *
   68    * @author James Todd [gonzo@eng.sun.com]
   69    */
   70   
   71   public class URLUtil {
   72       public static URL resolve(String s)
   73       throws MalformedURLException {
   74           return resolve(s, null);
   75       }
   76   
   77       public static URL resolve(String s, URL url)
   78       throws MalformedURLException {
   79           URL resolve = null;
   80   
   81   	// construct a URL via the following heuristics:
   82   	//
   83   	//    if arg contains ":/" then
   84   	//        assume a valid uri
   85   	//    else if url arg is specified
   86   	//        construct uri
   87   	//    else if an absolute path then
   88   	//        construct file uri
   89   	//    else
   90   	//        construct file uri by prepending the
   91   	//        working directory
   92   
   93   	if (s.indexOf("://") > -1 ||
   94               s.indexOf("file:") > -1 ) {
   95   	    resolve = new URL(s);
   96   	} else if (url != null) {
   97   	    resolve = new URL(url, s);
   98   	} else if (s.startsWith(File.separator) ||
   99               s.startsWith("/") ||
  100   	    (s.length() >= 2 &&
  101   	        Character.isLetter(s.charAt(0)) &&
  102   	        s.charAt(1) == ':')) {
  103               String fName = s;
  104   
  105               try {
  106                   fName = (String)(new File(s)).getCanonicalPath();
  107               } catch (NullPointerException npe) {
  108               } catch (IOException npe) {
  109               }
  110   
  111   	    resolve = new URL("file", "", fName);
  112   	} else {
  113               String path = System.getProperty("user.dir") +
  114                   File.separator + s;
  115   
  116   	    resolve = new URL("file", "", path);
  117   	}
  118   
  119           if (! resolve.getProtocol().equalsIgnoreCase(
  120                   org.apache.tomcat.core.Constants.Request.WAR) &&
  121               resolve.getFile().toLowerCase().endsWith(
  122                   "." + Constants.MIME.WAR)) {
  123               URL u = new URL(Constants.MIME.WAR + ":" +
  124                   resolve.toString());
  125   
  126               resolve = u;
  127           }
  128   
  129           resolve = new URL(trim(resolve.toString(), ".", ".."));
  130           resolve = new URL(trim(resolve.toString(), "./"));
  131   
  132   	return resolve;
  133       }
  134   
  135       private static String trim(String s, String t) {
  136           return trim(s, t, null);
  137       }
  138   
  139       private static String trim(String s, String r, String t) {
  140           while (s.endsWith(r) &&
  141               ((t == null) ? true : (! s.endsWith(t)))) {
  142               int i = s.length() - r.length();
  143   
  144               s = s.substring(0, i);
  145           }
  146   
  147           return s;
  148       }
  149   }

Home » apache-tomcat-6.0.26-src » org.apache » tomcat » util » [javadoc | source]