Class ServletHolder

  • All Implemented Interfaces:
    java.lang.Comparable<ServletHolder>, UserIdentity.Scope, Dumpable, LifeCycle

    @ManagedObject("Servlet Holder")
    public class ServletHolder
    extends Holder<javax.servlet.Servlet>
    implements UserIdentity.Scope, java.lang.Comparable<ServletHolder>
    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.

    • Field Detail

      • LOG

        private static final Logger LOG
      • _initOrder

        private int _initOrder
      • _initOnStartup

        private boolean _initOnStartup
      • _roleMap

        private java.util.Map<java.lang.String,​java.lang.String> _roleMap
      • _forcedPath

        private java.lang.String _forcedPath
      • _runAsRole

        private java.lang.String _runAsRole
      • _registration

        private javax.servlet.ServletRegistration.Dynamic _registration
      • _servlet

        private volatile javax.servlet.Servlet _servlet
      • _enabled

        private boolean _enabled
      • APACHE_SENTINEL_CLASS

        public static final java.lang.String APACHE_SENTINEL_CLASS
        See Also:
        Constant Field Values
      • JSP_GENERATED_PACKAGE_NAME

        public static final java.lang.String JSP_GENERATED_PACKAGE_NAME
        See Also:
        Constant Field Values
    • Constructor Detail

      • ServletHolder

        public ServletHolder()
        Constructor .
      • ServletHolder

        public ServletHolder​(Source creator)
        Constructor .
        Parameters:
        creator - the holder source
      • ServletHolder

        public ServletHolder​(javax.servlet.Servlet servlet)
        Constructor for existing servlet.
        Parameters:
        servlet - the servlet
      • ServletHolder

        public ServletHolder​(java.lang.String name,
                             java.lang.Class<? extends javax.servlet.Servlet> servlet)
        Constructor for servlet class.
        Parameters:
        name - the name of the servlet
        servlet - the servlet class
      • ServletHolder

        public ServletHolder​(java.lang.String name,
                             javax.servlet.Servlet servlet)
        Constructor for servlet class.
        Parameters:
        name - the servlet name
        servlet - the servlet
      • ServletHolder

        public ServletHolder​(java.lang.Class<? extends javax.servlet.Servlet> servlet)
        Constructor for servlet class.
        Parameters:
        servlet - the servlet class
    • Method Detail

      • getUnavailableException

        public javax.servlet.UnavailableException getUnavailableException()
        Returns:
        The unavailable exception or null if not unavailable
      • setServlet

        public void setServlet​(javax.servlet.Servlet servlet)
      • setInitOrder

        public void setInitOrder​(int order)
        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.

        Parameters:
        order - the servlet init order
      • compareTo

        public int compareTo​(ServletHolder sh)
        Comparator by init order.
        Specified by:
        compareTo in interface java.lang.Comparable<ServletHolder>
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • setUserRoleLink

        public void setUserRoleLink​(java.lang.String name,
                                    java.lang.String link)
        Link a user role. Translate the role name used by a servlet, to the link name used by the container.
        Parameters:
        name - The role name as used by the servlet
        link - The role name as used by the container.
      • getUserRoleLink

        public java.lang.String getUserRoleLink​(java.lang.String name)
        get a user role link.
        Parameters:
        name - The name of the role
        Returns:
        The name as translated by the link. If no link exists, the name is returned.
      • getForcedPath

        @ManagedAttribute(value="forced servlet path",
                          readonly=true)
        public java.lang.String getForcedPath()
        Returns:
        Returns the forcedPath.
      • setForcedPath

        public void setForcedPath​(java.lang.String forcedPath)
        Parameters:
        forcedPath - The forcedPath to set.
      • setClassFrom

        private void setClassFrom​(ServletHolder holder)
                           throws javax.servlet.ServletException
        Throws:
        javax.servlet.ServletException
      • isEnabled

        public boolean isEnabled()
      • setEnabled

        public void setEnabled​(boolean enabled)
      • doStart

        public void doStart()
                     throws java.lang.Exception
        Overrides:
        doStart in class BaseHolder<javax.servlet.Servlet>
        Throws:
        java.lang.Exception
      • initialize

        public void initialize()
                        throws java.lang.Exception
        Description copied from class: BaseHolder
        Do any setup necessary after starting
        Overrides:
        initialize in class BaseHolder<javax.servlet.Servlet>
        Throws:
        java.lang.Exception - if unable to initialize
      • doStop

        public void doStop()
                    throws java.lang.Exception
        Overrides:
        doStop in class BaseHolder<javax.servlet.Servlet>
        Throws:
        java.lang.Exception
      • destroyInstance

        public void destroyInstance​(java.lang.Object o)
        Overrides:
        destroyInstance in class Holder<javax.servlet.Servlet>
      • predestroyServlet

        private void predestroyServlet​(javax.servlet.Servlet servlet)
      • getServlet

        public javax.servlet.Servlet getServlet()
                                         throws javax.servlet.ServletException
        Get the servlet.
        Returns:
        The servlet
        Throws:
        javax.servlet.ServletException - if unable to init the servlet on first use
      • getServletInstance

        public javax.servlet.Servlet getServletInstance()
        Get the servlet instance (no initialization done).
        Returns:
        The servlet or null
      • checkServletType

        public void checkServletType()
                              throws javax.servlet.UnavailableException
        Check to ensure class of servlet is acceptable.
        Throws:
        javax.servlet.UnavailableException - if Servlet class is not of type Servlet
      • isAvailable

        public boolean isAvailable()
        Returns:
        true if the holder is started and is not unavailable
      • checkInitOnStartup

        private void checkInitOnStartup()
        Check if there is a javax.servlet.annotation.ServletSecurity annotation on the servlet class. If there is, then we force it to be loaded on startup, because all of the security constraints must be calculated as the container starts.
      • makeUnavailable

        private javax.servlet.Servlet makeUnavailable​(javax.servlet.UnavailableException e)
      • makeUnavailable

        private void makeUnavailable​(java.lang.Throwable e)
      • initServlet

        private void initServlet()
                          throws javax.servlet.ServletException
        Throws:
        javax.servlet.ServletException
      • initJspServlet

        protected void initJspServlet()
                               throws java.lang.Exception
        Throws:
        java.lang.Exception - if unable to init the JSP Servlet
      • initMultiPart

        protected void initMultiPart()
                              throws java.lang.Exception
        Register a ServletRequestListener that will ensure tmp multipart files are deleted when the request goes out of scope.
        Throws:
        java.lang.Exception - if unable to init the multipart
      • getRoleRefMap

        public java.util.Map<java.lang.String,​java.lang.String> getRoleRefMap()
        Specified by:
        getRoleRefMap in interface UserIdentity.Scope
        Returns:
        A map of role reference names that converts from names used by application code to names used by the context deployment.
        See Also:
        UserIdentity.Scope.getRoleRefMap()
      • setRunAsRole

        public void setRunAsRole​(java.lang.String role)
      • prepare

        protected void prepare​(Request baseRequest,
                               javax.servlet.ServletRequest request,
                               javax.servlet.ServletResponse response)
                        throws javax.servlet.ServletException,
                               javax.servlet.UnavailableException
        Prepare to service a request.
        Parameters:
        baseRequest - the base request
        request - the request
        response - the response
        Throws:
        javax.servlet.ServletException - if unable to prepare the servlet
        javax.servlet.UnavailableException - if not available
      • ensureInstance

        @Deprecated
        public javax.servlet.Servlet ensureInstance()
                                             throws javax.servlet.ServletException
        Deprecated.
        Throws:
        javax.servlet.ServletException
      • handle

        public void handle​(Request baseRequest,
                           javax.servlet.ServletRequest request,
                           javax.servlet.ServletResponse response)
                    throws javax.servlet.ServletException,
                           javax.servlet.UnavailableException,
                           java.io.IOException
        Service a request with this servlet.
        Parameters:
        baseRequest - the base request
        request - the request
        response - the response
        Throws:
        javax.servlet.ServletException - if unable to process the servlet
        javax.servlet.UnavailableException - if servlet is unavailable
        java.io.IOException - if unable to process the request or response
      • isJspServlet

        protected boolean isJspServlet()
      • isJspServlet

        protected boolean isJspServlet​(java.lang.String classname)
      • detectJspContainer

        private void detectJspContainer()
      • getNameOfJspClass

        public java.lang.String getNameOfJspClass​(java.lang.String jsp)
        Parameters:
        jsp - the jsp-file
        Returns:
        the simple classname of the jsp
      • getPackageOfJspClass

        public java.lang.String getPackageOfJspClass​(java.lang.String jsp)
      • getJspPackagePrefix

        public java.lang.String getJspPackagePrefix()
        Returns:
        the package for all jsps
      • getClassNameForJsp

        public java.lang.String getClassNameForJsp​(java.lang.String jsp)
        Parameters:
        jsp - the jsp-file from web.xml
        Returns:
        the fully qualified classname
      • appendPath

        protected void appendPath​(java.lang.StringBuffer path,
                                  java.lang.String element)
        Concatenate an element on to fully qualified classname.
        Parameters:
        path - the path under construction
        element - the element of the name to add
      • getRegistration

        public javax.servlet.ServletRegistration.Dynamic getRegistration()
      • newInstance

        protected javax.servlet.Servlet newInstance()
                                             throws javax.servlet.ServletException,
                                                    java.lang.IllegalAccessException,
                                                    java.lang.InstantiationException,
                                                    java.lang.NoSuchMethodException,
                                                    java.lang.reflect.InvocationTargetException
        Returns:
        the newly created Servlet instance
        Throws:
        javax.servlet.ServletException - if unable to create a new instance
        java.lang.IllegalAccessException - if not allowed to create a new instance
        java.lang.InstantiationException - if creating new instance resulted in error
        java.lang.NoSuchMethodException - if creating new instance resulted in error
        java.lang.reflect.InvocationTargetException - If creating new instance throws an exception
      • dump

        public void dump​(java.lang.Appendable out,
                         java.lang.String indent)
                  throws java.io.IOException
        Description copied from interface: Dumpable
        Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
        Specified by:
        dump in interface Dumpable
        Overrides:
        dump in class BaseHolder<javax.servlet.Servlet>
        Parameters:
        out - The appendable to dump to
        indent - The indent to apply after any new lines.
        Throws:
        java.io.IOException - if unable to write to Appendable
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class Holder<javax.servlet.Servlet>