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

JForum研究

阅读更多

http://www.javaeye.com/topic/253087

 

JForum.java 可以称为是 jforum 的引擎,它继承自 net.jforum.JForumBaseServlet 类,并间接的继承了 HttpServlet 。当第一次请求该应用的时候, servlet 容器将加载该类,并调用其初始化方法 init(ServletConfig config) ,并调用 service 方法处理请求。(但最好配置成加载应用的时候就初始化该类)

一、 init(ServletConfig config)

(一)   调用其父类 init(config) 方法

该方法主要职责是加载主要配置文件,配置 jfreemarker 的模板引擎,并保存到 net.jforum. JForumExecutionContext 类。

详细内容包括:

1.          获取 servletContext 路径;

2.          判断应用开发模式;

3.          设置 log4j 文件路径;

4.          调用 ConfigLoader.startSystemglobals(appPath) 加载全局变量文件 SystemGlobals.properties 以及用户自定义的配置文件,例如, mysql.properties 文件。

5.          调用 ConfigLoader.startCacheEngine() 启动缓存引擎

l          获取缓存引擎实现类, SystemGlobals.getValue(…)

l          加载并初始化缓存引擎类

l          获取、加载并实例化可缓存的对象 ( 主要是 repository 包下的类,如 ForumRepository) ,同时将缓存引擎实例注入到可缓存的对象中。

6.          创建 freemark  Configuration 类实例,并进行相应设置

l          templateCfg.setTemplateUpdateDelay(2);

l          templateCfg.setSetting("number_format", "#");

l          templateCfg.setSharedVariable("startupTime", new Long(new Date().getTime()));

l          String defaultPath = SystemGlobals.getApplicationPath() + "/templates";

l          FileTemplateLoader defaultLoader = new FileTemplateLoader(new File(defaultPath));

l          templateCfg.setTemplateLoader(defaultLoader);

l          调用 ModulesRepository.init(SystemGlobals.getValue(ConfigKeys.CONFIG_DIR)) ,加载 modulesMapping.properties 模块映射文件

7.          调用 this.loadConfigStuff() 方法,加载其他属性文件

l          ConfigLoader.loadUrlPatterns() ,加载 urlPattern.properties 文件

l          I18n.load(); 加载国际化文件

l          Tpl.load(SystemGlobals.getValue(ConfigKeys.TEMPLATES_MAPPING)), 加载 templatesMapping.properties 文件              

l          BBCodeRepository.setBBCollection(new BBCodeHandler().parse()); 其加载并处理了 bb_config.xml文件

8.          调用 JForumExecutionContext.setTemplateConfig(templateCfg)

(二)   调用父类 startApplication() 方法

1.          SystemGlobals.loadQueries(SystemGlobals.getValue(ConfigKeys.SQL_QUERIES_GENERIC)); 加载 generic_quries.sql 文件

2.          SystemGlobals.loadQueries(SystemGlobals.getValue(ConfigKeys.SQL_QUERIES_DRIVER)); 加载相应数据库的 sql 文件

3.          String filename = SystemGlobals.getValue(ConfigKeys.QUARTZ_CONFIG);

4.          SystemGlobals.loadAdditionalDefaults(filename);

5.          加载任务调度文件 quartz-jforum.properites

6.          ConfigLoader.createLoginAuthenticator();

7.          创建 net.jforum.sso.DefaultLoginAuthenticator 对象,并注册到 SystemGlobals 对象中。

8.          ConfigLoader.loadDaoImplementation();

9.          加载并初始化 net.jforum.dao.mysql.MysqlDataAccessDriver 类,该类是访问各种 DAO 入口。

10.      ConfigLoader.listenForChanges();

11.      ConfigLoader.startSearchIndexer();

12.      ConfigLoader.startSummaryJob();

(三)   调用 ForumStartup.startDatabase() 方法

创建 DBConnection 实例

(四)   获得数据库连接 DBConnection.getImplementation().getConnection()

(五)   获取 net.jforum.JForumExecutionContext 的对象 ex = JForumExecutionContext.get() 并进行相关设置 ex.setConnection(conn);JForumExecutionContext.set(ex);

(六)   调用 ForumStartup.startForumRepository()

加载论坛主要信息,包括 ForumDAO, CategoryDAO, ConfigDAO 的相关信息以及论坛的总体数据( loadUsersInfo() 如用户总数, loadMostUsersEverOnline() 最高峰值)

(七)   RankingRepository.loadRanks()

(八)   SmiliesRepository.loadSmilies()

(九)   BanlistRepository.loadBanlist()

 

二、 service(HttpServletRequest req, HttpServletResponse res) 方法

(一)   request = new WebRequestContext(req);  reqeust 对象进行包装,完成了对 url 路径的解析,将 module  action  paremeter 等保存 request 对象的 query 文件属性中。

(二)   实例化 JForumContext 对象 forumContext = new

JForumContext(request.getContextPath(),SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION), request, response);

(三)    forumContext 注册到 JForumExecutionContext

ex = JForumExecutionContext.get();ex.setForumContext(forumContext);

JForumExecutionContext.set(ex);

(四)   进一步进行 freemarker 的配置模板引擎

l          ontrollerUtils utils = new ControllerUtils();

l          utils.refreshSession();

l          context.put("logged", SessionFacade.isLogged());                                                

l          utils.prepareTemplateContext(context, forumContext);

context  freemarker 中的 SimpleHash 类对象, context 是真正的主角,所有需要再页面使用的变量都需放到该对象中。

(五)   调用 this.processCommand(out, request, response, encoding, context, moduleClass)

l          获取 moduleClass 所对应的 Command 对象实例

l          进行请求处理并返回 Tamplate 对象

调用 template.process(JForumExecutionContext.getTemplateContext(), out) 进行输出显示

三.几个重要java类

1.       net.jforum.util.preferences.SystemGlobls.java

存储了系统的全局变量,通过该类可以获取 SystemGlobals.properties 和相关配置文件的值。主要存储内容包括:

l         defaults = new Properties() ,用于存储 SystemGlobals.properties 中的属性

l         installation = new Properties() ,用于存储额外的属性配置文件,主要是安装 jforum 时候生成的 jforum-custom.conf 文件。

l         additionalDefaultsList = new ArrayList() ,用于记录所加载过的附加的属性文件名。

l         queries = new Properties() ,用于存储 sql 语句

l         transientValues = new Properties() 存放瞬时变量

l         objectProperties = new HashMap() ,存储对象

2.       net.jforum.ConfigLoader.java

加载 forum 配置文件的通用工具类。主要方法及作用如下:

l         startSystemglobals(String appPath)

该方法调用了 SystemGlobals 的方法加载了 SystemGlobals.properties  jforum-custom.cof  mysql.properties文件。

l         startCacheEngine()

实例化缓存引擎对象、实例化可缓存的对象( repository 包下的类以及 SessionFacade 类)、将缓存引擎对象注入到可缓存的对象中。

l         loadModulesMapping(String baseConfigDir) 加载 ModulesMapping.proerties 

l         loadUrlPatterns() ,加载 urlPattern.properties 文件,解析保存到 UrlPatternCollection 类中

l         createLoginAuthenticator() ,创建登陆验证对象,登记到 SystemGloble.java 对象中

分享到:
评论

相关推荐

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

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

    JForum3 jforum java 开源论坛 论坛

    JForum3是一款基于Java开发的开源论坛系统,其核心设计目标是提供一个高效、稳定且功能丰富的在线讨论平台。...无论是从功能实现、架构设计还是源码分析的角度,JForum3都是值得深入研究的Java项目。

    Jforum2.19

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

    jforum3源代码

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

    JForum3 完整项目

    总结来说,JForum3是一个成熟的Java论坛解决方案,它的完整源代码对于Java Web开发者来说是一个宝贵的资源,无论是用于学习、研究还是定制自己的论坛系统,都能从中受益匪浅。通过深入了解JForum3的架构和实现,...

    jforum 源码

    源码中可以研究如何创建索引、执行查询以及优化搜索性能。 8. **缓存机制** 为了提高性能,JForum使用了缓存策略,例如EhCache。通过分析源码,你可以了解到如何实现数据缓存,减少对数据库的访问。 9. **论坛...

    jforum2论坛源码

    通过研究jforum2源码,可以学习如何实现这些功能,并了解论坛系统的常见架构设计。 4. **性能测试**:JMeter的使用是测试jforum2性能的关键。开发者需要了解如何创建测试计划,定义线程组(模拟用户),设置采样器...

    jforum2.1.8

    同时,还可以研究其数据库设计,学习如何优化数据模型以适应大规模的用户交互。 此外,官方提供的安装说明文档是安装过程中不可或缺的指南。它详细解释了每个步骤的操作细节,帮助用户解决可能出现的问题。如果遇到...

    Jforum-2.1.9

    《Jforum-2.1.9:构建高效社区...无论你是想搭建一个社区网站,还是希望深入学习Java Web开发,Jforum都是一个值得研究和实践的优秀平台。通过深入了解和实践,你可以充分利用它的特性,打造出满足特定需求的论坛系统。

    jforum-2.1.8-src.zip

    通过深入研究这些源代码和相关文件,我们可以了解到JForum 2.1.8在架构设计、数据库交互、用户界面、会话管理等方面的实现细节。同时,源码的学习也能提升我们的Java Web开发技能,尤其是对于MVC(Model-View-...

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

    5. **数据库设计**:配合SQL SERVER 2008数据库,jForum的数据存储和查询优化值得深入研究。`jforum_ns.bak`是数据库备份文件,可以还原到SQL SERVER 2008中,观察论坛的表结构、索引和数据关系。 其次,关于SQL ...

    jforum开源论坛

    由于JForum是开源的,开发者可以深入研究源码,了解其工作原理,并进行二次开发。这包括但不限于添加新功能、优化性能、调整界面样式等。JForum的源码结构清晰,注释丰富,对于Java初学者来说,也是一个很好的学习...

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

    《jforum开源论坛官方源代码(2.1.9)详解》 JForum是一款基于Java技术的开源论坛系统,以其高效、稳定和易用性在开源社区中受到...通过研究源代码,我们可以提升自己的编程技巧,理解如何构建高效、安全的网络社区。

    jforum项目

    《JForum项目解析与源码探索》...通过研究其源码,我们可以深入理解这些技术的实战应用,进一步提升我们的开发能力。对于那些想要从事Java Web开发或者对开源论坛系统感兴趣的开发者,JForum无疑是一个宝贵的实践平台。

    jforum的源代码和物理结构

    **JForum 源代码与物理结构详解** JForum 是一个功能丰富的开源论坛系统,以其高效、可扩展和用户友好的界面而闻名。这个压缩包包含 JForum...因此,花时间去研究和理解 JForum,将对你的编程技能和职业发展大有裨益。

    jforum3.0可以运行的源码

    jforum3.0从SVN上导出来的时候缺少jar包,经过不断的测试与添加终于能在myeclipse下面运行啦。可是现在的jforum3.0仍然...如果不介意的话可以下载回去研究一下哦。我上传的东西没有jar包哦,jar包我会打包另行上传的。

    开源jsp论坛jforum-2.1.9源码带mysql数据库文件

    2. Servlet与JavaBean:研究Servlet如何处理HTTP请求,以及JavaBean如何封装业务逻辑和数据模型。 3. 数据库设计:查看数据库脚本,了解表结构和数据关系,学习如何优化查询性能。 4. 安全实践:分析JForum如何防止...

    JForum-2.1.4.rar_JForum-2.1.4_java 论坛源码_jforum_论坛源码_论坛网站源码

    **JForum 2.1.4 - Java 开源论坛系统详解** JForum 是一个功能强大的、基于Java技术的开源论坛软件。它以其高效、稳定、易于定制和丰富的特性深受开发者和社区管理员的喜爱。JForum 2.1.4 版本是这个项目的其中一个...

    开源jsp论坛_ jforum 2.1.4源码

    通过研究`JForum 2.1.4`源码,开发者不仅可以掌握JSP的基础知识,还能了解到Web开发中的许多最佳实践,如使用MVC模式、模板引擎、数据库交互等。同时,对于想要自定义论坛功能或开发自己的Web应用的开发者来说,这是...

    [论坛社区]JForum开源论坛 2.1.6_jforum216.zip

    总的来说,通过研究JForum 2.1.6的源码,不仅可以学习到基础的Java和JSP知识,还能深入了解Web应用开发的各个方面,对于提升个人技能和完成毕业设计都是非常有价值的。同时,参与开源项目也可以让你接触到实际的开发...

Global site tag (gtag.js) - Google Analytics