001: package org.apache.turbine.util;
002:
003: /*
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: import java.util.StringTokenizer;
023: import javax.servlet.ServletConfig;
024: import javax.servlet.ServletContext;
025: import javax.servlet.http.HttpServletRequest;
026:
027: import org.apache.commons.lang.StringUtils;
028:
029: import org.apache.turbine.Turbine;
030: import org.apache.turbine.util.uri.URIConstants;
031:
032: /**
033: * This is where common Servlet manipulation routines should go.
034: *
035: * @author <a href="mailto:gonzalo.diethelm@sonda.com">Gonzalo Diethelm</a>
036: * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
037: * @version $Id: ServletUtils.java 534527 2007-05-02 16:10:59Z tv $
038: */
039: public class ServletUtils {
040: /**
041: * The default HTTP port number.
042: * @deprecated use URIConstants.HTTP_PORT
043: */
044: public static final int HTTP_PORT = URIConstants.HTTP_PORT;
045:
046: /**
047: * The default HTTPS port number.
048: * @deprecated use URIConstants.HTTPS_PORT
049: */
050: public static final int HTTPS_PORT = URIConstants.HTTPS_PORT;
051:
052: /**
053: * The default FTP port number.
054: * @deprecated use URIConstants.FTP_PORT
055: */
056: public static final int FTP_PORT = URIConstants.FTP_PORT;
057:
058: /**
059: * The part of the URI which separates the protocol indicator (i.e. the
060: * scheme) from the rest of the URI.
061: * @deprecated use URIConstants.URI_SCHEME_SEPARATOR;
062: */
063: public static final String URI_SCHEME_SEPARATOR = URIConstants.URI_SCHEME_SEPARATOR;
064:
065: /**
066: * Expands a string that points to a relative path or path list,
067: * leaving it as an absolute path based on the servlet context.
068: * It will return null if the text is empty or the config object
069: * is null.
070: *
071: * @param config The ServletConfig.
072: * @param text The String containing a path or path list.
073: * @return A String with the expanded path or path list.
074: */
075: public static String expandRelative(ServletConfig config,
076: String text) {
077: if (StringUtils.isEmpty(text)) {
078: return text;
079: }
080:
081: if (config == null) {
082: return null;
083: }
084:
085: // attempt to make it relative
086: if (!text.startsWith("/") && !text.startsWith("./")
087: && !text.startsWith("\\") && !text.startsWith(".\\")) {
088: StringBuffer sb = new StringBuffer();
089: sb.append("./");
090: sb.append(text);
091: text = sb.toString();
092: }
093:
094: ServletContext context = config.getServletContext();
095: String base = context.getRealPath("/");
096:
097: base = (StringUtils.isEmpty(base)) ? config
098: .getInitParameter(Turbine.BASEDIR_KEY) : base;
099:
100: if (StringUtils.isEmpty(base)) {
101: return text;
102: }
103:
104: String separator = System.getProperty("path.separator");
105:
106: StringTokenizer tokenizer = new StringTokenizer(text, separator);
107: StringBuffer buffer = new StringBuffer();
108: while (tokenizer.hasMoreTokens()) {
109: buffer.append(base).append(tokenizer.nextToken());
110: if (tokenizer.hasMoreTokens()) {
111: buffer.append(separator);
112: }
113: }
114: return buffer.toString();
115: }
116:
117: /**
118: * Defaults to the scheme used in the supplied request.
119: *
120: * @see #hostURL(HttpServletRequest req, String proto)
121: * @deprecated Use ServerData(req).getHostUrl()
122: */
123: public static StringBuffer hostURL(HttpServletRequest req) {
124: return hostURL(req, null);
125: }
126:
127: /**
128: * Returns a URL fragment derived from the provided HTTP request,
129: * including the protocol used to address the server (if non-standard
130: * for HTTP/HTTPS). Returns the fragment as a buffer
131: *
132: * @param req The request to extract information from.
133: * @param scheme The protocol indicator to prefix the host name with, or
134: * the protocol used to address the server with if <code>null</code>.
135: * @return The desired URL fragment.
136: * @deprecated Use ServerData(req).getHostUrl()
137: */
138: public static StringBuffer hostURL(HttpServletRequest req,
139: String scheme) {
140: ServerData serverData = new ServerData(req);
141:
142: if (StringUtils.isNotEmpty(scheme)) {
143: serverData.setServerScheme(scheme);
144: }
145:
146: StringBuffer sb = new StringBuffer();
147:
148: serverData.getHostUrl(sb);
149:
150: return sb;
151: }
152: }
|