Class DelegatingRequestProcessor

  extended by org.apache.struts.action.RequestProcessor
      extended by org.springframework.web.struts.DelegatingRequestProcessor

public class DelegatingRequestProcessor
extends RequestProcessor

Subclass of Struts's default RequestProcessor that looks up Spring-managed Struts Actions defined in ContextLoaderPlugIn's WebApplicationContext (or, as a fallback, in the root WebApplicationContext).

In the Struts config file, you can either specify the original Action class (as when generated by XDoclet), or no Action class at all. In any case, Struts will delegate to an Action bean in the ContextLoaderPlugIn context.

<action path="/login" type="myapp.MyAction"/>
<action path="/login"/>
The name of the Action bean in the WebApplicationContext will be determined from the mapping path and module prefix. This can be customized by overriding the determineActionBeanName(org.apache.struts.action.ActionMapping) method.


A corresponding bean definition in the ContextLoaderPlugin context would look as follows; notice that the Action is now able to leverage fully Spring's configuration facilities:

 <bean name="/login" class="myapp.MyAction">
   <property name="...">...</property>
Note that you can use a single ContextLoaderPlugIn for all Struts modules. That context can in turn be loaded from multiple XML files, for example split according to Struts modules. Alternatively, define one ContextLoaderPlugIn per Struts module, specifying appropriate "contextConfigLocation" parameters. In both cases, the Spring bean name has to include the module prefix.

If you also need the Tiles setup functionality of the original TilesRequestProcessor, use DelegatingTilesRequestProcessor. As there is just a single central class to customize in Struts, we have to provide another subclass here, covering both the Tiles and the Spring delegation aspect.

If this RequestProcessor conflicts with the need for a different RequestProcessor subclass (other than TilesRequestProcessor), consider using DelegatingActionProxy as the Struts Action type in your struts-config file.

The default implementation delegates to the DelegatingActionUtils class as much as possible, to reuse as much code as possible despite the need to provide two RequestProcessor subclasses. If you need to subclass yet another RequestProcessor, take this class as a template, delegating to DelegatingActionUtils just like it.

Juergen Hoeller
See Also:
determineActionBeanName(org.apache.struts.action.ActionMapping), DelegatingTilesRequestProcessor, DelegatingActionProxy, DelegatingActionUtils, ContextLoaderPlugIn

Field Summary
Fields inherited from class org.apache.struts.action.RequestProcessor
actions, INCLUDE_PATH_INFO, INCLUDE_SERVLET_PATH, log, moduleConfig, servlet
Constructor Summary
Method Summary
protected  String determineActionBeanName(ActionMapping mapping)
          Determine the name of the Action bean, to be looked up in the WebApplicationContext.
protected  Action getDelegateAction(ActionMapping mapping)
          Return the delegate Action for the given mapping.
protected  WebApplicationContext getWebApplicationContext()
          Return the WebApplicationContext that this processor delegates to.
 void init(ActionServlet actionServlet, ModuleConfig moduleConfig)
protected  WebApplicationContext initWebApplicationContext(ActionServlet actionServlet, ModuleConfig moduleConfig)
          Fetch ContextLoaderPlugIn's WebApplicationContext from the ServletContext, falling back to the root WebApplicationContext.
protected  Action processActionCreate(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)
          Override the base class method to return the delegate action.
Methods inherited from class org.apache.struts.action.RequestProcessor
destroy, doForward, doInclude, getInternal, getServletContext, internalModuleRelativeForward, internalModuleRelativeInclude, log, log, process, processActionForm, processActionPerform, processCachedMessages, processContent, processException, processForward, processForwardConfig, processInclude, processLocale, processMapping, processMultipart, processNoCache, processPath, processPopulate, processPreprocess, processRoles, processValidate
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail


public DelegatingRequestProcessor()
Method Detail


public void init(ActionServlet actionServlet,
                 ModuleConfig moduleConfig)
          throws ServletException
init in class RequestProcessor


protected WebApplicationContext initWebApplicationContext(ActionServlet actionServlet,
                                                          ModuleConfig moduleConfig)
                                                   throws IllegalStateException
Fetch ContextLoaderPlugIn's WebApplicationContext from the ServletContext, falling back to the root WebApplicationContext.

This context is supposed to contain the Struts Action beans to delegate to.

actionServlet - the associated ActionServlet
moduleConfig - the associated ModuleConfig
the WebApplicationContext
IllegalStateException - if no WebApplicationContext could be found
See Also:
DelegatingActionUtils.findRequiredWebApplicationContext(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig), ContextLoaderPlugIn.SERVLET_CONTEXT_PREFIX


protected final WebApplicationContext getWebApplicationContext()
Return the WebApplicationContext that this processor delegates to.


protected Action processActionCreate(HttpServletRequest request,
                                     HttpServletResponse response,
                                     ActionMapping mapping)
                              throws IOException
Override the base class method to return the delegate action.

processActionCreate in class RequestProcessor
See Also:


protected Action getDelegateAction(ActionMapping mapping)
                            throws BeansException
Return the delegate Action for the given mapping.

The default implementation determines a bean name from the given ActionMapping and looks up the corresponding bean in the WebApplicationContext.

mapping - the Struts ActionMapping
the delegate Action, or null if none found
BeansException - if thrown by WebApplicationContext methods
See Also:


protected String determineActionBeanName(ActionMapping mapping)
Determine the name of the Action bean, to be looked up in the WebApplicationContext.

The default implementation takes the mapping path and prepends the module prefix, if any.

mapping - the Struts ActionMapping
the name of the Action bean
See Also:
DelegatingActionUtils.determineActionBeanName(org.apache.struts.action.ActionMapping), ActionConfig.getPath(), ModuleConfig.getPrefix()

Copyright © 2002-2008 The Spring Framework.