Class GenericServletWrapper
- java.lang.Object
-
- com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper
-
- All Implemented Interfaces:
RequestProcessor
,IServletWrapper
public abstract class GenericServletWrapper extends java.lang.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 GenericServletWrapper(IServletContext parent)
Public constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addServletReferenceListener(ServletReferenceListener listener)
Add a listener which will listen to the invalidation events for this wrapper instance.void
destroy()
This method will be invoked when the parent container wishes to destroy this IServletWrapper instance.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.java.lang.String
getName()
IServletConfig
getServletConfig()
Returns the ServletConfig associated with the targetjavax.servlet.ServletContext
getServletContext()
Returns the servlet context associated with this servlet wrapper.java.lang.String
getServletName()
Returns the servlet name of the targetjavax.servlet.Servlet
getTarget()
Returns the target Servlet instancejava.lang.ClassLoader
getTargetClassLoader()
Returns the current classloader which loaded (or will, in the future, load) the target.void
handleRequest(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res)
Method that processes the request, and ultimately invokes the service() on the Servlet target.void
initialize(IServletConfig config)
Method that handles the initialization of this IServletWrapper instance.boolean
isAvailable()
Returns whether the requested wrapper resource exists.boolean
isInternal()
void
load()
Loads the servlet and calls the Servlet's init method with the previously passed IServletConfig.void
loadOnStartupCheck()
Initializes this wrapper with the specified config.void
modifyTarget(javax.servlet.Servlet s)
void
nameSpacePostInvoke()
void
nameSpacePreInvoke()
void
prepareForReload()
Gracefully invalidates the target by overseeing its lifecycle (destroy()) This method must be called before the target is invalidated for reload.void
service(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
void
setParent(IServletContext parent)
Sets the parent context for this servletwrappervoid
setTarget(javax.servlet.Servlet target)
Sets the target for this IServletWrapper.void
setTargetClassLoader(java.lang.ClassLoader loader)
Instructs the underlying implementation to use the supplied class loader to instantiate the target instance.
-
-
-
Constructor Detail
-
GenericServletWrapper
public GenericServletWrapper(IServletContext parent) throws java.lang.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:
java.lang.Exception
-
-
Method Detail
-
initialize
public void initialize(IServletConfig config) throws java.lang.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 interfaceIServletWrapper
- Parameters:
config
- the IServletConfig associated with this IServletWrapper- Throws:
java.lang.Exception
- See Also:
IServletConfig
-
handleRequest
public void handleRequest(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res) throws java.lang.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 interfaceIServletWrapper
- Specified by:
handleRequest
in interfaceRequestProcessor
- Throws:
java.lang.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 interfaceIServletWrapper
-
getServletName
public java.lang.String getServletName()
Returns the servlet name of the target- Specified by:
getServletName
in interfaceIServletWrapper
- Returns:
-
getServletConfig
public IServletConfig getServletConfig()
Returns the ServletConfig associated with the target- Specified by:
getServletConfig
in interfaceIServletWrapper
- Returns:
-
getServletContext
public javax.servlet.ServletContext getServletContext()
Description copied from interface:IServletWrapper
Returns the servlet context associated with this servlet wrapper.- Specified by:
getServletContext
in interfaceIServletWrapper
- Returns:
-
setTargetClassLoader
public void setTargetClassLoader(java.lang.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 interfaceIServletWrapper
-
getTarget
public javax.servlet.Servlet getTarget()
Returns the target Servlet instance- Specified by:
getTarget
in interfaceIServletWrapper
- Returns:
-
getTargetClassLoader
public java.lang.ClassLoader getTargetClassLoader()
Returns the current classloader which loaded (or will, in the future, load) the target.- Specified by:
getTargetClassLoader
in interfaceIServletWrapper
-
setTarget
public void setTarget(javax.servlet.Servlet target)
Sets the target for this IServletWrapper.- Specified by:
setTarget
in interfaceIServletWrapper
-
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 interfaceIServletWrapper
-
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 interfaceIServletWrapper
- 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 interfaceIServletWrapper
-
service
public void service(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response) throws java.io.IOException, javax.servlet.ServletException
- Specified by:
service
in interfaceIServletWrapper
- Throws:
java.io.IOException
javax.servlet.ServletException
-
setParent
public void setParent(IServletContext parent)
Description copied from interface:IServletWrapper
Sets the parent context for this servletwrapper- Specified by:
setParent
in interfaceIServletWrapper
-
isAvailable
public boolean isAvailable()
Returns whether the requested wrapper resource exists.- Specified by:
isAvailable
in interfaceIServletWrapper
-
nameSpacePostInvoke
public void nameSpacePostInvoke()
-
nameSpacePreInvoke
public void nameSpacePreInvoke()
-
getName
public java.lang.String getName()
- Specified by:
getName
in interfaceRequestProcessor
-
isInternal
public boolean isInternal()
- Specified by:
isInternal
in interfaceRequestProcessor
- Returns:
- boolean Returns true if this request processor is for internal use only
-
loadOnStartupCheck
public void loadOnStartupCheck() throws java.lang.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 interfaceIServletWrapper
- Throws:
java.lang.Exception
- See Also:
IServletConfig
-
load
public void load() throws java.lang.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 interfaceIServletWrapper
- Throws:
java.lang.Exception
-
modifyTarget
public void modifyTarget(javax.servlet.Servlet s)
- Specified by:
modifyTarget
in interfaceIServletWrapper
-
-