Struts2请求处理的内部流程说明(版本一)
流程說(shuō)明:
1.客戶端瀏覽器(Client)向服務(wù)器發(fā)送一個(gè) http 請(qǐng)求(HttpServletRequest)
2.Container(容器) 通過(guò) web.xml 映射請(qǐng)求,并獲得控制器(Controller)的名字
3.Container 調(diào)用控制器(StrutsPrepareAndExecuteFilter 或 FilterDispatcher)。在Struts 2.1.3 以前調(diào)用 FilterDispatcher,Struts 2.1.3以后調(diào)用 StrutsPrepareAndExecuteFilter。
4.Controller 調(diào)用 ActionMapper,ActionMapper 返回 ActionMapping 對(duì)象。
5.Controller 將請(qǐng)求的控制權(quán)委派給 ActionProxy,并把請(qǐng)求數(shù)據(jù)傳給 ActionProxy
6.ActionProxy 調(diào)用配置管理器(ConfigurationManager) 讀取配置文件的信息(struts.xml)
7.ActionProxy 拿到 Action、Interceptor等相關(guān)數(shù)據(jù)后,調(diào)用 ActionInvocation,并把 Action、Interceptor 等相關(guān)數(shù)據(jù)及請(qǐng)求數(shù)據(jù)傳遞給 ActionInvocation。
8.ActionInvocation 調(diào)用前置攔截器,把 request 請(qǐng)求里面的參數(shù)封裝到 ActionContext 對(duì)象中的 ValueStack 對(duì)象中的值棧對(duì)象里面。
如果 Action 的屬性名與 ValueStack 對(duì)象中的值棧對(duì)象的屬性名相同(即與 request 請(qǐng)求里的參數(shù)相同),則將 ValueStack 對(duì)象中的值棧對(duì)象的屬性值賦給對(duì)應(yīng)的 Action 屬性。
9.根據(jù) Action 的配置信息,調(diào)用 Result 組件。
11.Result 信息返回給 ActionInvocation。將結(jié)果信息封裝到 HttpServletResponse 對(duì)象中
12.容器將 HttpServletResponse 對(duì)象中信息打成響應(yīng)數(shù)據(jù)包發(fā)送給客戶端。
有疑問(wèn):
聽(tīng)說(shuō)特定請(qǐng)求映射到特定 Action的相關(guān)信息存儲(chǔ)在 ActionMapping 對(duì)象中,這就奇怪了,確定執(zhí)行哪個(gè) Action 不是由 ConfigurationManager 干的嗎?如果 ActionMapper 就確定了哪個(gè) Action,那后面調(diào) ConfigurationManager 讀取配置文件豈不是多余了?
ActionMapping 對(duì)象中剛開(kāi)始時(shí)是空的,ConfigurationManager 對(duì)象去解析 struts.xml 后,將請(qǐng)求與 Action 的映射關(guān)系封裝到 ActionMapping 對(duì)象中。
總結(jié)
以上是生活随笔為你收集整理的Struts2请求处理的内部流程说明(版本一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JDBC 示意图
- 下一篇: 分析 Web 资源的访问过程(Servl