Package org.apache.struts.chain
Class ComposableRequestProcessor
java.lang.Object
org.apache.struts.action.RequestProcessor
org.apache.struts.chain.ComposableRequestProcessor
- All Implemented Interfaces:
Serializable
ComposableRequestProcessor uses the Chain Of Responsibility design pattern
(as implemented by the commons-chain package in Jakarta Commons) to support
external configuration of command chains to be used. It is configured via
the following context initialization parameters:
- [org.apache.struts.chain.CATALOG_NAME] - Name of the Catalog in which we will look up the Command to be executed for each request. If not specified, the default value is struts.
- org.apache.struts.chain.COMMAND_NAME - Name of the Command which we will execute for each request, to be looked up in the specified Catalog. If not specified, the default value is servlet-standard.
- Since:
- Struts 1.1
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Token for ActionContext class so that it can be stored in the ControllerConfig.protected Catalog
<ActionContext> TheCatalog
containing all of the available command chains for this module.protected CatalogFactory
<ActionContext> TheCatalogFactory
from which catalog containing the the base request-processingCommand
will be retrieved.protected Command
<ActionContext> TheCommand
to be executed for each request.Fields inherited from class org.apache.struts.action.RequestProcessor
actions, INCLUDE_PATH_INFO, INCLUDE_SERVLET_PATH, moduleConfig, servlet
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected ActionContext
contextInstance
(HttpServletRequest request, HttpServletResponse response) Provide the initializedActionContext
instance which will be used by this request.protected ActionContext
createActionContextInstance
(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) Create a new instance ofActionContext
according to configuration.void
destroy()
Clean up in preparation for a shutdown of this application.void
init
(ActionServlet servlet, ModuleConfig moduleConfig) Initialize this request processor instance.protected void
initCatalogFactory
(ActionServlet servlet, ModuleConfig moduleConfig) Establish the CatalogFactory which will be used to look up the catalog which has the request processing command.protected void
initializeActionContext
(ActionContext context) Set common properties on the givenActionContext
instance so that commands in the chain can count on their presence.void
process
(HttpServletRequest request, HttpServletResponse response) Process anHttpServletRequest
and create the correspondingHttpServletResponse
.protected HttpServletRequest
processMultipart
(HttpServletRequest request) If this is a multipart request, wrap it with a special wrapper.void
setCatalogFactory
(CatalogFactory<ActionContext> catalogFactory) Set theCatalogFactory
instance which should be used to find the request-processing command.Methods inherited from class org.apache.struts.action.RequestProcessor
doForward, doInclude, getInternal, getServletContext, internalModuleRelativeForward, internalModuleRelativeInclude, processActionCreate, processActionForm, processActionPerform, processCachedMessages, processContent, processException, processForward, processForwardConfig, processInclude, processLocale, processMapping, processNoCache, processPath, processPopulate, processPreprocess, processRoles, processValidate
-
Field Details
-
ACTION_CONTEXT_CLASS
Token for ActionContext class so that it can be stored in the ControllerConfig.- See Also:
-
catalogFactory
TheCatalogFactory
from which catalog containing the the base request-processingCommand
will be retrieved. -
catalog
TheCatalog
containing all of the available command chains for this module. -
command
TheCommand
to be executed for each request.
-
-
Constructor Details
-
ComposableRequestProcessor
public ComposableRequestProcessor()
-
-
Method Details
-
destroy
public void destroy()Clean up in preparation for a shutdown of this application.- Overrides:
destroy
in classRequestProcessor
-
init
Initialize this request processor instance.- Overrides:
init
in classRequestProcessor
- Parameters:
servlet
- The ActionServlet we are associated withmoduleConfig
- The ModuleConfig we are associated with.- Throws:
ServletException
- If an error occurs during initialization
-
initCatalogFactory
Establish the CatalogFactory which will be used to look up the catalog which has the request processing command.The base implementation simply calls CatalogFactory.getInstance(), unless the catalogFactory property of this object has already been set, in which case it is not changed.
- Parameters:
servlet
- The ActionServlet we are processingmoduleConfig
- The ModuleConfig we are processing
-
process
public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException Process anHttpServletRequest
and create the correspondingHttpServletResponse
.- Overrides:
process
in classRequestProcessor
- Parameters:
request
- The servlet request we are processingresponse
- The servlet response we are creating- Throws:
IOException
- if an input/output error occursServletException
- if a processing exception occurs
-
contextInstance
protected ActionContext contextInstance(HttpServletRequest request, HttpServletResponse response) throws ServletException Provide the initializedActionContext
instance which will be used by this request. Internally, this simply callscreateActionContextInstance
followed byinitializeActionContext
.- Parameters:
request
- The servlet request we are processingresponse
- The servlet response we are creating- Returns:
- Initiliazed ActionContext
- Throws:
ServletException
- if a processing exception occurs
-
createActionContextInstance
protected ActionContext createActionContextInstance(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) throws ServletException Create a new instance ofActionContext
according to configuration. If no alternative was specified at initialization, a new instanceServletActionContext
is returned. If an alternative was specified using theACTION_CONTEXT_CLASS
property, then that value is treated as a classname, and an instance of that class is created. If that class implements the same constructor thatServletActionContext
does, then that constructor will be used:ServletContext, HttpServletRequest, HttpServletResponse
; otherwise, it is assumed that the class has a no-arguments constructor. If these constraints do not suit you, simply override this method in a subclass.- Parameters:
servletContext
- The servlet context we are processingrequest
- The servlet request we are processingresponse
- The servlet response we are creating- Returns:
- New instance of ActionContext
- Throws:
ServletException
- if a processing exception occurs
-
initializeActionContext
Set common properties on the givenActionContext
instance so that commands in the chain can count on their presence. Note that while this method does not require that its argument be an instance ofServletActionContext
, at this time many common Struts commands will be expecting to receive anActionContext
which is also aServletActionContext
.- Parameters:
context
- The ActionContext we are processing
-
processMultipart
If this is a multipart request, wrap it with a special wrapper. Otherwise, return the request unchanged.- Overrides:
processMultipart
in classRequestProcessor
- Parameters:
request
- The HttpServletRequest we are processing- Returns:
- Original or wrapped request as appropriate
-
setCatalogFactory
Set theCatalogFactory
instance which should be used to find the request-processing command. In the base implementation, if this value is not already set, then it will be initialized wheninitCatalogFactory(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig)
is called.- Parameters:
catalogFactory
- Our CatalogFactory instance
-