`

JForum安装用例

阅读更多

1,键入http://localhost:8080/JForum/install.jsp

2,install.jsp有一个自动跳转;跳转到install/install.page?module=install&action=welcome

3,服务器截获install/install.page请求;交给一个名为net.jforum.InstallServlet的Servlet处理

4,如果net.jforum.InstallServlet是第一次启动,先要执行其init()方法。在该方法中:

 4.1调用父类JForumBaseServlet的init()方法。

 (一)加载日志文件。

  (1)装载/WEB-INF/log4j.xml日志文件

 (二)加载系统的全局变量。

  (2)使用ConfigLoader类装载系统全局变量属性文件/WEB-INF/config/SystemGlobals.properties和数据库属性文件/WEB_INF/config/database/mysql/mysql.properties

  (3)判断/WEB_INF/config/jforum-custom.conf是否存在,如果存在加载该配置文件中的属性
 
 (三)启动系统的缓存机制。

  (4)使用ConfigLoader类的startCacheEngine()方法启动缓存引擎,在该方法中:

   a.创建net.jforum.cache.DefaultCacheEngine类的对象

   b.调用net.jforum.cache.DefaultCacheEngine对象的init()方法,在该创建一个HashMap对象。

   c.在SystemGlobals.properties中找到需要缓存的对象(在"cacheable.objects"键中指明),将刚刚创建的net.jforum.cache.DefaultCacheEngine对象传递给这些需要缓存的对象。这些缓存的对象包括:

   net.jforum.repository.BBCodeRepository, 
   net.jforum.repository.RankingRepository, 
   net.jforum.repository.SmiliesRepository, 
   net.jforum.repository.ForumRepository, 
   net.jforum.repository.TopicRepository, 
   net.jforum.SessionFacade, 
   net.jforum.repository.PostRepository, 
   net.jforum.repository.Tpl, 
   net.jforum.repository.RolesRepository, 
   net.jforum.repository.SecurityRepository, 
   net.jforum.repository.BanlistRepository

 (四)加载FreeMarker模板。
  
  (5)创建FreeMarker的配置对象Configuration

  (6)创建FreeMarker的模板加载器FileTemplateLoader

  (7)在配置对象Configuration设置模板加载器FileTemplateLoader
 
 (五)加载模块库。

  (8)借助ModulesRepository类在缓存中加载模块库。ModulesRepository类中有一个HashMap对象,该对象中有一个键名是entries,对应的值类型是Properties。该Properties对象是通过ConfigLoader的loadModulesMapping方法加载modulesMapping.properties文件实现的。modulesMapping.properties文件中描述了字符串与特定模块之间的映射关系(某个模块Module实际上是指某个特定的Action)。这样就实现了字符串与特定Action类的映射。

 (六)通过JForumBaseServlet类的loadConfigStuff()加载其他的配置文件

  (9)调用ConfigLoader类的loadUrlPatterns()方法加载urlPattern.properties文件

  (10)调用I18n类的load()方法加载locales.properties。

  (11)加载templatesMapping.properties文件

 (七)将FreeMarker的配置对象Configuration,存储到JForumExecutionContext中。

5,net.jforum.InstallServlet执行其service()方法

 5.1从SystemGlobals.properties文件中取出encoding属性。默认是UTF-8。

 5.2设置HttpRequest请求编码为UTF-8。

 5.3创建WebRequestContext对象

  (一)分析请求类型
  
   (1)获取请求的方法类型并转换成大写(GET/POST),在安装用例中请求类型是GET。

  (二)提取URI
  
   (1)获取请求的上下文路径,即web项目的名称,比如:/JForum

   (2)借助extractRequestUri(String requestUri, String contextPath)方法,提取uri剔除原始uri中含有的上下文部分,比如:/forums/install.page

   (3)分析URI中是否含有sessionid,用过分号识别。
  
  (三)URL请求分析

   (1)从SystemGlobals.properties配置文件中取出编码的配置方式,即UTF-8。

   (2)获取servlet截获的后缀名,即.page。

   (3)判断请求方式requestType是GET请求还是POST请求,在安装用例中是GET请求。

   (4)判断查询字符串是否为空,通过HttpRequest的getQueryString()方法获取查询字符串即?后面的部分。在安装用例中是:module=install&action=welcome。

   (5)判断是form提交的POST请求,还是form提交的GET请求,还是URL提交的GET请求。在安装用例中是URL提交的GET请求。

   (6)判断MIME类型,推断是否有文件上传。安装用例中没有文件上传。
   
   (7)判断是否有Ajax异步请求,在安装用例中没有异步请求。
   
   (8)借助superRequest.setCharacterEncoding(encoding)对客户端请求进行重新编码。即UTF-8。

   (9)从SystemGlobals.properties配置文件中取出容器的编码配置。

   (10)把URL中的查询字符串取出,并调用addParameter(String name, Object value)方法,把参数及参数值存储到WebRequestContext对象的query属性中。在存入过程中,借助(1)、(9)对参数值进行编码转换。
  
 5.4创建WebResponseContext对象

 5.5创建JForumExecutionContext类对象
 
  Thread类中有个属性是ThreadLocalMap对象,在这个ThreadLocalMap对象中,以某个ThreadLocal类的对象为键,以该Thread对象需要保有的数据为值。以ThreadLocal类的set()和get()方法作为操作接口,实现Thread对象和其保有的局部数据之间的映射。

  在JForum中,这个需要保有的数据就是JForumExecutionContext类的对象。该对象实际上是一个数据访问接口或者也可以称之为一个大容器。通过保有该对象,就可以访问到一些数据。比如:

   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;

  上面这些数据都是每个线程一份副本。还有一些数据是多线程共享的,比如:

   private static ThreadLocal userData = new ThreadLocal();
   private static Logger logger = Logger.getLogger(JForumExecutionContext.class);
   private static Configuration templateConfig;

 5.6创建JForumContext类对象,该对象持有/JForum上下文路径、servlet截获的后缀名、request对象、response对象。将上述JForumContext类对象存储到JForumExecutionContext中。
 
 5.7将JForumExecutionContext对象存储到当前线程中的ThreadLocalMap中,在该Map中以JForumExecutionContext类对象的ThreadLocal属性为键,以JForumExecutionContext类对象为值。

 5.8用SimpleHash装载模板环境。包括:

  contextPath;
  serverName;
  templateName;
  serverPort;
  I18n;
  encoding;
  extension;
  JForumContext;
  version;

 5.9判断安装用例是否已经运行过,如果没有

  (一)取得模块类的名字,在安装用例中是"net.jforum.view.install.InstallAction"

  (二)在SimpleHash中添加键值对moduleName——install、action——welcome

  (三)利用response构建输出流

  (四)创建net.jforum.view.install.InstallAction类的对象。

  (五)调用net.jforum.view.install.InstallAction类的process(RequestContext request, ResponseContext response, SimpleHash context)方法。

   (1)设定模板default/empty.htm。

   (2)调用父类Command的process(RequestContext request, ResponseContext response, SimpleHash context)方法。

    a.取得action的名字"welcome"

    b.通过Java的反射机制调用InstallAction类的welcome()方法

     b1调用InstallAction类的checkLanguage()方法

      获取语言类型

      依据语言类型加载config/languages下的语言配置文件

      创建UserSession,将语言类型存储到UserSession中

      通过SessionFacade存储UserSession,本质上是存储在WebRequestContext中。但WebRequestContext存储在JForumContext中,而JForumContext又存储在JForumExecutionContext中,所以这个存储流程罗嗦异常。

      在Session和FreeMarker的SimpleHash中添加language属性。

     b2在SimpleHash中添加如下属性:

      "language", 
      "database"
      "dbhost"
      "dbuser"
      "dbname"
      "dbport"
      "dbpasswd"
      "dbencoding"
      "use_pool"
      "forumLink"
      "siteLink"
      "dbdatasource"
     
     b3设置模版install.htm

    c.JForumExecutionContext中的redirectTo属性置空。
    
    d.存储请求的模板名。

    e.装载模板。


 5.10从JForumExecutionContext中取出重定向到信息,如果不为空就进行页面跳转。安装用例中为空。

 5.11调用JForumExecutionContext类的finish()方法释放资源。在安装用例中主要释放当前线程的局部数据。

分享到:
评论

相关推荐

    jforum安装

    《JForum安装详解》 JForum是一款开源的、基于Java技术的论坛系统,以其高度可定制性和稳定性在互联网上广受欢迎。本文将详细介绍如何进行JForum的安装过程,包括环境准备、源码获取、编译及部署等步骤,旨在帮助...

    Jforum安装部署

    ### JForum 安装部署详解 #### 一、概述 JForum是一款开源的Java类论坛系统,以其小巧高效而著称。它不仅采用了多种JSP新技术,还支持多种数据库(如HSQLDB、Oracle、MySQL、PostgreSQL等),并且遵循MVC设计模式...

    jforum安装(性能测试环境搭建)

    本篇文章将详细阐述如何在Windows 7 64位环境下安装并搭建JForum,以进行性能测试。 首先,了解JForum的基本信息至关重要。JForum是一款用Java语言编写的、功能丰富的Web论坛系统,它以其高效、可扩展性和易用性...

    jforum配置安装介绍+源代码

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

    jforum二次开发 详解 BBS开源安装

    6. 初始化安装:通过浏览器访问服务器上的JForum安装地址,按照提示完成安装过程,包括设置语言、论坛信息、管理员账户等。 7. 访问论坛:安装完成后,输入安装时设定的域名和端口,即可访问到全新的JForum论坛。 ...

    jforum-2.5.0安装包+安装方式.rar

    **JForum 2.5.0 安装详解** JForum 是一个开源的、基于Java的Web论坛系统,提供强大的讨论板功能,包括用户管理、主题分类、帖子发布等。这个压缩包“jforum-2.5.0安装包+安装方式.rar”包含了JForum 2.5.0版本的...

    jforum论坛图片资源

    用于配置中文jforum,里面包含各种语言的图片文件,将其中的zh_CN目录复制到jforum安装目录下的templates\default\images。就可以显示中文图片

    jforum3.0所需要的jar包

    《深入解析jforum3.0所需jar包》 在Java Web开发领域,jForum是一款流行的开源论坛系统,它基于Java语言编写,提供了丰富的社区交流功能。jForum3.0是其一个重要的版本,针对该版本的运行,我们需要一系列的jar包来...

    利用JForum创建论坛

    3. 安装MySQL:下载并安装MySQL,创建用于JForum的数据库存储,配置数据库连接信息。 论坛创建与管理: 1. 下载JForum的最新稳定版本,如2.1.9。 2. 解压缩JForum的压缩包,将解压后的文件夹放到Tomcat的webapps...

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

    **Jforum:一个开源的Java论坛系统** Jforum是一款基于Java技术的开源论坛软件,它提供了丰富的社区功能,包括主题讨论、用户管理、权限控制、单点登录等。这款论坛系统以其稳定性和可扩展性而受到开发者的青睐。在...

    jforum2.1.8

    本文将详细探讨JForum 2.1.8的特性、安装过程及其背后的编程理念。 首先,JForum 2.1.8的核心特性包括: 1. **多语言支持**:JForum支持多种语言,方便不同地区的用户参与讨论,提供良好的用户体验。 2. **高效...

    jforum3.0项目需要的jar包

    为了成功运行JForum 3.0,我们需要了解和掌握以下几个关键知识点: 1. **Java环境**:首先,确保你已经安装了Java Development Kit (JDK)。JForum是用Java编写的,因此运行它需要Java环境支持。至少需要JDK 1.8或更...

    jforum-2.1.8-src.zip

    本文将深入解析JForum的核心特点、主要功能以及如何进行安装与配置。 1. **核心架构** JForum采用了Model-View-Controller(MVC)设计模式,使得代码结构清晰,易于维护和扩展。它基于Servlet和JSP技术,确保了在...

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

    数据库文件的提供使得用户在部署论坛时,可以直接导入预设的数据结构和初始数据,大大简化了安装过程。 JForum-2.1.9源码包含了以下几个核心组件: 1. 用户管理:包括用户注册、登录、权限控制、个人信息管理等。 ...

    JForum3 jforum java 开源论坛 论坛

    JForum3是一款基于Java开发的开源论坛系统,其核心设计目标是提供一个高效、稳定且功能丰富的在线讨论平台。这款论坛软件使用了Java语言编写,遵循开放源代码的原则,允许用户自由地使用、修改和分发。JForum3是...

    JForum论坛数据库表结构.rar

    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、...

Global site tag (gtag.js) - Google Analytics