`
yoloo
  • 浏览: 39095 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

webwork源代码解读

    博客分类:
  • java
阅读更多
今天大致的看了下webwork2.2.4的几个核心的类,做个总结 :)

首先来看WebWork2.2.4.怎么分离HTTP请求,其实他是通过ServletDispatcher来达到目的.代码如下所示:
在ServletDispatcher里service方法的代码实现如下
java 代码
  1. DispatcherUtils du = DispatcherUtils.getInstance();
  2. du.prepare(request, response);
  3. try {
  4. request = du.wrapRequest(request, getServletContext());
  5. } catch (IOException e) {
  6. String message = "Could not wrap servlet request with MultipartRequestWrapper!";
  7. LOG.error(message, e);
  8. throw new ServletException(message, e);
  9. }
  10. ActionMapping mapping = ActionMapperFactory.getMapper().getMapping(request);
  11. if (mapping == null) {
  12. try {
  13. response.sendError(404);
  14. } catch (IOException e) {
  15. LOG.error("Could not send 404 after not finding any ActionMapping", e);
  16. }
  17. return;
  18. }
  19. du.serviceAction(request, response, getServletContext(), mapping);

最后一句进行了相应的处理,在DispatcherUtils 处理代码如下:
java 代码
  1. public HashMap createContextMap(Map requestMap,
  2. Map parameterMap,
  3. Map sessionMap,
  4. Map applicationMap,
  5. HttpServletRequest request,
  6. HttpServletResponse response,
  7. ServletContext servletContext) {
  8. HashMap extraContext = new HashMap();
  9. extraContext.put(ActionContext.PARAMETERS, new HashMap(parameterMap));
  10. //存放SessionMap,即对HttpSession封装后的map
  11. extraContext.put(ActionContext.SESSION, sessionMap);
  12. //存放applicationMap,即对Application封装后的map
  13. extraContext.put(ActionContext.APPLICATION, applicationMap);
  14. Locale locale = null;
  15. if (Configuration.isSet(WebWorkConstants.WEBWORK_LOCALE)) {
  16. locale = LocalizedTextUtil.localeFromString(Configuration.getString(WebWorkConstants.WEBWORK_LOCALE), request.getLocale());
  17. } else {
  18. locale = request.getLocale();
  19. }
  20. extraContext.put(ActionContext.LOCALE, locale);
  21. extraContext.put(ActionContext.DEV_MODE, Boolean.valueOf(devMode));
  22. extraContext.put(WebWorkStatics.HTTP_REQUEST, request);//存放HttpServletRequest
  23. extraContext.put(WebWorkStatics.HTTP_RESPONSE, response);
  24. extraContext.put(WebWorkStatics.SERVLET_CONTEXT, servletContext);
  25. extraContext.put(ComponentInterceptor.COMPONENT_MANAGER, request.getAttribute(ComponentManager.COMPONENT_MANAGER_KEY));
  26. // helpers to get access to request/session/application scope
  27. extraContext.put("request", requestMap);//存放RequestMap
  28. extraContext.put("session", sessionMap);
  29. extraContext.put("application", applicationMap);
  30. extraContext.put("parameters", parameterMap);
  31. AttributeMap attrMap = new AttributeMap(extraContext);
  32. extraContext.put("attr", attrMap);
  33. return extraContext;


对于HttpSession ,HttpServletRequest...等,webwork进行了相应的封装SessionMap,RequestMap..我们很容易通过它们来操作底层的HttpSession....

在ActionContext 里提供了~getSession()来获取的当前的SessionMap,对SessionMap的操作即是主要对HttpSession的操作,SesionMap的部分代码如下:
java 代码
  1. 1. public Object get(Object key) {
  2. 2. if (session == null) { //这里的session即是HttpSession
  3. 3. return null;
  4. 4. }
  5. 5.
  6. 6. synchronized (session) {
  7. 7. return session.getAttribute(key.toString());
  8. 8. }
  9. 9. }
  10. 10.
  11. 11. /**
  12. 12. * Saves an attribute in the session.
  13. 13. *
  14. 14. * @param key the name of the session attribute.
  15. 15. * @param value the value to set.
  16. 16. * @return the object that was just set.
  17. 17. */
  18. 18. public Object put(Object key, Object value) {
  19. 19. synchronized (this) {
  20. 20. if (session == null) {
  21. 21. session = request.getSession(true);
  22. 22. }
  23. 23. }
  24. 24.
  25. 25. synchronized (session) {
  26. 26. entries = null;
  27. 27. session.setAttribute(key.toString(), value);
  28. 28.
  29. 29. return get(key);
  30. 30. }
  31. 31. }
  32. 32.

对于ServletActionContext,继承ActionContext而来,主要提供了getRequest(),getResponse()等方法来对HttpServletRequest,HttpServletResponse进行操作,可以getRequest().getSession()来获取的HttpSession, 也可以通过 getServletContext() 来获得Servlet 的上下文。

:)
分享到:
评论

相关推荐

    xwork源代码(webwork源代码,xwork source,)

    《XWork源代码详解——深度剖析WebWork框架基础》 XWork源代码是WebWork框架的核心组成部分,WebWork是一款强大的MVC(Model-View-Controller)框架,它为Java Web应用提供了一种灵活且可扩展的开发模式。XWork作为...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    在"webwork-1.4-src.zip"这个压缩包中,包含了WebWork1.4的源代码,这对于学习和理解WebWork的工作原理以及进行定制开发非常有帮助。 1. **MVC模式**:WebWork1.4遵循MVC架构,将应用程序分为模型、视图和控制器三...

    webwork in action 源代码

    《WebWork in Action》是一本专注于介绍WebWork框架的书籍,源代码的提供是为了让读者更深入地理解和实践书中的示例。WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建动态Web应用程序。它强调了代码...

    webwork2实例源代码

    本实例源代码提供了深入理解WebWork2工作原理和应用开发的机会。以下是对WebWork2核心知识点的详细阐述: 1. **MVC架构**:WebWork2遵循MVC模式,将应用程序逻辑、用户界面和数据模型分离,提高代码的可维护性和可...

    commons hibernate spring webwork 等的源代码

    现在,让我们逐一深入探讨这些技术及其源代码的重要性。 1. **Apache Commons**: Apache Commons 是一个包含多个Java实用工具类的项目集合,它提供了大量的功能,如文件操作、数据转换、网络通信等。通过源代码,...

    webwork-2.2.5源码包下载.txt

    1. **解压源码包**:下载完成后,首先需要解压缩zip文件,得到WebWork-2.2.5的源代码及相关文档。 2. **环境准备**:确保已经安装了Java开发工具包(JDK),推荐版本为1.5以上。此外,还需要安装Ant或其他构建工具...

    webwork-2.2.2和xwork1.1.3的jar包and源代码

    这个压缩包包含的文件是WebWork 2.2.2和XWork 1.1.3版本的JAR包以及相关的源代码,这对于开发者来说是一份宝贵的参考资料。 WebWork是一个轻量级的MVC框架,它通过使用动作(Action)和结果(Result)的概念来处理...

    《webwork in action》源代码.rar

    《WebWork in Action》是一本专门探讨WebWork框架的书籍,源代码rar文件包含了书中用于示例和实践的完整代码。WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在Web应用程序开发中起着核心作用,帮助...

    webwork spring hibernate整合实例源代码

    在"webwork spring hibernate整合实例源代码"中,这三者结合的目的是实现高效的业务流程控制、灵活的依赖注入和便捷的数据持久化。整合过程通常包括以下几个步骤: 1. 配置Spring容器:创建Spring的配置文件(如`...

    webwork spring hibernate整合实例源代码全部jar包

    这个"webwork spring hibernate整合实例源代码全部jar包"是针对这些框架集成的一个实践示例,包含了完整的源代码和必要的库文件。 Webwork是一个基于MVC(模型-视图-控制器)设计模式的Java Web框架,它提供了强大...

    struts2源代码分析

    Struts2的设计思路和工作流程与Struts1.x有很大的区别,这使得深入理解其源代码变得至关重要。 在分析Struts2的源代码之前,你需要首先获取Struts2的源代码,可以通过访问...

    Struts 2.1权威指南基于WebWork核心的MVC开发源代码

    Struts 2.1是Apache软件基金会开发的一个开源框架,它是基于WebWork核心的MVC(Model-View-...通过深入学习并实践其中的源代码,开发者不仅能提升对MVC设计模式的理解,还能增强在实际项目中应用Struts 2.1的能力。

    《Struts2权威指南——基于WebWork核心的MVC开发》源代码 part06

    《Struts2权威指南——基于WebWork核心的MVC开发》的源代码。请完全放心,绝对保证质量。由于源码中包含jar文件,打出的包过大,只能分多次上传,请谅解。原文件大于415M,压缩后377M,分压成16个包。此为第68个包。

    webwork登陆代码

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它被广泛用于构建企业级Web应用程序。这个"webwork登陆代码"示例显然展示了如何在WebWork框架下实现一个基本的用户登录功能。下面将详细介绍WebWork的...

    Struts 2权威指南--基于WebWork核心的MVC开发(源代码)

    总结,"Struts 2权威指南--基于WebWork核心的MVC开发"不仅涵盖了Struts 2的基本架构,还提供了实际操作的源代码示例,帮助开发者深入理解MVC模式在Struts 2中的应用,以及如何通过WebWork核心实现高效、可维护的Web...

    webwork

    这个"webwork源码下载"可能是指获取WebWork框架的源代码,这对于学习、调试或自定义框架功能的开发者来说是很有价值的。 WebWork的核心特性包括: 1. **动作映射**:WebWork通过XML配置文件定义动作(Action)与...

    webwork的jar包

    而`webwork-src-2.2.7.jar` 文件则包含了源代码,这对于开发者来说非常有用,因为可以方便地查看和学习框架的内部实现。 在WebWork 2.2.4+Spring+Hibernate的组合中,我们可以看到WebWork与两个其他流行框架的集成...

    webwork源码底层实现

    `com`目录下的源代码包含了许多Action类,它们是业务逻辑的具体实现。 4. **Interceptors(拦截器)**:WebWork引入了拦截器的概念,它们在Action执行前后执行,可以实现通用的功能,如权限检查、日志记录等。在...

Global site tag (gtag.js) - Google Analytics