The DispatcherServlet
maps requests for application resources to handlers.
A flow is one type of handler.
The first step to dispatching requests to flows is to enable flow handling within Spring MVC.
To this, install the FlowHandlerAdapter
:
<!-- Enables FlowHandler URL mapping --> <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter"> <property name="flowExecutor" ref="flowExecutor" /> </bean>
Once flow handling is enabled, the next step is to map specific application resources to your flows.
The simplest way to do this is to define a FlowHandlerMapping
:
<!-- Maps request paths to flows in the flowRegistry; e.g. a path of /hotels/booking looks for a flow with id "hotels/booking" --> <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> <property name="flowRegistry" ref="flowRegistry"/> <property name="order" value="0"/> </bean>
Configuring this mapping allows the Dispatcher to map application resource paths to flows in a flow registry.
For example, accessing the resource path /hotels/booking
would result in a registry query for the flow with id hotels/booking
.
If a flow is found with that id, that flow will handle the request.
If no flow is found, the next handler mapping in the Dispatcher's ordered chain will be queried or a "noHandlerFound" response will be returned.
When a valid flow mapping is found, the FlowHandlerAdapter
figures out whether to
start a new execution of that flow or resume an existing execution based on information present the HTTP request.
There are a number of defaults related to starting and resuming flow executions the adapter employs:
HTTP request parameters are made available in the input map of all starting flow executions.
When a flow execution ends without sending a final response, the default handler will attempt to start a new execution in the same request.
Unhandled exceptions are propagated to the Dispatcher unless the exception is a NoSuchFlowExecutionException. The default handler will attempt to recover from a NoSuchFlowExecutionException by starting over a new execution.
Consult the API documentation for FlowHandlerAdapter
for more information.
You may override these defaults by subclassing or by implementing your own FlowHandler, discussed in the next section.