`
gkm422
  • 浏览: 81794 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

webwork学习(一)

阅读更多

      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学习资料

    一本webwork入门级的学习资料,初学者可以参考.

    WebWork2学习笔记

    java程序员WebWork2框架学习笔记一

    webwork 入门学习

    附件包含一个新建WEB项目文档,与一个新建项目的例子。希望对初学WEBWORK都有帮忙。

    webwork_test demo

    webwork是与struts2相似的一种web开发框架,这里这个demo可以让你轻松学习webwork基本的action配置、访问,为了区别可以在本空间中下载基于struts2框架的应用Struts2,加以对比,可以让你一下学习两种web框架。

    WebWork教程(初学者的学习)

    WebWork教程(初学者的学习) 其中囊括了WebWork的基础知识,是WebWork的初级教程,非常适合于初学者,本教程中详细介绍了有关WebWork的诸多内容!希望会对每一个学习有所帮助!

    WebWork 2.x Demo 例子

    大家好塞 自己编写了一个 目前比较流行的web框架, ...WebWork 基于2.x的一个Demo 希望对该框架有兴趣的 兄弟 可以download下来 看看 研究 研究,与此同时也 希望有什么问题 共同努力 共同学习 谢谢哈

    webwork in action 第一卷(高清中文版1/3)

    这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。  学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的代码、API等早晚都会被淘汰...

    webwork+spring+ibatis+velocity实例

    最近学习项目需要,学习了webwork,spring,ibatis,velocity.并做了一个DEMO.

    webwork in action 第二卷(高清中文版2/3)

    这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。  学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的代码、API等早晚都会被淘汰,但...

    webwork in action 第三卷(高清中文版3/3)

    这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。  学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的代码、API等早晚都会被淘汰,...

    Struts.2权威指南--基于WebWork核心的MVC开发 part2

    Struts.2权威指南--基于WebWork核心的MVC开发 学习struts2的一本好书

    WebWork+Spring+Hibernate整合开发网络书城_02(附源代码)

    Web层:WebWork 中间层:Spring IoC 持久层:Hibernate, 需求分析: 用户在注册页面,填写注册信息,确认有效注册成为新用户 用户在登录页面,填写用户名和密码,确认正确后进入系统 用户可以在登录之后,浏览图书分类列表...

    WebWork+Spring+Hibernate整合开发网络书城_01(附源代码)

    Web层:WebWork 中间层:Spring IoC 持久层:Hibernate, 需求分析: 用户在注册页面,填写注册信息,确认有效注册成为新用户 用户在登录页面,填写用户名和密码,确认正确后进入系统 用户可以在登录之后,浏览图书分类列表...

    WebWork.Spring.Hibernate整合开发网络书城全系列视屏

    WebWork.Spring.Hibernate整合开发网络书城全系列视屏,浪曦出品,共6讲,很适合初学者学习借鉴。这是第一讲。

    WebWork.Spring.Hibernate整合开发网络书城全系列视屏6

    WebWork.Spring.Hibernate整合开发网络书城全系列视屏,浪曦出品,共6讲,很适合初学者学习借鉴。这是第六讲,最后一讲。

    HelloDuke

    webwork学习的一个小例子,各位不妨一试。

    Struts 2 权威指南:基于WebWork核心的MVC开发 光盘

    本书所介绍的Struts 2已经完全超出了Struts 1框架原有的高度,Struts 2建立在Struts 1和WebWork两个框架整合的基础之上,因此提供了更多优秀的机制。 虽然Struts 1目前还未被完全淘汰,但Struts 1所表现出来的缺陷...

    Struts2权威指南--基于WebWork核心的MVC开发(完整版) 积分少

    Struts 2建立在Struts 1和WebWork两个框架整合的基础之上,因此提供了更多优秀的机制。 虽然Struts 1目前还未被完全淘汰,但Struts 1所表现出来的缺陷已经处处制约着开发者的 手脚。在2007年上半年,Struts 2终于在...

    Struts2权威指南--基于WebWork核心的MVC开发(完整版)

    在2007年上半年,Struts 2终于在众多开发者期盼中,发布了第一个稳定版本:2.0.6。 为了让众多Struts学习、工作者快速掌握Struts 2的开发,笔者精心编著了本书。 本书按Struts 2的架构体系,细致地介绍了Struts 2...

Global site tag (gtag.js) - Google Analytics