注: 本博文主要翻译自 Struts 官方文档,附上链接 https://cwiki.apache.org/confluence/display/WW/Big+Picture
Struts 对客户端的请求的处理主要经过下面几个过程:
- 客户端的请求经过 Servlet 容器一系列的过滤器(Filter)
- 过滤器 FilterDispatcher 被调用,FilterDispatcher 询问 ActonMapper 来决定这个请求是否需要调用某个 Action
- 若需要调用某个 Action,FilterDispatcher 把请求的处理交给 ActionProxy
- ActionProxy 通过 Configuration Manager 询问框架的配置文件,找到需要调用的Action类
- ActionProxy 创造一个 ActionInvocation 对象,调用其invoke()方法。
- ActionInvocation的 invoke()方法从拦截器映射中查找尚未执行的拦截器,调用它的 intercept() 方法,并将自身对象的引用作为参数传递给拦截器。
- 拦截器完成某写预处理工作后,如果发现还有其他的拦截器就反过来调用 ActionInvocation 的invoke()方法。如果所有的拦截器都已经执行完毕,就调用 Action 实例的 execute()方法。
- 一旦 Action 执行完毕,ActionInvocation 根据 Action 执行的返回 结果码(Result),在struts.xml 中查找对用的返回结果。返回结果通常是一个需要被表示的JSP或者其他的视图模板。
请多多指教!