Java tutorial
/* GNU LESSER GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Contact info: lobochief@users.sourceforge.net */ /* * Created on Jun 12, 2005 */ import java.net.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.logging.*; public class Urls { private static final Logger logger = Logger.getLogger(Urls.class.getName()); public static final DateFormat PATTERN_RFC1123 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US); static { DateFormat df = PATTERN_RFC1123; df.setTimeZone(TimeZone.getTimeZone("GMT")); } private Urls() { super(); } /** Whether the URL refers to a resource in the local file system. */ public static boolean isLocal(java.net.URL url) { if (isLocalFile(url)) { return true; } String protocol = url.getProtocol(); if ("jar".equalsIgnoreCase(protocol)) { String path = url.getPath(); int emIdx = path.lastIndexOf('!'); String subUrlString = emIdx == -1 ? path : path.substring(0, emIdx); try { URL subUrl = new URL(subUrlString); return isLocal(subUrl); } catch (java.net.MalformedURLException mfu) { return false; } } else { return false; } } /** Whether the URL is a file in the local file system. */ public static boolean isLocalFile(java.net.URL url) { String scheme = url.getProtocol(); return "file".equalsIgnoreCase(scheme) && !hasHost(url); } public static boolean hasHost(java.net.URL url) { String host = url.getHost(); return host != null && !"".equals(host); } /** * Creates an absolute URL in a manner equivalent to * major browsers. */ public static URL createURL(URL baseUrl, String relativeUrl) throws java.net.MalformedURLException { return new URL(baseUrl, relativeUrl); } /** * Returns the time when the document should be considered expired. * The time will be zero if the document always needs to be revalidated. * It will be <code>null</code> if no expiration time is specified. */ public static Long getExpiration(URLConnection connection, long baseTime) { String cacheControl = connection.getHeaderField("Cache-Control"); if (cacheControl != null) { StringTokenizer tok = new StringTokenizer(cacheControl, ","); while (tok.hasMoreTokens()) { String token = tok.nextToken().trim().toLowerCase(); if ("must-revalidate".equals(token)) { return new Long(0); } else if (token.startsWith("max-age")) { int eqIdx = token.indexOf('='); if (eqIdx != -1) { String value = token.substring(eqIdx + 1).trim(); int seconds; try { seconds = Integer.parseInt(value); return new Long(baseTime + seconds * 1000); } catch (NumberFormatException nfe) { logger.warning("getExpiration(): Bad Cache-Control max-age value: " + value); // ignore } } } } } String expires = connection.getHeaderField("Expires"); if (expires != null) { try { synchronized (PATTERN_RFC1123) { Date expDate = PATTERN_RFC1123.parse(expires); return new Long(expDate.getTime()); } } catch (java.text.ParseException pe) { int seconds; try { seconds = Integer.parseInt(expires); return new Long(baseTime + seconds * 1000); } catch (NumberFormatException nfe) { logger.warning("getExpiration(): Bad Expires header value: " + expires); } } } return null; } private static String getDefaultCharset(URLConnection connection) { URL url = connection.getURL(); if (Urls.isLocalFile(url)) { String charset = System.getProperty("file.encoding"); return charset == null ? "ISO-8859-1" : charset; } else { return "ISO-8859-1"; } } public static String getNoRefForm(URL url) { String host = url.getHost(); int port = url.getPort(); String portText = port == -1 ? "" : ":" + port; String userInfo = url.getUserInfo(); String userInfoText = userInfo == null || userInfo.length() == 0 ? "" : userInfo + "@"; String hostPort = host == null || host.length() == 0 ? "" : "//" + userInfoText + host + portText; return url.getProtocol() + ":" + hostPort + url.getFile(); } }