Class ComposableRequestProcessor

java.lang.Object
org.apache.struts.action.RequestProcessor
org.apache.struts.chain.ComposableRequestProcessor
All Implemented Interfaces:
Serializable

public class ComposableRequestProcessor extends RequestProcessor
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 Details

    • ACTION_CONTEXT_CLASS

      public static final String ACTION_CONTEXT_CLASS
      Token for ActionContext class so that it can be stored in the ControllerConfig.
      See Also:
    • catalogFactory

      protected org.apache.commons.chain.CatalogFactory<ActionContext> catalogFactory
      The CatalogFactory from which catalog containing the the base request-processing Command will be retrieved.
    • catalog

      protected org.apache.commons.chain.Catalog<ActionContext> catalog
      The Catalog containing all of the available command chains for this module.
    • command

      protected org.apache.commons.chain.Command<ActionContext> command
      The Command 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 class RequestProcessor
    • init

      public void init(ActionServlet servlet, ModuleConfig moduleConfig) throws ServletException
      Initialize this request processor instance.
      Overrides:
      init in class RequestProcessor
      Parameters:
      servlet - The ActionServlet we are associated with
      moduleConfig - The ModuleConfig we are associated with.
      Throws:
      ServletException - If an error occurs during initialization
    • initCatalogFactory

      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.

      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 processing
      moduleConfig - The ModuleConfig we are processing
    • process

      public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
      Process an HttpServletRequest and create the corresponding HttpServletResponse.
      Overrides:
      process in class RequestProcessor
      Parameters:
      request - The servlet request we are processing
      response - The servlet response we are creating
      Throws:
      IOException - if an input/output error occurs
      ServletException - if a processing exception occurs
    • contextInstance

      protected ActionContext contextInstance(HttpServletRequest request, HttpServletResponse response) throws ServletException
      Provide the initialized ActionContext instance which will be used by this request. Internally, this simply calls createActionContextInstance followed by initializeActionContext.
      Parameters:
      request - The servlet request we are processing
      response - 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 of ActionContext according to configuration. If no alternative was specified at initialization, a new instance ServletActionContext is returned. If an alternative was specified using the ACTION_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 that ServletActionContext 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 processing
      request - The servlet request we are processing
      response - The servlet response we are creating
      Returns:
      New instance of ActionContext
      Throws:
      ServletException - if a processing exception occurs
    • initializeActionContext

      protected void initializeActionContext(ActionContext context)
      Set common properties on the given ActionContext 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 of ServletActionContext, at this time many common Struts commands will be expecting to receive an ActionContext which is also a ServletActionContext.
      Parameters:
      context - The ActionContext we are processing
    • processMultipart

      protected HttpServletRequest processMultipart(HttpServletRequest request)
      If this is a multipart request, wrap it with a special wrapper. Otherwise, return the request unchanged.
      Overrides:
      processMultipart in class RequestProcessor
      Parameters:
      request - The HttpServletRequest we are processing
      Returns:
      Original or wrapped request as appropriate
    • setCatalogFactory

      public void setCatalogFactory(org.apache.commons.chain.CatalogFactory<ActionContext> catalogFactory)
      Set the CatalogFactory 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 when initCatalogFactory(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig) is called.
      Parameters:
      catalogFactory - Our CatalogFactory instance