Add two URI path segments : URI « Network « Java Tutorial






// 
// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// 

/**
 * URI Holder. This class assists with the decoding and encoding or HTTP URI's.
 * It differs from the java.net.URL class as it does not provide communications
 * ability, but it does assist with query string formatting.
 * <P>
 * UTF-8 encoding is used by default for % encoded characters. This may be
 * overridden with the org.mortbay.util.URI.charset system property.
 * 
 * @see UrlEncoded
 * @author Greg Wilkins (gregw)
 */
public class Utils {
  public static final String SLASH = "/";

  /**
   * Add two URI path segments. Handles null and empty paths, path and query
   * params (eg ?a=b or ;JSESSIONID=xxx) and avoids duplicate '/'
   * 
   * @param p1
   *          URI path segment
   * @param p2
   *          URI path segment
   * @return Legally combined path segments.
   */
  public static String addPaths(String p1, String p2) {
    if (p1 == null || p1.length() == 0) {
      if (p1 != null && p2 == null)
        return p1;
      return p2;
    }
    if (p2 == null || p2.length() == 0)
      return p1;

    int split = p1.indexOf(';');
    if (split < 0)
      split = p1.indexOf('?');
    if (split == 0)
      return p2 + p1;
    if (split < 0)
      split = p1.length();

    StringBuffer buf = new StringBuffer(p1.length() + p2.length() + 2);
    buf.append(p1);

    if (buf.charAt(split - 1) == '/') {
      if (p2.startsWith(SLASH)) {
        buf.deleteCharAt(split - 1);
        buf.insert(split - 1, p2);
      } else
        buf.insert(split, p2);
    } else {
      if (p2.startsWith(SLASH))
        buf.insert(split, p2);
      else {
        buf.insert(split, '/');
        buf.insert(split + 1, p2);
      }
    }

    return buf.toString();
  }
}








19.1.URI
19.1.1.Get URI from File
19.1.2.Convert a URL to a URI
19.1.3.Converting Between a URL and a URI
19.1.4.Convert an absolute URI to a URL
19.1.5.Normalize a uri containing ../ and ./ paths.
19.1.6.Converting Between a Filename Path and a URL
19.1.7.A class to represent a Uniform Resource Identifier (URI).
19.1.8.Add parameters stored in the Map to the uri string.
19.1.9.Remove parameters from a uri.
19.1.10.Remove any authorisation details from a URI
19.1.11.URI
19.1.12.Add two URI path segments
19.1.13.Create and resolve URI
19.1.14.Encode a URI path
19.1.15.Find a point in URI where URI can be split into a namespace part and a local name
19.1.16.Get Parent URI
19.1.17.Is Equal URI
19.1.18.Return True if the uri has a scheme