⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 container.java

📁 这是一个法律事务所系统源码
💻 JAVA
字号:
/* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowlegement:   *       "This product includes software developed by the  *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowlegement may appear in the software itself, *    if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software *    Foundation" must not be used to endorse or promote products derived *    from this software without prior written permission. For written  *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" *    nor may "Apache" appear in their names without prior written *    permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.tomcat.core;import org.apache.tomcat.context.*;import org.apache.tomcat.util.*;import java.io.*;import java.net.*;import java.util.*;/** * A group of resources, with some common properties. * Container is similar with Apache "dir_conf" structue. * * A container will be selected by best-matching using the * alghoritms described in the servlet API. * The matching container will determine the handler and the * security properties associated with the request. * It will also have a chance to add a number of per/container * interceptors. * * In Servlet terminology there are many types of containers: * virtual host, context, prefix map, extension map, security * prefix and extension maps. *  * It is possible to add/remove containers at runtime (usefull * for Invoker or Jsp servlet - if they want to avoid double * servlet call overhead ). To make this possible for Jsps we * also need to factor out the dependency check and reloading. */public class Container implements Cloneable {    /* It is not yet finalized - it is possible to use more     * "rules" for matching ( if future APIs will define that ).     * You can use notes or attributes to extend the model -     * the attributes that are defined and have get/set methods     * are the one defined in the API and with wide use.     */    // The "controler"    private ContextManager contextM;    // The webapp including this container, if any    Context context;    // The type of the mapping    public static final int UNKNOWN_MAP=0;    public static final int PATH_MAP=1;    public static final int PREFIX_MAP=2;    public static final int EXTENSION_MAP=3;    public static final int DEFAULT_MAP=4;    int mapType=0;        // Common map parameters ( path prefix, ext, etc)    String transport;    String path;    String proto;    String vhosts[];        // Container attributes - it's better to use    // notes, as the access time is much smaller    private Hashtable attributes = new Hashtable();    /** Per/container interceptors.	XXX Not implemented, it's easy to wire it in ( 2-3 h).     */    Vector contextInterceptors=new Vector();    Vector requestInterceptors=new Vector();    // interceptor cache - avoid Vector enumeration    ContextInterceptor cInterceptors[];    RequestInterceptor rInterceptors[];    /** The handler associated with this container.     */    ServletWrapper handler;        /** Security constraints associated with this Container     */    String roles[]=null;    String methods[]=null;        public Container() {    }    /** Get the context manager     */    public ContextManager getContextManager() {	if( contextM==null ) {	    /* assert */	    throw new RuntimeException( "Assert: container.contextM==null" );	}	return contextM;    }    public void setContextManager(ContextManager cm) {	contextM=cm;    }    /** Set the context, if this container is part of a web application.     *  Right now all container in use have a context.     */    public void setContext( Context ctx ) {	this.context=ctx;    }    /** The parent web application, if any.      */    public Context getContext() {	return context;    }        // -------------------- Mapping LHS --------------------               /** Return the type of the mapping ( extension, prefix, default, etc)     */    public int getMapType() {	if( mapType!=0) return mapType;	// What happens with "" or null ?	// XXX Which one is default servlet ? API doesn't say,	// but people expect it to work.	if( path==null ||	    path.equals("" ) ||	    path.equals( "/")) {	    mapType=DEFAULT_MAP;	} else if (path.startsWith("/") &&	    path.endsWith("/*")) {	    mapType=PREFIX_MAP;	} else if (path.startsWith("*.")) {	    mapType=EXTENSION_MAP;	} else {	    mapType=PATH_MAP;	}	return mapType;    }    /** The mapping string that creates this Container.     *  Not that this is an un-parsed string, like a regexp.     */    public void setPath( String path ) {	// XXX use a better name - setMapping for example	if( path==null)	    this.path=""; // default mapping	else	    this.path=path.trim();    }    /** Return the path     */    public String getPath() {	return path;    }    /** Set the protocol - if it's set it will be used     *  in mapping     */    public void setProtocol( String protocol ) {	this.proto=protocol;    }    /** Protocol matching. With Servlet 2.2 the protocol     * can be used only with security mappings, not with     * handler ( servlet ) maps    */    public String getProtocol() {	return proto;    }    /** The transport - another component of the matching.     *  Defined only for security mappings.     */    public void setTransport(String transport ) {	this.transport=transport;    }    /** The transport - another component of the matching.     *  Defined only for security mappings.     */    public String getTransport() {	return transport;    }    /** Any alias that can match a particular vhost     */    public String[] getVhosts() {	return vhosts;    }    /** Any alias that can match a particular vhost     */    public void setVhosts(String vhosts[]) {	this.vhosts=vhosts;    }        /** If not null, this container can only be accessed by users     *  in roles.     */    public String []getMethods() {	return methods;    }    /** If not null, this container can only be accessed by users	in roles.    */    public void setMethods( String m[] ) {	this.methods=m;    }    // -------------------- Mapping RHS --------------------        /** The handler for this container     */    public ServletWrapper getHandler() {	return handler;    }    /** The handler ( servlet ) for this container     */    public void setHandler(ServletWrapper h) {	handler=h;    }    /** If not null, this container can only be accessed by users     *  in roles.     */    public String []getRoles() {	return roles;    }    /** If not null, this container can only be accessed by users	in roles.    */    public void setRoles( String roles[] ) {	this.roles=roles;    }    // -------------------- Per-container interceptors        /** Add a per/container context interceptor. It will be notified     *  of all context events happening inside this container.     *   XXX incomplete implementation     */    public void addContextInterceptor( ContextInterceptor ci) {	contextInterceptors.addElement( ci );    }    /** Return the context interceptors as an array.     *	For performance reasons we use an array instead of     *  returning the vector - the interceptors will not change at     *	runtime and array access is faster and easier than vector     *	access     */    public ContextInterceptor[] getContextInterceptors() {	if( cInterceptors == null ||	    cInterceptors.length != contextInterceptors.size()) {	    cInterceptors=new ContextInterceptor[contextInterceptors.size()];	    for( int i=0; i<cInterceptors.length; i++ ) {		cInterceptors[i]=(ContextInterceptor)contextInterceptors.		    elementAt(i);	    }	}	return cInterceptors;    }    /** Add a per/container request interceptor. It will be called back for     *  all operations for requests that are mapped to this container.     *  Note that all global interceptors will be called first.     *   XXX incomplete implementation.     */    public void addRequestInterceptor( RequestInterceptor ci) {	requestInterceptors.addElement( ci );    }    /** Return the context interceptors as an array.	For performance reasons we use an array instead of	returning the vector - the interceptors will not change at	runtime and array access is faster and easier than vector	access    */    public RequestInterceptor[] getRequestInterceptors() {	if( rInterceptors == null ||	    rInterceptors.length != requestInterceptors.size())	{	    rInterceptors=new RequestInterceptor[requestInterceptors.size()];	    for( int i=0; i<rInterceptors.length; i++ ) {		rInterceptors[i]=(RequestInterceptor)requestInterceptors.		    elementAt(i);	    }	}	return rInterceptors;    }    /** Per container attributes. Not used - can be removed     *  ( it's here for analogy with the other components )     */    public Object getAttribute(String name) {            return attributes.get(name);    }    /** Per container attributes. Not used - can be removed     *  ( it's here for analogy with the other components )     */    public Enumeration getAttributeNames() {        return attributes.keys();    }    /** Per container attributes. Not used - can be removed     *  ( it's here for analogy with the other components )     */    public void setAttribute(String name, Object object) {        attributes.put(name, object);    }    /** Per container attributes. Not used - can be removed     *  ( it's here for analogy with the other components )     */    public void removeAttribute(String name) {        attributes.remove(name);    }    // -------------------- Utils --------------------    /** Print a short string describing the mapping     */    public String toString() {	StringBuffer sb=new StringBuffer();	sb.append( "Ct (" );	if( handler!= null) sb.append( handler.toString() );	if( roles!=null) {	    	sb.append(" Roles: ");		for( int i=0; i< roles.length; i++ )		    sb.append(" ").append( roles[i]);	}	sb.append( " )");	return sb.toString();    }    public Container getClone() {	try {	    return (Container)this.clone();	} catch( CloneNotSupportedException ex ) {	    return this;	}    }    // -------------------- Per-Container "notes"    Object notes[]=new Object[ContextManager.MAX_NOTES];    /** See ContextManager comments.     */    public void setNote( int pos, Object value ) {	notes[pos]=value;    }    public Object getNote( int pos ) {	return notes[pos];    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -