WebWork框架的处理流程(2)

来源:互联网 发布:vscode sln 编辑:程序博客网 时间:2024/05/22 15:03
都说Struts 2与Struts 1相差太大,Struts 2是从webWrok发展而来的,那什么是WebWord呢??看看下面的介绍.
1.3.1 WebWork框架
WebWork 2建立在Xwork之上,处理HTTP的响应和请求。WebWork 2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类)、Session(会话)、Application(应用程序)范围的映射及Request请求参数映射。WebWork 2支持多视图表示,视图部分可以使用JSP、Velocity、FreeMarker、JasperReports、XML等。
从处理流程上来看,WebWork与Struts 1非常类似,它们的核心都由控制器组成,其中控制器都由两个部分组成:
  • —核心控制器ServletDispatcher;
  • —业务逻辑控制器Action。

WebWork改变了Struts 1严重依赖Servlet API的缺陷,使得WebWork更加灵活,并给测试工作带来了方便。图1.8显示了WebWork工作流程。 

 

(1)一个初始的请求被发送到Servlet容器(如Tomcat或Resin),这个请求经过一个标准的Filter链,其中包括(可选的)ActionContextCleanUp Filter,如果要在应用程序中整合其他的技术如SiteMesh,就需要使用这个Filter。然后请求经过FilterDispatcher(注:WW2.2之前处理这个请求的是ServletDispatcher),在它里面ActionMapper会判断这个请求是否需要调用Action。
(2)如果ActionMapper决定应该调用一个Action,FilterDispatcher就把请求委托给ActionProxy,ActionProxy通过WebWork的配置文件管理器读取xwork.xml文件里的配置信息。然后创建一个实现了命令模式的ActionInvocation。这一过程包括在调用action本身之前调用所有的Interceptor(before()方法)。
(3)一旦Action方法返回,ActionInvocation就要查找xwork.xml文件中这个Action的结果码(Action Result Code)(一个String如success、input)所对应的result,然后执行这个result。通常情况下,result会调用JSP或FreeMarker模板来呈现页面(但不总是这样,例如result也可以是一个Action链)。当呈现页面时,模板可以使用WebWork提供的一些标签,其中一些组件可以和ActionMapper一起工作来为后面的请求呈现恰当的URL。
(4)最后Interceptor被再次执行(顺序和开始相反,调用after()方法),然后最终请求被返回给web.xml中配置的其他Filter。如果已经设置了ActionContextCleanUpFilter,那么FilterDispatcher就不会清理ThreadLocal中的ActionContext信息。如果没有设置ActionContextCleanUp Filter,FilterDispatcher会清理掉所有的ThreadLocal。
原创粉丝点击