Save This Page
Home » openjdk-7 » java » net » [javadoc | source]
    1   /*
    2    * Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Sun designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Sun in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   22    * CA 95054 USA or visit www.sun.com if you need additional information or
   23    * have any questions.
   24    */
   25   
   26   package java.net;
   27   
   28   import java.io.IOException;
   29   import java.util.Map;
   30   import java.util.List;
   31   import sun.security.util.SecurityConstants;
   32   
   33   /**
   34    * Represents implementations of URLConnection caches. An instance of
   35    * such a class can be registered with the system by doing
   36    * ResponseCache.setDefault(ResponseCache), and the system will call
   37    * this object in order to:
   38    *
   39    *    <ul><li>store resource data which has been retrieved from an
   40    *            external source into the cache</li>
   41    *         <li>try to fetch a requested resource that may have been
   42    *            stored in the cache</li>
   43    *    </ul>
   44    *
   45    * The ResponseCache implementation decides which resources
   46    * should be cached, and for how long they should be cached. If a
   47    * request resource cannot be retrieved from the cache, then the
   48    * protocol handlers will fetch the resource from its original
   49    * location.
   50    *
   51    * The settings for URLConnection#useCaches controls whether the
   52    * protocol is allowed to use a cached response.
   53    *
   54    * For more information on HTTP caching, see <a
   55    * href="http://www.ietf.org/rfc/rfc2616.txt""><i>RFC&nbsp;2616: Hypertext
   56    * Transfer Protocol -- HTTP/1.1</i></a>
   57    *
   58    * @author Yingxian Wang
   59    * @since 1.5
   60    */
   61   public abstract class ResponseCache {
   62   
   63       /**
   64        * The system wide cache that provides access to a url
   65        * caching mechanism.
   66        *
   67        * @see #setDefault(ResponseCache)
   68        * @see #getDefault()
   69        */
   70       private static ResponseCache theResponseCache;
   71   
   72       /**
   73        * Gets the system-wide response cache.
   74        *
   75        * @throws  SecurityException
   76        *          If a security manager has been installed and it denies
   77        * {@link NetPermission}<tt>("getResponseCache")</tt>
   78        *
   79        * @see #setDefault(ResponseCache)
   80        * @return the system-wide <code>ResponseCache</code>
   81        * @since 1.5
   82        */
   83       public synchronized  static ResponseCache getDefault() {
   84           SecurityManager sm = System.getSecurityManager();
   85           if (sm != null) {
   86               sm.checkPermission(SecurityConstants.GET_RESPONSECACHE_PERMISSION);
   87           }
   88           return theResponseCache;
   89       }
   90   
   91       /**
   92        * Sets (or unsets) the system-wide cache.
   93        *
   94        * Note: non-standard procotol handlers may ignore this setting.
   95        *
   96        * @param responseCache The response cache, or
   97        *          <code>null</code> to unset the cache.
   98        *
   99        * @throws  SecurityException
  100        *          If a security manager has been installed and it denies
  101        * {@link NetPermission}<tt>("setResponseCache")</tt>
  102        *
  103        * @see #getDefault()
  104        * @since 1.5
  105        */
  106       public synchronized static void setDefault(ResponseCache responseCache) {
  107           SecurityManager sm = System.getSecurityManager();
  108           if (sm != null) {
  109               sm.checkPermission(SecurityConstants.SET_RESPONSECACHE_PERMISSION);
  110           }
  111           theResponseCache = responseCache;
  112       }
  113   
  114       /**
  115        * Retrieve the cached response based on the requesting uri,
  116        * request method and request headers. Typically this method is
  117        * called by the protocol handler before it sends out the request
  118        * to get the network resource. If a cached response is returned,
  119        * that resource is used instead.
  120        *
  121        * @param uri a <code>URI</code> used to reference the requested
  122        *            network resource
  123        * @param rqstMethod a <code>String</code> representing the request
  124        *            method
  125        * @param rqstHeaders - a Map from request header
  126        *            field names to lists of field values representing
  127        *            the current request headers
  128        * @return a <code>CacheResponse</code> instance if available
  129        *          from cache, or null otherwise
  130        * @throws  IOException if an I/O error occurs
  131        * @throws  IllegalArgumentException if any one of the arguments is null
  132        *
  133        * @see     java.net.URLConnection#setUseCaches(boolean)
  134        * @see     java.net.URLConnection#getUseCaches()
  135        * @see     java.net.URLConnection#setDefaultUseCaches(boolean)
  136        * @see     java.net.URLConnection#getDefaultUseCaches()
  137        */
  138       public abstract CacheResponse
  139           get(URI uri, String rqstMethod, Map<String, List<String>> rqstHeaders)
  140           throws IOException;
  141   
  142       /**
  143        * The protocol handler calls this method after a resource has
  144        * been retrieved, and the ResponseCache must decide whether or
  145        * not to store the resource in its cache. If the resource is to
  146        * be cached, then put() must return a CacheRequest object which
  147        * contains an OutputStream that the protocol handler will
  148        * use to write the resource into the cache. If the resource is
  149        * not to be cached, then put must return null.
  150        *
  151        * @param uri a <code>URI</code> used to reference the requested
  152        *            network resource
  153        * @param conn - a URLConnection instance that is used to fetch
  154        *            the response to be cached
  155        * @return a <code>CacheRequest</code> for recording the
  156        *            response to be cached. Null return indicates that
  157        *            the caller does not intend to cache the response.
  158        * @throws IOException if an I/O error occurs
  159        * @throws IllegalArgumentException if any one of the arguments is
  160        *            null
  161        */
  162       public abstract CacheRequest put(URI uri, URLConnection conn)  throws IOException;
  163   }

Save This Page
Home » openjdk-7 » java » net » [javadoc | source]