WebWork发展到现在已经到了2.X版本,因为接触的晚,所以一开始就用上了WebWork2的版本,据说WebWork2.x+XWork1.x 的架构分离了与Servlet API的紧偶合,使系统结构更加清晰,因为工作的关系,我开始用上了WebWork2,现在就用的过程做一个总结,再把WebWork2过上一遍,以便我更深入的学习WebWork2。(本文参考了夏昕的<<Webwork2_Guide>>,以及CSDN上阿明的专栏,并非原创,只是自己写出来参考学习!)
在新的架构中WebWork2.x的作用是负责将用户的HTTP请求分离出来,使的请求完全的脱离Servlet API,然后将这些请求用Map的方式传入XWork1.x,且XWork1.x通过Interceptor 将Map中的数据传到我们的VO中,然后由对应的自定义Action来调用.
首先打开DispatcherUtils.java,它在com.opensymphony.webwork.dispatcher包下面。
找到serviceAction这个方法,它实例化了Map请求,从请求的服务中解析出对应的Action名称。
HashMap extraContext = createContextMap(requestMap, params, session, application, request, response, context);
OgnlValueStack stack = (OgnlValueStack) request.getAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY);
if (stack != null) {
extraContext.put(ActionContext.VALUE_STACK, new OgnlValueStack(stack));
}
try {
String namespace = mapping.getNamespace();
String name = mapping.getName();
String method = mapping.getMethod();
String id = request.getParameter("continue");
if (id != null) {
extraContext.put("__continue", id);
}
// if the ActionMapping says to go straight to a result, do it!
if (mapping.getResult() != null) {
Result result = mapping.getResult();
result.execute(proxy.getInvocation());
} else {
proxy.execute();
}
// If there was a previous value stack then set it back onto the request
if (stack != null) {
request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY, stack);
}
} catch 。。。。。。。
找到createContextMap这个方法,它遍历了HttpServletRequest,HttpSession,ServletContext中的数据,将他们复制到Map中从而内部结构与Servlet API相分离。
public HashMap createContextMap(Map requestMap,
Map parameterMap,
Map sessionMap,
Map applicationMap,
HttpServletRequest request,
HttpServletResponse response,
ServletContext servletContext) {
HashMap extraContext = new HashMap();
//存放HTTP中上传文件的request session请求
extraContext.put(ActionContext.PARAMETERS, new HashMap(parameterMap));
extraContext.put(ActionContext.SESSION, sessionMap);
extraContext.put(ActionContext.APPLICATION, applicationMap);
extraContext.put(ActionContext.LOCALE, (locale == null) ? request.getLocale() : locale);
extraContext.put(ActionContext.DEV_MODE, Boolean.valueOf(devMode));
extraContext.put(WebWorkStatics.HTTP_REQUEST, request);
extraContext.put(WebWorkStatics.HTTP_RESPONSE, response);
extraContext.put(WebWorkStatics.SERVLET_CONTEXT, servletContext);
extraContext.put(ComponentInterceptor.COMPONENT_MANAGER, request.getAttribute(ComponentManager.COMPONENT_MANAGER_KEY));
// 这里用于存放HTTP中的request session请求
extraContext.put("request", requestMap);
extraContext.put("session", sessionMap);
extraContext.put("application", applicationMap);
extraContext.put("parameters", parameterMap);
AttributeMap attrMap = new AttributeMap(extraContext);
extraContext.put("attr", attrMap);
return extraContext;
}
创建Action,由ActionProxy来完成。
ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, name, extraContext);
proxy.setMethod(method);
request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY, proxy.getInvocation().getStack());
分享到:
相关推荐
一本webwork入门级的学习资料,初学者可以参考.
java程序员WebWork2框架学习笔记一
附件包含一个新建WEB项目文档,与一个新建项目的例子。希望对初学WEBWORK都有帮忙。
webwork是与struts2相似的一种web开发框架,这里这个demo可以让你轻松学习webwork基本的action配置、访问,为了区别可以在本空间中下载基于struts2框架的应用Struts2,加以对比,可以让你一下学习两种web框架。
WebWork教程(初学者的学习) 其中囊括了WebWork的基础知识,是WebWork的初级教程,非常适合于初学者,本教程中详细介绍了有关WebWork的诸多内容!希望会对每一个学习有所帮助!
大家好塞 自己编写了一个 目前比较流行的web框架, ...WebWork 基于2.x的一个Demo 希望对该框架有兴趣的 兄弟 可以download下来 看看 研究 研究,与此同时也 希望有什么问题 共同努力 共同学习 谢谢哈
这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。 学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的代码、API等早晚都会被淘汰...
最近学习项目需要,学习了webwork,spring,ibatis,velocity.并做了一个DEMO.
这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。 学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的代码、API等早晚都会被淘汰,但...
这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。 学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的代码、API等早晚都会被淘汰,...
Struts.2权威指南--基于WebWork核心的MVC开发 学习struts2的一本好书
Web层:WebWork 中间层:Spring IoC 持久层:Hibernate, 需求分析: 用户在注册页面,填写注册信息,确认有效注册成为新用户 用户在登录页面,填写用户名和密码,确认正确后进入系统 用户可以在登录之后,浏览图书分类列表...
Web层:WebWork 中间层:Spring IoC 持久层:Hibernate, 需求分析: 用户在注册页面,填写注册信息,确认有效注册成为新用户 用户在登录页面,填写用户名和密码,确认正确后进入系统 用户可以在登录之后,浏览图书分类列表...
WebWork.Spring.Hibernate整合开发网络书城全系列视屏,浪曦出品,共6讲,很适合初学者学习借鉴。这是第一讲。
WebWork.Spring.Hibernate整合开发网络书城全系列视屏,浪曦出品,共6讲,很适合初学者学习借鉴。这是第六讲,最后一讲。
webwork学习的一个小例子,各位不妨一试。
本书所介绍的Struts 2已经完全超出了Struts 1框架原有的高度,Struts 2建立在Struts 1和WebWork两个框架整合的基础之上,因此提供了更多优秀的机制。 虽然Struts 1目前还未被完全淘汰,但Struts 1所表现出来的缺陷...
Struts 2建立在Struts 1和WebWork两个框架整合的基础之上,因此提供了更多优秀的机制。 虽然Struts 1目前还未被完全淘汰,但Struts 1所表现出来的缺陷已经处处制约着开发者的 手脚。在2007年上半年,Struts 2终于在...
在2007年上半年,Struts 2终于在众多开发者期盼中,发布了第一个稳定版本:2.0.6。 为了让众多Struts学习、工作者快速掌握Struts 2的开发,笔者精心编著了本书。 本书按Struts 2的架构体系,细致地介绍了Struts 2...