View Javadoc
1 package org.apache.turbine.util; 2 3 /* ==================================================================== 4 * The Apache Software License, Version 1.1 5 * 6 * Copyright (c) 2001 The Apache Software Foundation. All rights 7 * reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in 18 * the documentation and/or other materials provided with the 19 * distribution. 20 * 21 * 3. The end-user documentation included with the redistribution, 22 * if any, must include the following acknowledgment: 23 * "This product includes software developed by the 24 * Apache Software Foundation (http://www.apache.org/)." 25 * Alternately, this acknowledgment may appear in the software itself, 26 * if and wherever such third-party acknowledgments normally appear. 27 * 28 * 4. The names "Apache" and "Apache Software Foundation" and 29 * "Apache Turbine" must not be used to endorse or promote products 30 * derived from this software without prior written permission. For 31 * written permission, please contact apache@apache.org. 32 * 33 * 5. Products derived from this software may not be called "Apache", 34 * "Apache Turbine", nor may "Apache" appear in their name, without 35 * prior written permission of the Apache Software Foundation. 36 * 37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 48 * SUCH DAMAGE. 49 * ==================================================================== 50 * 51 * This software consists of voluntary contributions made by many 52 * individuals on behalf of the Apache Software Foundation. For more 53 * information on the Apache Software Foundation, please see 54 * <http://www.apache.org/>;. 55 */ 56 57 import java.util.StringTokenizer; 58 import javax.servlet.ServletConfig; 59 import javax.servlet.ServletContext; 60 import javax.servlet.http.HttpServletRequest; 61 62 import org.apache.turbine.Turbine; 63 64 /*** 65 * This is where common Servlet manipulation routines should go. 66 * 67 * @author <a href="mailto:gonzalo.diethelm@sonda.com">Gonzalo Diethelm</a> 68 * @version $Id: ServletUtils.java,v 1.1.1.1 2001/08/16 05:09:41 jvanzyl Exp $ 69 */ 70 public class ServletUtils 71 { 72 /*** 73 * The default HTTP port number. 74 */ 75 public static final int HTTP_PORT = 80; 76 77 /*** 78 * The default HTTPS port number. 79 */ 80 public static final int HTTPS_PORT = 443; 81 82 /*** 83 * The default FTP port number. 84 */ 85 public static final int FTP_PORT = 20; 86 87 /*** 88 * The part of the URI which separates the protocol indicator (i.e. the 89 * scheme) from the rest of the URI. 90 */ 91 public static final String URI_SCHEME_SEPARATOR = "://"; 92 93 /*** 94 * Expands a string that points to a relative path or path list, 95 * leaving it as an absolute path based on the servlet context. 96 * It will return null if the text is empty or the config object 97 * is null. 98 * 99 * @param config The ServletConfig. 100 * @param text The String containing a path or path list. 101 * @return A String with the expanded path or path list. 102 */ 103 public static String expandRelative( ServletConfig config, 104 String text ) 105 { 106 if (text == null || text.length() <= 0) 107 { 108 return text; 109 } 110 111 if (config == null) 112 { 113 return null; 114 } 115 116 // attempt to make it relative 117 if (!text.startsWith("/") && !text.startsWith("./") 118 && !text.startsWith("//") && !text.startsWith(".//")) 119 { 120 StringBuffer sb = new StringBuffer(); 121 sb.append ("./"); 122 sb.append (text); 123 text = sb.toString(); 124 } 125 126 ServletContext context = config.getServletContext(); 127 String base = context.getRealPath("/"); 128 if(base == null) 129 { 130 base = config.getInitParameter(Turbine.BASEDIR_KEY); 131 } 132 if(base == null) 133 { 134 return text; 135 } 136 137 String separator = System.getProperty("path.separator"); 138 StringTokenizer tokenizer = new StringTokenizer(text, 139 separator); 140 StringBuffer buffer = new StringBuffer(); 141 while(tokenizer.hasMoreTokens()) 142 { 143 buffer.append(base).append(tokenizer.nextToken()); 144 if(tokenizer.hasMoreTokens()) 145 { 146 buffer.append(separator); 147 } 148 } 149 return buffer.toString(); 150 } 151 152 /*** 153 * Defaults to the scheme used in the supplied request. 154 * 155 * @see #hostURL(HttpServletRequest req, String proto) 156 */ 157 public static StringBuffer hostURL(HttpServletRequest req) 158 { 159 return hostURL(req, null); 160 } 161 162 /*** 163 * Returns a URL fragment derived from the provided HTTP request, 164 * including the protocol used to address the server (if non-standard 165 * for HTTP/HTTPS). Returns the fragment as a buffer 166 * 167 * @param req The request to extract information from. 168 * @param scheme The protocol indicator to prefix the host name with, or 169 * the protocol used to address the server with if <code>null</code>. 170 * @return The desired URL fragment. 171 */ 172 public static StringBuffer hostURL(HttpServletRequest req, String scheme) 173 { 174 if (scheme == null) 175 { 176 scheme = req.getScheme(); 177 } 178 StringBuffer url = new StringBuffer() 179 .append(scheme) 180 .append(URI_SCHEME_SEPARATOR) 181 .append(req.getServerName()); 182 int port = req.getServerPort(); 183 if (! (("http".equalsIgnoreCase(scheme) && port == HTTP_PORT) || 184 ("https".equalsIgnoreCase(scheme) && port == HTTPS_PORT) || 185 ("ftp".equalsIgnoreCase(scheme) && port == FTP_PORT)) ) 186 { 187 url.append(':').append(port); 188 } 189 return url; 190 } 191 }

This page was automatically generated by Maven