152 lines · 4.8 KB · Java
RawDownload
/* * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.net.httpserver;import java.io.*;import java.util.*;import java.util.logging.Logger;import com.sun.net.httpserver.*;import com.sun.net.httpserver.spi.*; /** * HttpContext represents a mapping between a protocol (http or https) together with a root URI path * to a {@link HttpHandler} which is invoked to handle requests destined * for the protocol/path on the associated HttpServer. * <p> * HttpContext instances are created by {@link HttpServer#createContext(String,String,HttpHandler,Object)} * <p> */class HttpContextImpl extends HttpContext {     private String path;    private String protocol;    private HttpHandler handler;    private Map<String,Object> attributes = new HashMap<String,Object>();    private ServerImpl server;    /* system filters, not visible to applications */    private LinkedList<Filter> sfilters = new LinkedList<Filter>();    /* user filters, set by applications */    private LinkedList<Filter> ufilters = new LinkedList<Filter>();    private Authenticator authenticator;    private AuthFilter authfilter;     /**     * constructor is package private.     */    HttpContextImpl (String protocol, String path, HttpHandler cb, ServerImpl server) {        if (path == null || protocol == null || path.length() < 1 || path.charAt(0) != '/') {            throw new IllegalArgumentException ("Illegal value for path or protocol");        }        this.protocol = protocol.toLowerCase();        this.path = path;        if (!this.protocol.equals ("http") && !this.protocol.equals ("https")) {            throw new IllegalArgumentException ("Illegal value for protocol");        }        this.handler = cb;        this.server = server;        authfilter = new AuthFilter(null);        sfilters.add (authfilter);    }     /**     * returns the handler for this context     * @return the HttpHandler for this context     */    public HttpHandler getHandler () {        return handler;    }     public void setHandler (HttpHandler h) {        if (h == null) {            throw new NullPointerException ("Null handler parameter");        }        if (handler != null) {            throw new IllegalArgumentException ("handler already set");        }        handler = h;    }     /**     * returns the path this context was created with     * @return this context's path     */    public String getPath() {        return path;    }     /**     * returns the server this context was created with     * @return this context's server     */    public HttpServer getServer () {        return server.getWrapper();    }     ServerImpl getServerImpl () {        return server;    }     /**     * returns the protocol this context was created with     * @return this context's path     */    public String getProtocol() {        return protocol;    }     /**     * returns a mutable Map, which can be used to pass     * configuration and other data to Filter modules     * and to the context's exchange handler.     * <p>     * Every attribute stored in this Map will be visible to     * every HttpExchange processed by this context     */    public Map<String,Object> getAttributes() {        return attributes;    }     public List<Filter> getFilters () {        return ufilters;    }     List<Filter> getSystemFilters () {        return sfilters;    }     public Authenticator setAuthenticator (Authenticator auth) {        Authenticator old = authenticator;        authenticator = auth;        authfilter.setAuthenticator (auth);        return old;    }     public Authenticator getAuthenticator () {        return authenticator;    }    Logger getLogger () {        return server.getLogger();    }}