JForum研究
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()启动缓存引擎
获取缓存引擎实现类,SystemGlobals.getValue(…)
加载并初始化缓存引擎类
获取、加载并实例化可缓存的对象(主要是repository包下的类,如ForumRepository),同时将缓存引擎实例注入到可缓存的对象中。
6.创建freemark的Configuration类实例,并进行相应设置
templateCfg.setTemplateUpdateDelay(2);
templateCfg.setSetting("number_format", "#");
templateCfg.setSharedVariable("startupTime", new Long(new Date().getTime()));
String defaultPath = SystemGlobals.getApplicationPath() + "/templates";
FileTemplateLoader defaultLoader = new FileTemplateLoader(new File(defaultPath));
templateCfg.setTemplateLoader(defaultLoader);
调用ModulesRepository.init(SystemGlobals.getValue(ConfigKeys.CONFIG_DIR)),加载modulesMapping.properties模块映射文件
7.调用this.loadConfigStuff()方法,加载其他属性文件
ConfigLoader.loadUrlPatterns(),加载urlPattern.properties文件
I18n.load();加载国际化文件
Tpl.load(SystemGlobals.getValue(ConfigKeys.TEMPLATES_MAPPING)),加载templatesMapping.properties文件
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的配置模板引擎
ontrollerUtils utils = new ControllerUtils();
utils.refreshSession();
context.put("logged", SessionFacade.isLogged());
utils.prepareTemplateContext(context, forumContext);
context为freemarker中的SimpleHash类对象,context是真正的主角,所有需要再页面使用的变量都需放到该对象中。
(五) 调用this.processCommand(out, request, response, encoding, context, moduleClass)
获取moduleClass所对应的Command对象实例
进行请求处理并返回Tamplate对象
调用template.process(JForumExecutionContext.getTemplateContext(), out)进行输出显示
三.几个重要java类
1. net.jforum.util.preferences.SystemGlobls.java
存储了系统的全局变量,通过该类可以获取SystemGlobals.properties和相关配置文件的值。主要存储内容包括:
defaults = new Properties(),用于存储SystemGlobals.properties中的属性
installation = new Properties(),用于存储额外的属性配置文件,主要是安装jforum时候生成的jforum-custom.conf文件。
additionalDefaultsList = new ArrayList(),用于记录所加载过的附加的属性文件名。
queries = new Properties(),用于存储sql语句
transientValues = new Properties()存放瞬时变量
objectProperties = new HashMap(),存储对象
2. net.jforum.ConfigLoader.java
加载forum配置文件的通用工具类。主要方法及作用如下:
startSystemglobals(String appPath)
该方法调用了SystemGlobals的方法加载了SystemGlobals.properties、jforum-custom.cof、mysql.properties文件。
startCacheEngine()
实例化缓存引擎对象、实例化可缓存的对象(repository包下的类以及SessionFacade类)、将缓存引擎对象注入到可缓存的对象中。
loadModulesMapping(String baseConfigDir)加载 ModulesMapping.proerties。
loadUrlPatterns(),加载urlPattern.properties文件,解析保存到UrlPatternCollection类中
createLoginAuthenticator(),创建登陆验证对象,登记到SystemGloble.java对象中
分享到:
相关推荐
《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...
通过阅读这些PPT,你可以更直观地了解Jforum的工作原理和应用场景,对学习和使用Jforum大有裨益。 总结,Jforum是一个功能丰富的Java论坛系统,其源码解析有助于深入理解其内部机制。从数据库设计到缓存优化,再到...
《深入解析jforum3.0所需jar包》 在Java Web开发领域,jForum是一款流行的开源论坛系统,它基于Java语言编写,提供了丰富的社区交流功能。jForum3.0是其一个重要的版本,针对该版本的运行,我们需要一系列的jar包来...
对于想要深入了解FreeMarker模板引擎的开发者来说,JForum的源码是一个绝佳的学习资源。本篇文章将深入探讨JForum源码中的核心知识点,以及它如何与FreeMarker结合提供动态网页生成。 1. **FreeMarker模板引擎** ...
通过深入学习jforum2源码并结合JMeter进行性能测试,开发者不仅可以提升自身的技术能力,还可以为实际项目提供稳定且高效的论坛解决方案。同时,这也是对开源精神的实践,即分享、学习和共同进步。
总结来说,JForum3是一个成熟的Java论坛解决方案,它的完整源代码对于Java Web开发者来说是一个宝贵的资源,无论是用于学习、研究还是定制自己的论坛系统,都能从中受益匪浅。通过深入了解JForum3的架构和实现,...
Jforum是一款基于Java技术的开源论坛系统,以其高效、安全和可扩展性受到...通过深入学习和理解这些知识点,无论是开发者还是管理员,都能够更好地管理和维护Jforum论坛,提升用户体验,保障系统的稳定性和安全性。
通过研究JForum3的源代码,开发者不仅可以学习到Java Web开发的最佳实践,还能掌握如何构建一个健壮、易扩展的社区平台。无论是对Java框架的深入理解,还是对Web应用开发流程的整体把握,JForum3都是一份宝贵的教育...
总的来说,JForum3作为一个开源的Java论坛系统,为开发者和社区提供了构建在线讨论平台的强大工具,同时也为学习Java Web开发的人员提供了实践和研究的对象。无论是从功能实现、架构设计还是源码分析的角度,JForum3...
同时,这也是学习和理解Web论坛系统设计与实现的一个宝贵实践案例。 总之,Jforum 2.19是一个强大的Java论坛系统,结合MyEclipse这样的IDE,开发者可以轻松地进行开发、调试和部署工作,同时加深对Java Web技术的...
总之,JForum 2.1.8不仅是一个功能丰富的论坛系统,也是一个优秀的学习平台,对Java Web开发者具有很高的参考价值。通过深入了解和实践,我们可以掌握更多关于Java Web开发的知识,提高自己的技术水平。
《JForum漏洞利用源代码解析》 JForum是一款流行的开源Java论坛系统,它以其功能丰富、社区友好而受到许多用户的青睐。然而,如同任何复杂的软件系统一样,JForum也存在安全漏洞,这些漏洞可能被恶意用户利用,对...
Java开源论坛JForum是一款基于Java开发的讨论区平台,它为开发者提供了一个高效、功能...通过对JForum的源码学习,开发者可以掌握更多关于Web应用设计和实现的实用技巧,对于个人技术成长和职业发展都有着积极的影响。
总的来说,JForum是一个全面且成熟的论坛解决方案,它的源码学习对于Java开发者来说,不仅可以提升Web应用开发技能,还能深入理解MVC架构、数据库设计和权限管理等核心概念。通过对JForum的源码分析和实践,开发者...
【JForum SSO原理与配置】 JForum是一款开源的论坛软件,具备强大的功能。在与其他Web应用集成时,为了提供无缝的用户体验,通常需要实现单点登录(SSO,Single Sign On)。SSO允许用户在一个系统登录后,无需再次...
1、附件关系表JFORUM_ATTACH 2 2、附件详细信息表JFORUM_ATTACH_DESC 2 3、附件配置限定关系表JFORUM_ATTACH_QUOTA 2 4、封锁表JFORUM_BANLIST 2 5、标识表JFORUM_BANNER 3 6、书签表JFORUM_BOOKMARKS 3 7、...
为了成功运行JForum 3.0,我们需要了解和掌握以下几个关键知识点: 1. **Java环境**:首先,确保你已经安装了Java Development Kit (JDK)。JForum是用Java编写的,因此运行它需要Java环境支持。至少需要JDK 1.8或更...
JForum是一款流行的Java论坛软件,它提供了一个用户友好的界面,支持多语言,且具有高度可扩展性。CKEditor则是一个先进的在线文本编辑器,广泛用于网站内容管理系统,提供丰富的富文本编辑功能。在JForum中整合...
【JForum论坛创建详解】 JForum是一款知名的开源论坛软件,具备多语言支持,包括简体中文,虽然管理界面并未完全汉化。它以其强大的功能、优雅的界面以及清晰的代码结构,成为二次开发的理想选择。JForum基于BSD...