首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

JForum装配用例

2013-10-22 
JForum安装用例1,键入http://localhost:8080/JForum/install.jsp2,install.jsp有一个自动跳转;跳转到insta

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()方法释放资源。在安装用例中主要释放当前线程的局部数据。

热点排行