Class Dispatcher
- Direct Known Subclasses:
MockDispatcher
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Provide an accessor class for static XWork utility. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ConfigurationManager
Store ConfigurationManager instance, set on init.static final String
static final String
HttpServletRequest.getMethod()
protected jakarta.servlet.ServletContext
Keeps current reference to external world and must be protected to support class inheritance -
Constructor Summary
ConstructorsConstructorDescriptionDispatcher
(jakarta.servlet.ServletContext servletContext, Map<String, String> initParams) Create the Dispatcher instance for a given ServletContext and set of initialization parameters. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
addDispatcherListener
(DispatcherListener listener) Add a dispatcher lifecycle listener.void
cleanup()
Releases all instances bound to this dispatcher instance.void
Cleanup any resources used to initialise Dispatchervoid
cleanUpRequest
(jakarta.servlet.http.HttpServletRequest request) Removes all the files created by MultiPartRequestWrapper.static void
Removes the dispatcher instance for this thread.protected ActionProxy
protected ConfigurationManager
createContextMap
(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, ActionMapping mapping) Create a context map containing all the wrapped request objectscreateContextMap
(Map<String, Object> requestMap, HttpParameters parameters, Map<String, Object> sessionMap, Map<String, Object> applicationMap, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Merge all application and servlet attributes into a single HashMap to represent the entire Action context.protected StrutsJavaConfigurationProvider
protected XmlConfigurationProvider
createStrutsXmlConfigurationProvider
(String filename, jakarta.servlet.ServletContext ctx) Expose the ConfigurationManager instance.Exposes a thread-cached reference of the dependency injection container.static Dispatcher
Provide the dispatcher instance for the current thread.static Dispatcher
getInstance
(jakarta.servlet.ServletContext servletContext) protected Locale
getLocale
(jakarta.servlet.http.HttpServletRequest request) protected MultiPartRequest
On each request it must return a new instance as implementation could be not thread safe and thus ensure of resource clean upprotected String
Return the path to save uploaded files to (this is configurable).void
init()
Load configurations, including both XML and zero-configuration strategies, and update optional settings, including whether to reload configurations and resource files.boolean
boolean
protected boolean
isMultipartRequest
(jakarta.servlet.http.HttpServletRequest request) Checks if request is a multipart request (a file upload request)protected boolean
isMultipartSupportEnabled
(jakarta.servlet.http.HttpServletRequest request) Checks if support to parse multipart requests is enabledprotected boolean
isSameAction
(ActionProxy actionProxy, String namespace, String actionName, String method) protected void
logConfigurationException
(jakarta.servlet.http.HttpServletRequest request, ConfigurationException e) Performs logging of missing action/result configuration exceptionvoid
prepare
(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Prepare a request, including setting the encoding and locale.protected ActionProxy
prepareActionProxy
(Map<String, Object> extraContext, String actionNamespace, String actionName, String actionMethod) static void
removeDispatcherListener
(DispatcherListener listener) Remove a specific dispatcher lifecycle listener.void
sendError
(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, int code, Exception e) Send an HTTP error response code.void
serviceAction
(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, ActionMapping mapping) Load Action class for mapping and invoke the appropriate Action method, or go directly to the Result.void
setActionExcludedPatterns
(String excludedPatterns) void
setActionExcludedPatternsSeparator
(String separator) void
setActionMapper
(ActionMapper actionMapper) void
setActionProxyFactory
(ActionProxyFactory actionProxyFactory) void
setDefaultEncoding
(String val) Modify state of StrutsConstants.STRUTS_I18N_ENCODING setting.void
setDefaultLocale
(String val) Modify state of StrutsConstants.STRUTS_LOCALE setting.void
setDevMode
(String mode) Modify state of StrutsConstants.STRUTS_DEVMODE setting.void
setDisableRequestAttributeValueStackLookup
(String disableRequestAttributeValueStackLookup) Modify state of StrutsConstants.DISABLE_REQUEST_ATTRIBUTE_VALUE_STACK_LOOKUP setting.void
setDispatcherErrorHandler
(DispatcherErrorHandler errorHandler) void
setDispatchersParametersWorkaround
(String dispatchersParametersWorkaround) void
setHandleException
(String handleException) static void
setInstance
(Dispatcher instance) Store the dispatcher instance for this thread.void
setLocaleProviderFactory
(LocaleProviderFactory localeProviderFactory) void
Modify state of StrutsConstants.STRUTS_MULTIPART_SAVEDIR setting.void
setMultipartSupportEnabled
(String multipartSupportEnabled) void
setMultipartValidationRegex
(String multipartValidationRegex) void
setObjectFactory
(ObjectFactory objectFactory) void
setStaticContentLoader
(StaticContentLoader staticContentLoader) void
setThreadAllowlist
(ThreadAllowlist threadAllowlist) void
setValueStackFactory
(ValueStackFactory valueStackFactory) jakarta.servlet.http.HttpServletRequest
wrapRequest
(jakarta.servlet.http.HttpServletRequest request) Wrap and return the given request or return the original request object.
-
Field Details
-
REQUEST_POST_METHOD
HttpServletRequest.getMethod()
- See Also:
-
MULTIPART_FORM_DATA_REGEX
- See Also:
-
configurationManager
Store ConfigurationManager instance, set on init. -
servletContext
protected jakarta.servlet.ServletContext servletContextKeeps current reference to external world and must be protected to support class inheritance -
initParams
-
-
Constructor Details
-
Dispatcher
Create the Dispatcher instance for a given ServletContext and set of initialization parameters.- Parameters:
servletContext
- Our servlet contextinitParams
- The set of initialization parameters
-
-
Method Details
-
getInstance
Provide the dispatcher instance for the current thread.- Returns:
- The dispatcher instance
-
setInstance
Store the dispatcher instance for this thread.- Parameters:
instance
- The instance
-
clearInstance
public static void clearInstance()Removes the dispatcher instance for this thread. -
addDispatcherListener
Add a dispatcher lifecycle listener.- Parameters:
listener
- The listener to add
-
removeDispatcherListener
Remove a specific dispatcher lifecycle listener.- Parameters:
listener
- The listener
-
getInstance
-
setDevMode
Modify state of StrutsConstants.STRUTS_DEVMODE setting.- Parameters:
mode
- New setting
-
isDevMode
public boolean isDevMode() -
setDisableRequestAttributeValueStackLookup
public void setDisableRequestAttributeValueStackLookup(String disableRequestAttributeValueStackLookup) Modify state of StrutsConstants.DISABLE_REQUEST_ATTRIBUTE_VALUE_STACK_LOOKUP setting.- Parameters:
disableRequestAttributeValueStackLookup
- New setting
-
setDefaultLocale
Modify state of StrutsConstants.STRUTS_LOCALE setting.- Parameters:
val
- New setting
-
setDefaultEncoding
Modify state of StrutsConstants.STRUTS_I18N_ENCODING setting.- Parameters:
val
- New setting
-
setMultipartSaveDir
Modify state of StrutsConstants.STRUTS_MULTIPART_SAVEDIR setting.- Parameters:
val
- New setting
-
setMultipartSupportEnabled
-
setMultipartValidationRegex
-
setActionExcludedPatternsSeparator
-
setActionExcludedPatterns
-
getActionExcludedPatterns
-
setValueStackFactory
-
getValueStackFactory
-
setHandleException
-
setDispatchersParametersWorkaround
-
isHandleException
public boolean isHandleException() -
setDispatcherErrorHandler
-
setObjectFactory
-
setActionProxyFactory
-
getActionProxyFactory
-
setLocaleProviderFactory
-
setStaticContentLoader
-
getStaticContentLoader
-
setActionMapper
-
getActionMapper
-
setThreadAllowlist
-
cleanup
public void cleanup()Releases all instances bound to this dispatcher instance. -
createStrutsXmlConfigurationProvider
protected XmlConfigurationProvider createStrutsXmlConfigurationProvider(String filename, jakarta.servlet.ServletContext ctx) -
createJavaConfigurationProvider
protected StrutsJavaConfigurationProvider createJavaConfigurationProvider(StrutsJavaConfiguration config) -
init
public void init()Load configurations, including both XML and zero-configuration strategies, and update optional settings, including whether to reload configurations and resource files. -
createConfigurationManager
-
serviceAction
public void serviceAction(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, ActionMapping mapping) throws jakarta.servlet.ServletException Load Action class for mapping and invoke the appropriate Action method, or go directly to the Result.
This method first creates the action context from the given parameters, and then loads an ActionProxy from the given action name and namespace. After that, the Action method is executed and output channels through the response object. Actions not found are sent back to the user via the
sendError(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse, int, java.lang.Exception)
method, using the 404 return code. All other errors are reported by throwing a ServletException.- Parameters:
request
- the HttpServletRequest objectresponse
- the HttpServletResponse objectmapping
- the action mapping object- Throws:
jakarta.servlet.ServletException
- when an unknown error occurs (not a 404, but typically something that would end up as a 5xx by the servlet container)- Since:
- 2.3.17
-
prepareActionProxy
-
createActionProxy
-
isSameAction
protected boolean isSameAction(ActionProxy actionProxy, String namespace, String actionName, String method) -
logConfigurationException
protected void logConfigurationException(jakarta.servlet.http.HttpServletRequest request, ConfigurationException e) Performs logging of missing action/result configuration exception- Parameters:
request
- currentHttpServletRequest
e
-ConfigurationException
that occurred
-
createContextMap
public Map<String,Object> createContextMap(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, ActionMapping mapping) Create a context map containing all the wrapped request objects- Parameters:
request
- The servlet requestresponse
- The servlet responsemapping
- The action mapping- Returns:
- A map of context objects
- Since:
- 2.3.17
-
createContextMap
public Map<String,Object> createContextMap(Map<String, Object> requestMap, HttpParameters parameters, Map<String, Object> sessionMap, Map<String, Object> applicationMap, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Merge all application and servlet attributes into a single HashMap to represent the entire Action context.- Parameters:
requestMap
- a Map of all request attributes.parameters
- an Object of all request parameters.sessionMap
- a Map of all session attributes.applicationMap
- a Map of all servlet context attributes.request
- the HttpServletRequest object.response
- the HttpServletResponse object.- Returns:
- a HashMap representing the Action context.
- Since:
- 2.3.17
-
getLocale
-
getSaveDir
Return the path to save uploaded files to (this is configurable).- Returns:
- the path to save uploaded files to
-
prepare
public void prepare(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Prepare a request, including setting the encoding and locale.- Parameters:
request
- The requestresponse
- The response
-
wrapRequest
public jakarta.servlet.http.HttpServletRequest wrapRequest(jakarta.servlet.http.HttpServletRequest request) throws IOException Wrap and return the given request or return the original request object.
This method transparently handles multipart data as a wrapped class around the given request. Override this method to handle multipart requests in a special way or to handle other types of requests. Note,
MultiPartRequestWrapper
is flexible - look first to that object before overriding this method to handle multipart data.- Parameters:
request
- the HttpServletRequest object.- Returns:
- a wrapped request or original request.
- Throws:
IOException
- on any error.- Since:
- 2.3.17
- See Also:
-
isMultipartSupportEnabled
protected boolean isMultipartSupportEnabled(jakarta.servlet.http.HttpServletRequest request) Checks if support to parse multipart requests is enabled- Parameters:
request
- current servlet request- Returns:
- false if disabled
- Since:
- 2.5.11
-
isMultipartRequest
protected boolean isMultipartRequest(jakarta.servlet.http.HttpServletRequest request) Checks if request is a multipart request (a file upload request)- Parameters:
request
- current servlet request- Returns:
- true if it is a multipart request
- Since:
- 2.5.11
-
getMultiPartRequest
On each request it must return a new instance as implementation could be not thread safe and thus ensure of resource clean up- Returns:
- a multi part request object
-
cleanUpRequest
public void cleanUpRequest(jakarta.servlet.http.HttpServletRequest request) Removes all the files created by MultiPartRequestWrapper.- Parameters:
request
- the HttpServletRequest object.- See Also:
-
sendError
public void sendError(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, int code, Exception e) Send an HTTP error response code.- Parameters:
request
- the HttpServletRequest object.response
- the HttpServletResponse object.code
- the HttpServletResponse error code (seeHttpServletResponse
for possible error codes).e
- the Exception that is reported.- Since:
- 2.3.17
-
cleanUpAfterInit
public void cleanUpAfterInit()Cleanup any resources used to initialise Dispatcher -
getConfigurationManager
Expose the ConfigurationManager instance.- Returns:
- The instance
-
getContainer
Exposes a thread-cached reference of the dependency injection container. If the container is found to have changed since the last time it was cached, this Dispatcher instance is re-injected to ensure no stale configuration/dependencies persist.A non-cached reference can be obtained by calling
getConfigurationManager()
.- Returns:
- Our dependency injection container
-