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

📄 servletholder.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// ========================================================================// Copyright 199-2004 Mort Bay Consulting Pty. Ltd.// ------------------------------------------------------------------------// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.// ========================================================================package org.mortbay.jetty.servlet;import java.io.IOException;import java.security.Principal;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.Stack;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.SingleThreadModel;import javax.servlet.UnavailableException;import org.mortbay.jetty.HttpConnection;import org.mortbay.jetty.Request;import org.mortbay.jetty.handler.ContextHandler;import org.mortbay.jetty.security.SecurityHandler;import org.mortbay.jetty.security.UserRealm;import org.mortbay.log.Log;/* --------------------------------------------------------------------- *//** Servlet Instance and Context Holder. * Holds the name, params and some state of a javax.servlet.Servlet * instance. It implements the ServletConfig interface. * This class will organise the loading of the servlet when needed or * requested. * * @author Greg Wilkins */public class ServletHolder extends Holder    implements Comparable{    /* ---------------------------------------------------------------- */    private int _initOrder;    private boolean _initOnStartup=false;    private Map _roleMap;     private String _forcedPath;    private String _runAs;    private UserRealm _realm;            private transient Servlet _servlet;    private transient Config _config;    private transient long _unavailable;    private transient UnavailableException _unavailableEx;        /* ---------------------------------------------------------------- */    /** Constructor .     */    public ServletHolder()    {}        /* ---------------------------------------------------------------- */    /** Constructor for existing servlet.     */    public ServletHolder(Servlet servlet)    {        setServlet(servlet);    }    /* ---------------------------------------------------------------- */    /** Constructor for existing servlet.     */    public ServletHolder(Class servlet)    {        super(servlet);    }    /* ---------------------------------------------------------------- */    /**     * @return The unavailable exception or null if not unavailable     */    public UnavailableException getUnavailableException()    {        return _unavailableEx;    }        /* ------------------------------------------------------------ */    public synchronized void setServlet(Servlet servlet)    {        if (servlet==null || servlet instanceof SingleThreadModel)            throw new IllegalArgumentException();        _extInstance=true;        _servlet=servlet;        setHeldClass(servlet.getClass());        if (getName()==null)            setName(servlet.getClass().getName()+"-"+super.hashCode());    }        /* ------------------------------------------------------------ */    public int getInitOrder()    {        return _initOrder;    }    /* ------------------------------------------------------------ */    /** Set the initialize order.     * Holders with order<0, are initialized on use. Those with     * order>=0 are initialized in increasing order when the handler     * is started.     */    public void setInitOrder(int order)    {        _initOnStartup=true;        _initOrder = order;    }    /* ------------------------------------------------------------ */    /** Comparitor by init order.     */    public int compareTo(Object o)    {        if (o instanceof ServletHolder)        {            ServletHolder sh= (ServletHolder)o;            if (sh==this)                return 0;            if (sh._initOrder<_initOrder)                return 1;            if (sh._initOrder>_initOrder)                return -1;                        int c=(_className!=null && sh._className!=null)?_className.compareTo(sh._className):0;            if (c==0)                c=_name.compareTo(sh._name);            if (c==0)                c=this.hashCode()>o.hashCode()?1:-1;            return c;        }        return 1;    }    /* ------------------------------------------------------------ */    public boolean equals(Object o)    {        return compareTo(o)==0;    }    /* ------------------------------------------------------------ */    public int hashCode()    {        return _name==null?System.identityHashCode(this):_name.hashCode();    }    /* ------------------------------------------------------------ */    /** Link a user role.     * Translate the role name used by a servlet, to the link name     * used by the container.     * @param name The role name as used by the servlet     * @param link The role name as used by the container.     */    public synchronized void setUserRoleLink(String name,String link)    {        if (_roleMap==null)            _roleMap=new HashMap();        _roleMap.put(name,link);    }        /* ------------------------------------------------------------ */    /** get a user role link.     * @param name The name of the role     * @return The name as translated by the link. If no link exists,     * the name is returned.     */    public String getUserRoleLink(String name)    {        if (_roleMap==null)            return name;        String link=(String)_roleMap.get(name);        return (link==null)?name:link;    }    /* ------------------------------------------------------------ */    public Map getRoleMap()    {        return _roleMap;    }        /* ------------------------------------------------------------ */    /**      * @param role Role name that is added to UserPrincipal when this servlet     * is called.      */    public void setRunAs(String role)    {        _runAs=role;    }        /* ------------------------------------------------------------ */    public String getRunAs()    {        return _runAs;    }        /* ------------------------------------------------------------ */    /**     * @return Returns the forcedPath.     */    public String getForcedPath()    {        return _forcedPath;    }        /* ------------------------------------------------------------ */    /**     * @param forcedPath The forcedPath to set.     */    public void setForcedPath(String forcedPath)    {        _forcedPath = forcedPath;    }        /* ------------------------------------------------------------ */    public void doStart()    throws Exception    {        _unavailable=0;        try        {            super.doStart();            checkServletType();        }        catch (UnavailableException ue)        {            makeUnavailable(ue);        }        _config=new Config();        if (_runAs!=null)            _realm=((SecurityHandler)(ContextHandler.getCurrentContext()                    .getContextHandler().getChildHandlerByClass(SecurityHandler.class))).getUserRealm();        if (javax.servlet.SingleThreadModel.class.isAssignableFrom(_class))            _servlet = new SingleThreadedWrapper();        if (_extInstance || _initOnStartup)        {            try            {                initServlet();            }            catch(Exception e)            {                if (_servletHandler.isStartWithUnavailable())                    Log.ignore(e);                else                    throw e;            }        }      }    /* ------------------------------------------------------------ */    public void doStop()    {        Principal user=null;        try        {            // Handle run as            if (_runAs!=null && _realm!=null)                user=_realm.pushRole(null,_runAs);                            if (_servlet!=null)            {                                  try                {                    destroyInstance(_servlet);                }                catch (Exception e)                {                    Log.warn(e);                }            }                        if (!_extInstance)                _servlet=null;                       _config=null;        }        finally        {            super.doStop();            // pop run-as role            if (_runAs!=null && _realm!=null && user!=null)                _realm.popRole(user);         }    }    /* ------------------------------------------------------------ */    public void destroyInstance (Object o)    throws Exception    {        if (o==null)            return;        Servlet servlet =  ((Servlet)o);        servlet.destroy();        getServletHandler().customizeServletDestroy(servlet);    }    /* ------------------------------------------------------------ */    /** Get the servlet.     * @return The servlet     */    public synchronized Servlet getServlet()        throws ServletException    {        // Handle previous unavailability

⌨️ 快捷键说明

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