`
jinjiankang
  • 浏览: 112939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JForum源代码研究—ThreadLocal,用户特有的变量

阅读更多

JForumExecutionContext是一个很有意思的类!顾名思义,这是一个执行期或运行期上下文类。嗨,等于没说!先看其类变量:

private static ThreadLocal userData = new ThreadLocal();
private static Logger logger = Logger.getLogger(JForumExecutionContext.class);
private static Configuration templateConfig;
	
private Connection conn;
private ForumContext forumContext;
private SimpleHash context = new SimpleHash(ObjectWrapper.BEANS_WRAPPER);
private String redirectTo;
private String contentType;
private boolean isCustomContent;

private boolean enableRollback;
 

静态变量 logger 就不多说了。静态变量templateConfig, 这是freemarker 的经典用法,也不多说了。对于非静态变量,都是特定用户相关的 。即用户 A 的“ redirectTo ”与用户 B 的“ redirectTo ”值是不同的。 context 也是和用户相关,用户 A 可能会使用 context.put("userName", " 张三 ") ,而用户 B 可能会使用 context.put("userName", " 李四 ") ,在页面上可能会这样:你好, ${userName} 。每个用户的 HttpServletRequest HttpServletResponse 也是不同的,因此,forumContext也是和用户相关的。contentType、isCustomConent和enableRollback都是和特定用户相关的。

 

特别地,为什么 conn 也是和用户相关的呢?通常,数据库连接应该和用户没有关系啊!?关键是,当用户请求执行到最后,可能用户 A 要提交,而用户 B 要回滚,要做到这一点必须要记录用户 A 最初获得的是哪个 conn ,而不能随便从连接池中获得一个 conn ,因此, conn 也是和用户相关的。如果你查看JForum的诸多 DAO 方法,你会发现系统使用JForumExecutionContext.getConnection() 而不是从连接池中 来获得数据库连接。当然,当用户的请求被处理完毕后,要使用JForumExecutionContext. finish() 来释放数据库连接。

 

“每个用户都有自己独立的变量值”,联想一下“每个线程都有自己独立的变量值”,你一定会想起 ThreadLocal 的用法。这里 userData 是静态的,这是 ThreadLocal API 里推荐 使用的修饰符。

 

 

 

 

 

分享到:
评论

相关推荐

    jforum3源代码

    通过研究JForum3的源代码,开发者不仅可以学习到Java Web开发的最佳实践,还能掌握如何构建一个健壮、易扩展的社区平台。无论是对Java框架的深入理解,还是对Web应用开发流程的整体把握,JForum3都是一份宝贵的教育...

    jforum的源代码和物理结构

    在 JForum 的源代码中,你可以看到不同模块的实现,包括用户认证、论坛管理、帖子创建与回复、搜索功能等。通过阅读源代码,开发者可以了解到如何处理数据库交互、实现模板引擎以及如何优化论坛性能。这对于那些想要...

    jforum3源代码 数据库

    **JForum3源代码数据库详解** JForum3是一款基于Java的开源论坛系统,它提供了丰富的社区功能,包括用户管理、论坛板块、主题讨论、帖子回复等。本篇将深入探讨JForum3的源代码和其与数据库的交互,以及如何进行...

    jforum漏洞利用源代码

    《JForum漏洞利用源代码解析》 JForum是一款流行的开源Java论坛系统,它以其功能丰富、社区友好而受到许多用户的青睐。然而,如同任何复杂的软件系统一样,JForum也存在安全漏洞,这些漏洞可能被恶意用户利用,对...

    jforum配置安装介绍+源代码

    jforum配置安装介绍+源代码 jforum配置安装介绍+源代码

    jforum开源论坛 官方源代码(2.1.9)

    《jforum开源论坛官方源代码(2.1.9)详解》 JForum是一款基于Java技术的开源论坛系统,以其高效、稳定和易用性在开源社区中受到广泛关注。本次我们探讨的是JForum的2.1.9版本,这是一个经过众多开发者共同努力优化...

    jforum 2.1.9源码

    1. **Core**:这是JForum的核心模块,包含了论坛的基本功能,如用户管理、论坛板块、帖子处理等。其中,`com.jforum`包下包含了大部分业务逻辑,而`com.jforum.util`则提供了基础工具类。 2. **Database**:JForum...

    jforum2.1.9代码及SQL SERVER数据库备份

    本资源包含了jForum2.1.9的完整源码,以及针对SQL SERVER 2008数据库的备份文件,为用户提供了便捷的部署和学习环境。 首先,jForum的核心特性在于它的模块化设计,允许开发者轻松地扩展和定制功能。源码分析可以从...

    jforum-2.1.8版本完整源代码(1)

    jforum-2.1.8版本完整源代码(1),因为完整版本超过15mb,因此分成两部分下载。

    Jforum2.19

    通过深入研究Jforum的源代码,开发者可以了解到Java Web应用的开发模式,包括MVC架构、ORM框架的使用(如Hibernate)、国际化处理、权限控制等方面的知识。同时,这也是学习和理解Web论坛系统设计与实现的一个宝贵...

    jforum-2.1.8-编译代码.zip

    在这个"jforum-2.1.8-编译代码.zip"压缩包中,包含了JForum 2.1.8版本的源代码,对于开发者来说,这是一个深入理解JForum工作原理、进行二次开发或定制化改造的宝贵资源。 首先,让我们了解JForum的基本架构。...

    JForum源代码

    它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多数据库等等特性。 JForum 采用 FreeMarker 作为

    jforum-2.1.8版本完整源代码(2)

    jforum-2.1.8版本完整源代码(2) 请找到(1)部分一起解压。

    jforum2.1.8

    对于开发者而言,JForum 2.1.8的源代码是一份宝贵的资源。通过阅读和学习源码,可以了解Web应用的设计模式,如MVC架构,以及如何利用Java Servlets和JSP进行动态网页开发。同时,还可以研究其数据库设计,学习如何...

    JForum3 jforum java 开源论坛 论坛

    这款论坛软件使用了Java语言编写,遵循开放源代码的原则,允许用户自由地使用、修改和分发。JForum3是JForum系列的第三个主要版本,相较于前两个版本,它在性能、安全性和用户体验方面都做了显著的提升。 在Java...

    JForum3 完整项目

    这个项目包含的是从版本控制系统Subversion(SVN)中导出的完整源代码,未经任何修改,因此用户可以深入研究其内部机制,进行二次开发或者学习Java Web应用的构建。 **JForum3核心特性** 1. **多语言支持**:...

    java开源论坛jforum

    JForum的源代码是公开的,这对于学习Java Web开发和理解MVC模式的人来说是一份宝贵的资源。通过阅读和分析JForum的代码,开发者可以深入了解如何在实际项目中应用MVC模式,学习到如何组织代码以提高可读性和可维护性...

    Jforum相关文档和PPT

    开发者可以通过跟踪源代码或日志来理解这一过程,以便在出现问题时快速定位原因。 处理请求的流程主要遵循Model-View-Controller(MVC)设计模式。在Jforum中,用户请求被控制器(Controller)接收,然后根据请求...

    jforum说明文档 源码解析 单点登录 jforum缓存

    **Jforum:一个开源的Java论坛系统** Jforum是一款基于Java技术的开源论坛软件,它提供了丰富的社区功能,包括...通过学习和研究,开发者不仅可以掌握Jforum的使用,还能借鉴其设计思想,提升自己的Java Web开发能力。

    jforum2论坛源码

    标题"jforum2论坛源码"表明了我们关注的是一个名为jforum2的开源论坛系统的源代码。jforum2是一个基于Java技术的讨论板平台,允许用户进行互动交流,提供社区建设和管理功能。源码通常包含程序的所有原始代码,可供...

Global site tag (gtag.js) - Google Analytics