HttpUtil.java
/*
* $Source$
* $Revision$
*
* Copyright (C) 2001 Myles Chippendale
*
* Part of Melati (http://melati.org), a framework for the rapid
* development of clean, maintainable web applications.
*
* Melati is free software; Permission is granted to copy, distribute
* and/or modify this software under the terms either:
*
* a) the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version,
*
* or
*
* b) any version of the Melati Software License, as published
* at http://melati.org
*
* You should have received a copy of the GNU General Public License and
* the Melati Software License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
* GNU General Public License and visit http://melati.org to obtain the
* Melati Software License.
*
* Feel free to contact the Developers of Melati (http://melati.org),
* if you would like to work out a different arrangement than the options
* outlined here. It is our intention to allow Melati to be used by as
* wide an audience as possible.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Contact details for copyright holder:
*
* Myles Chippendale <mylesc At paneris.org>
*/
package org.melati.util;
import javax.servlet.http.HttpServletRequest;
/**
* An assortment of useful things to do with <code>Http</code>.
*/
public final class HttpUtil {
private HttpUtil() {}
/**
* Add a Zone URL to buffer.
*
* @param url an empty StringBuffer to append to
* @param request the request to interrogate
*/
public static void appendZoneURL(StringBuffer url,
HttpServletRequest request) {
String scheme = request.getScheme();
url.append(scheme);
url.append("://");
url.append(request.getServerName());
if ((scheme.equals("http") &&
request.getServerPort() != 80
)
||
(scheme.equals("https") &&
request.getServerPort() != 443)) {
url.append(':');
url.append(request.getServerPort());
}
appendRelativeZoneURL(url,request);
}
/**
* Return the server URL.
*
* @param request the request to interrogate
*/
public static String getServerURL(HttpServletRequest request) {
StringBuffer url = new StringBuffer();
String scheme = request.getScheme();
url.append(scheme);
url.append("://");
url.append(request.getServerName());
if ((scheme.equals("http") &&
request.getServerPort() != 80
)
||
(scheme.equals("https") &&
request.getServerPort() != 443)) {
url.append(':');
url.append(request.getServerPort());
}
return url.toString();
}
/**
* Append relative servlet zone url.
*
* Note that this function should return
* /zone/servlet from a request of form
* http://host/zone/servlet/pathinfo?querystring
* on all servlet API versions greater than 2.0.
* In 2.0 the zone was returned in the ServletPath
* it is now in the ContextPath.
* @param url StringBuffer to append to
* @param request the request to interrogate
*/
public static void appendRelativeZoneURL (
StringBuffer url, HttpServletRequest request) {
url.append(request.getContextPath());
String servletPath = request.getServletPath();
if (servletPath != null && !servletPath.equals("")) {
url.append(servletPath.substring(0, servletPath.lastIndexOf('/')));
if (servletPath.lastIndexOf('/') == -1)
throw new MelatiBugMelatiException(
"Servlet Path does not contain a forward slash:" + servletPath);
}
}
/**
* Retrieve a Zone url.
* @param request the request to interrogate
* @return an Url up to the zone specification as a String
*/
public static String zoneURL(HttpServletRequest request) {
StringBuffer url = new StringBuffer();
appendZoneURL(url, request);
return url.toString();
}
/**
* Retrieve a Servlet url from a request.
* @param request the request to interrogate
* @return an Url up to the servlet specification as a String
*/
public static String servletURL(HttpServletRequest request) {
StringBuffer url = new StringBuffer();
appendZoneURL(url, request);
String servlet = request.getServletPath();
if (servlet != null && !servlet.equals(""))
url.append(servlet.substring(
servlet.lastIndexOf('/'), servlet.length()));
return url.toString();
}
/**
* Retrieve a relative url from a request.
* @param request the request to interrogate
* @return a relative Url
*/
public static String getRelativeRequestURL(HttpServletRequest request) {
StringBuffer url = new StringBuffer();
url.append(request.getContextPath());
if (request.getServletPath() != null) url.append(request.getServletPath());
if (request.getPathInfo() != null) url.append(request.getPathInfo());
return url.toString();
}
/**
* @param url An url or relative url which may end in a slash
* @param relativeUrl A relative url which may start with a slash
* @return an url without a duplicated slash at the join
*/
public static String concatenateUrls(String url, String relativeUrl) {
if (url.endsWith("/") && relativeUrl.startsWith("/"))
return url.substring(0, url.lastIndexOf('/')) + relativeUrl;
else
return url + relativeUrl;
}
}