1. When a request comes web container maps the request in the web.xml and calls the controller (FilterDispatcher).
2. FilterDispatcher calls the ActionMapper to find an Action to be invoked.
3. FilterDispatcher calls the ActionProxy.
4. ActionProxy reads the information of action and interceptor stack from configuration file using configuration manager (struts.xml) and invoke the ActionInvocation.
5. ActionInvocation calls the all interceptors one by one and then invoke the action to generate the result.
6. Action is executed ActionInvocation again calls the all interceptors in reverse order.
7. Control is returned to the FilterDispatcher.
8. Result is sent to the client.
See more at: Struts 2 request life cycle.