Class GenericServletWrapper

java.lang.Object
com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper
All Implemented Interfaces:
RequestProcessor, IServletWrapper

public abstract class GenericServletWrapper extends Object implements IServletWrapper
A convenience class that implements IServletWrapper. This class must be subclassed if IServletWrapper implementations want to leverage the webcontainer's handling of the following: -> Servlet lifecycle management -> Event generation and firing -> Request handling leveraging sessions and security Subclasses usually override the handleRequest() method wherein they implement logic specific to the container they are part of, and at the end call on super.handleRequest() which then handles the actual dispatch to the servlet and invokes the Servlet's service() method.
Since:
WAS6.0
  • Constructor Summary

    Constructors
    Constructor
    Description
    Public constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Add a listener which will listen to the invalidation events for this wrapper instance.
    void
    This method will be invoked when the parent container wishes to destroy this IServletWrapper instance.
    long
    This method will be called by the webcontainer's reaper mechanism which polls for the access times of the wrappers in its datastructures, and invalidates them if they have been inactive for a preconfigured amount of time.
     
    Returns the ServletConfig associated with the target
    jakarta.servlet.ServletContext
    Returns the servlet context associated with this servlet wrapper.
    Returns the servlet name of the target
    jakarta.servlet.Servlet
    Returns the target Servlet instance
    Returns the current classloader which loaded (or will, in the future, load) the target.
    void
    handleRequest(jakarta.servlet.ServletRequest req, jakarta.servlet.ServletResponse res)
    Method that processes the request, and ultimately invokes the service() on the Servlet target.
    void
    Method that handles the initialization of this IServletWrapper instance.
    boolean
    Returns whether the requested wrapper resource exists.
    boolean
     
    void
    Loads the servlet and calls the Servlet's init method with the previously passed IServletConfig.
    void
    Initializes this wrapper with the specified config.
    void
    modifyTarget(jakarta.servlet.Servlet s)
     
    void
     
    void
     
    void
    Gracefully invalidates the target by overseeing its lifecycle (destroy()) This method must be called before the target is invalidated for reload.
    void
    service(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response)
     
    void
    Sets the parent context for this servletwrapper
    void
    setTarget(jakarta.servlet.Servlet target)
    Sets the target for this IServletWrapper.
    void
    Instructs the underlying implementation to use the supplied class loader to instantiate the target instance.

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • GenericServletWrapper

      public GenericServletWrapper(IServletContext parent) throws Exception
      Public constructor. This contructor must be invoked from within the constructor of the subclass passing in the IServletContext so that the parent object can be constructed correctly.
      Parameters:
      parent - The IServletContext that this IServletWrapper will be a part of
      Throws:
      Exception
  • Method Details

    • initialize

      public void initialize(IServletConfig config) throws Exception
      Method that handles the initialization of this IServletWrapper instance. Subclasses must call this by invoking super.initialize(config), so that the underlying target Servlet can be setup and initialized by calling its init() method (if specified in the config as loadAtStartUp).
      Specified by:
      initialize in interface IServletWrapper
      Parameters:
      config - the IServletConfig associated with this IServletWrapper
      Throws:
      Exception
      See Also:
    • handleRequest

      public void handleRequest(jakarta.servlet.ServletRequest req, jakarta.servlet.ServletResponse res) throws Exception
      Method that processes the request, and ultimately invokes the service() on the Servlet target. Subclasses may override this method to put in additional logic (eg., reload/retranslation logic in the case of JSP containers). Subclasses must call this method by invoking super.handleRequest() if they want the webcontainer to handle initialization and servicing of the target in a proper way. An example scenario: class SimpleJSPServletWrapper extends GenericServletWrapper { ... public void handleRequest(ServletRequest req, ServletResponse res) { String jspFile = getFileFromRequest(req); // get the JSP target if (hasFileChangedOnDisk(jspFile)) { prepareForReload(); // invalidate the target and targetClassLoader setTargetClassLoader(null); setTarget(null); JSPServlet jsp = compileJSP(jspFile); ClassLoader loader = getLoaderForServlet(jsp); setTarget(jsp.getClassName()); setTargetClassLoader(loader); } super.handleRequest(req, res); } ... }
      Specified by:
      handleRequest in interface IServletWrapper
      Specified by:
      handleRequest in interface RequestProcessor
      Throws:
      Exception
    • prepareForReload

      public void prepareForReload()
      Gracefully invalidates the target by overseeing its lifecycle (destroy()) This method must be called before the target is invalidated for reload.
      Specified by:
      prepareForReload in interface IServletWrapper
    • getServletName

      public String getServletName()
      Returns the servlet name of the target
      Specified by:
      getServletName in interface IServletWrapper
      Returns:
    • getServletConfig

      public IServletConfig getServletConfig()
      Returns the ServletConfig associated with the target
      Specified by:
      getServletConfig in interface IServletWrapper
      Returns:
    • getServletContext

      public jakarta.servlet.ServletContext getServletContext()
      Description copied from interface: IServletWrapper
      Returns the servlet context associated with this servlet wrapper.
      Specified by:
      getServletContext in interface IServletWrapper
      Returns:
    • setTargetClassLoader

      public void setTargetClassLoader(ClassLoader loader)
      Instructs the underlying implementation to use the supplied class loader to instantiate the target instance. Calling this method with a null, accompanied with a setTarget(null) will result in the current classloader being destroyed and garbage collected along with the target instance.
      Specified by:
      setTargetClassLoader in interface IServletWrapper
    • getTarget

      public jakarta.servlet.Servlet getTarget()
      Returns the target Servlet instance
      Specified by:
      getTarget in interface IServletWrapper
      Returns:
    • getTargetClassLoader

      public ClassLoader getTargetClassLoader()
      Returns the current classloader which loaded (or will, in the future, load) the target.
      Specified by:
      getTargetClassLoader in interface IServletWrapper
    • setTarget

      public void setTarget(jakarta.servlet.Servlet target)
      Sets the target for this IServletWrapper.
      Specified by:
      setTarget in interface IServletWrapper
    • addServletReferenceListener

      public void addServletReferenceListener(ServletReferenceListener listener)
      Add a listener which will listen to the invalidation events for this wrapper instance. The invalidate() event will be fired only when the wrapper itself (not the target) is about to be destroyed by the parent container.
      Specified by:
      addServletReferenceListener in interface IServletWrapper
    • getLastAccessTime

      public long getLastAccessTime()
      This method will be called by the webcontainer's reaper mechanism which polls for the access times of the wrappers in its datastructures, and invalidates them if they have been inactive for a preconfigured amount of time. Wrapper subclasses that do not want to be 'reaped' may override this method by returning the current system time.
      Specified by:
      getLastAccessTime in interface IServletWrapper
      Returns:
    • destroy

      public void destroy()
      This method will be invoked when the parent container wishes to destroy this IServletWrapper instance. Thew subclasses may override this method to implement any resource clean up, but must invoke this method by calling super.destroy() inorder to correctly destroy the underlying target.
      Specified by:
      destroy in interface IServletWrapper
    • service

      public void service(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) throws IOException, jakarta.servlet.ServletException
      Specified by:
      service in interface IServletWrapper
      Throws:
      IOException
      jakarta.servlet.ServletException
    • setParent

      public void setParent(IServletContext parent)
      Description copied from interface: IServletWrapper
      Sets the parent context for this servletwrapper
      Specified by:
      setParent in interface IServletWrapper
    • isAvailable

      public boolean isAvailable()
      Returns whether the requested wrapper resource exists.
      Specified by:
      isAvailable in interface IServletWrapper
    • nameSpacePostInvoke

      public void nameSpacePostInvoke()
    • nameSpacePreInvoke

      public void nameSpacePreInvoke()
    • getName

      public String getName()
      Specified by:
      getName in interface RequestProcessor
    • isInternal

      public boolean isInternal()
      Specified by:
      isInternal in interface RequestProcessor
      Returns:
      boolean Returns true if this request processor is for internal use only
    • loadOnStartupCheck

      public void loadOnStartupCheck() throws Exception
      Description copied from interface: IServletWrapper
      Initializes this wrapper with the specified config. Depending on the startup weight specified in the config, the underlying target Servlet will either be initialized within this call. NOTE: This initialization behaviour of the target Servlet can be controlled by calling the setStartUpWeight() method on the IServletConfig
      Specified by:
      loadOnStartupCheck in interface IServletWrapper
      Throws:
      Exception
      See Also:
    • load

      public void load() throws Exception
      Description copied from interface: IServletWrapper
      Loads the servlet and calls the Servlet's init method with the previously passed IServletConfig. One component that calls this is SIP.
      Specified by:
      load in interface IServletWrapper
      Throws:
      Exception
    • modifyTarget

      public void modifyTarget(jakarta.servlet.Servlet s)
      Specified by:
      modifyTarget in interface IServletWrapper