`

chx 学习jForum笔记九-ForumAction四,发现用户注册模块

阅读更多

2010.12.9接上午。继续看net.jforum.view.forum/ForumAction.java中public void list() 中的

 

this.context.put("totalMessages", Integer.valueOf(ForumRepository.getTotalMessages ()));//页面显示的总文章数

this.context.put("totalRegisteredUsers", ForumRepository .totalUsers ()); //页面显示的总注册人数

his.context.put("lastUser", ForumRepository.lastRegisteredUser ()); //页面显示的最后注册用户

(完整内容在笔记六中)

net.jforum.repository/ForumRepository.java中

    public static int getTotalMessages()
    {
        return getTotalMessages (false);
    }

 

    public static int getTotalMessages(boolean fromDb)
    {
        Integer i = (Integer)cache.get(FQN, TOTAL_MESSAGES);  //取缓存中的内容
        int total = i != null ? i.intValue() : 0;  //初始值,缓存中的值或0
        if (fromDb || total == 0) { //需要从数据表中取或缓存中无值
            total = DataAccessDriver.getInstance().newForumDAO().getTotalMessages ();  //从数据表中取
            cache.add(FQN, TOTAL_MESSAGES, Integer.valueOf(total));  //写入缓存中
        }
        return total; //返回值
    }

 

 

net.jforum.dao.generic/GenericForumDAO.java

    public int getTotalMessages()
    {
        int totalMessages = 0;
        PreparedStatement pstmt = null;
        ResultSet resultSet = null;
        try {
            pstmt = JForumExecutionContext.getConnection().prepareStatement(
                    SystemGlobals.getSql("ForumModel.totalMessages"));

//SELECT COUNT(1) as total_messages FROM jforum_posts WHERE need_moderate = 0

//所有不需审查的帖子总数
            resultSet = pstmt.executeQuery();
            if (resultSet.next()) {
                totalMessages = resultSet.getInt("total_messages");
            }
            return totalMessages;
        }
        catch (SQLException e) {
            throw new DatabaseException(e);
        }
        finally {
            DbUtils.close(resultSet, pstmt);
        }
    }

 

下面看总注册人数

net.jforum.repository/ForumRepository.java中

    public static Integer totalUsers()
    {
        return (Integer)cache.get(FQN, TOTAL_USERS);  //从缓存中取
    }

 

那么哪里是写入缓存的呢?有以下两个地方:

 

    public static void incrementTotalUsers() //增加注册人数
    {
        Integer i = (Integer)cache.get(FQN, TOTAL_USERS); //从缓存中取当前注册人数
        if (i == null) {
            i = Integer.valueOf(0);
        }
        cache.add(FQN, TOTAL_USERS, Integer.valueOf(i.intValue() + 1)); //总人数加一并写入缓存
    }

 

    private void loadUsersInfo() //取最后注册用户信息及注册用户总人数
    {   //直接从数据表读取并写入缓存
        UserDAO udao = DataAccessDriver.getInstance().newUserDAO();
        cache.add(FQN, LAST_USER, udao.getLastUserInfo());
        cache.add(FQN, TOTAL_USERS, Integer.valueOf(udao.getTotalUsers ())); //从数据表读出总注册人数并写入缓存
    }

 

net.jforum.dao.generic/GenericUserDAO.java

    public int getTotalUsers()
    {  //从数据表读出总注册人数
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = JForumExecutionContext.getConnection().prepareStatement(
                    SystemGlobals.getSql("UserModel.totalUsers"));  //取SQL语句

//SELECT COUNT(1) as total_users FROM jforum_users
            return this.getTotalUsersCommon(preparedStatement);
        }
        catch (SQLException e) {
            throw new DatabaseException(e);
        }
        finally {
            DbUtils.close(preparedStatement);
        }
    }

 

总注册人数至此结束。下面看最后注册用户。

跟总人数一样,在net.jforum.repository/ForumRepository.java中,也是从缓存中读取的。

    public static User lastRegisteredUser()
    {
        return (User)cache.get(FQN, LAST_USER);
    }
在哪里写入的呢?两处,一处是set,另一处是load。

 

    public static void setLastRegisteredUser(User user)
    {
        cache.add(FQN, LAST_USER, user);
    }


    private void loadUsersInfo() //取最后注册用户信息及注册用户总人数
    {   //直接从数据表读取并写入缓存
        UserDAO udao = DataAccessDriver.getInstance().newUserDAO();
        cache.add(FQN, LAST_USER, udao.getLastUserInfo ());
        cache.add(FQN, TOTAL_USERS, Integer.valueOf(udao.getTotalUsers()));  //从数据表读出总注册人数并写入缓存
    }

 

先看LOAD

 

net.jforum.dao.generic/GenericUserDAO.java

    public User getLastUserInfo()
    {  //从数据表中取最后注册的用户姓名与ID
        PreparedStatement p = null;
        ResultSet rs = null;
        try {
            User user = new User();
            p = JForumExecutionContext.getConnection().prepareStatement(
                    SystemGlobals.getSql("UserModel.lastUserRegistered")); //取SQL语句

//SELECT TOP 1 user_id, username FROM jforum_users ORDER BY user_regdate DESC
            rs = p.executeQuery();
            rs.next();
            user.setUsername(rs.getString("username"));  //用户名
            user.setId(rs.getInt("user_id"));  //用户ID
            return user;
        }
        catch (SQLException e) {
            throw new DatabaseException(e);
        }
        finally {
            DbUtils.close(rs, p);
        }
    }

 

再看SET。

setLastRegisteredUser

有两处调用

net.jforum.sso/SSOUtils.java中的public void register(final String password, final String email)

及net.jforum.view.forum/UserAction.java中的registrationComplete()

看来这两处是用户注册模块。

 

小结:本段分析最终注册用户的信息与总注册人数的获取、修改。并发现两个用户注册模块,前一段发现的是认证模块。

分享到:
评论

相关推荐

    chx 学习jForum笔记十八 jForum与ms sqlserver

    《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...

    北大计算机系高级计算机系统结构课件chx14-arch08-mm1

    【北京大学计算机科学高级计算机系统结构课件chx14-arch08-mm1】主要探讨了计算机系统中的主存,特别是动态随机存取内存(DRAM)的延迟问题以及解决策略。这一讲义由北京大学计算机科学技术系和微处理器研究开发中心...

    CHX-I防火墙官方教程-附带翻译终稿.pdf

    CHX-I防火墙官方教程-附带翻译终稿.pdf

    北大计算机系高级计算机系统结构课件chx14-arch03-ilp1

    北京大学的高级计算机系统结构课程深入探讨了指令级并行处理,特别是数据相关的概念,这是优化处理器性能的关键。在本课件中,主要讨论了三种数据相关类型:真数据相关(Data dependences)、名字相关(Name ...

    北大计算机系高级计算机系统结构课件chx14-arch04-Tomasulo1

    北京大学计算机系的高级计算机系统结构课程中,第四讲主要讨论了Tomasulo算法,这是一种用于实现处理器指令级并行的技术。在讲解中,提到了几个关键概念,包括指令状态、功能单元状态以及寄存器结果状态。 首先,...

    HA-SoftEther-CHX虚拟专网

    HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网

    北大计算机系高级计算机系统结构课件chx14-arch09-multiproc1

    本资源是北京大学计算机科学技术系计算机系统结构教研室高等计算机系统结构(第九讲)的课件,讲解多处理器系统的相关知识内容。 多处理器系统的发展 多处理器系统的发展可以追溯到20世纪70年代,随着集成电路和...

    北大计算机系高级计算机系统结构课件chx14-arch07-MT1

    每个线程都需要维护自己的用户状态,包括程序计数器(PC)和通用寄存器(GPRs)。同时,每个线程也需要自己的系统状态,如虚拟内存页表基址寄存器和异常处理相关的状态。此外,上下文切换(context switch)成本、...

    北大计算机系高级计算机系统结构课件chx14-arch05-ilp1

    这篇内容主要介绍了现代指令级并行技术在计算机系统结构中的应用,特别是关于指令流水线的设计和优化。在第五讲中,讲师程旭探讨了如何通过更复杂的流水线和动态调度来挖掘指令级并行性,以提高处理器性能。...

    北大计算机系高级计算机系统结构课件chx14-arch06-vliw1

    点数较多,以下将详细解析相关知识点: **高级计算机系统结构** 这门课程涉及的是计算机系统的核心设计原理,包括微处理器、流水线技术、指令级并行性(ILP)以及超长指令字(VLIW)架构。课程的重点在于理解和优化...

    北大计算机系高级计算机系统结构课件chx14-arch02-cache1

    【计算机系统结构与高速缓存】 在现代计算机体系结构中,高速缓存(Cache)扮演着至关重要的角色,它的存在主要是为了缓解处理器(CPU)与主内存(DRAM)之间速度不匹配的问题。随着技术的发展,处理器的速度不断...

    CHX(x=0-4在Y-Al2O3(ll0D)表面吸附的密度泛函研究 (2007年)

    使用基于密度泛函理论(DFT)的Cast叩量子力学计算程序模块,对CHX(X=0-4)在Y-AI2O3(ll0D)表面吸附的位置,空间结构和能量进行了理论计算。计算结果表明.CHx=(x=0-3)与表面形成强的相互作用。CH3,CH2物种处于表面八面体...

    CHX-I防火墙官方教程-附带翻译借鉴.pdf

    CHX-I防火墙官方教程-附带翻译借鉴.pdf

    CHX TNF JNK之间的关系

    标题与描述中的关键词“CHX TNF JNK”揭示了在细胞凋亡机制中的相互作用,尤其是关于人类肝癌细胞对肿瘤坏死因子α(TNFα)诱导的凋亡反应。这一研究聚焦于理解CHX(环己亚胺)、TNFα以及JNK(c-Jun N端激酶)三者...

    chx99个人主页源码_chx99.zip

    【标题】"chx99个人主页源码_chx99.zip" 提供的是一个名为 chx99 的个人主页的源代码。源码通常包含了网站设计、布局、功能实现等核心部分,对于开发者而言是了解网站工作原理、学习前端技术或者进行二次开发的重要...

    永宏 FBs-4DA/2DA 模拟量输出模块使用说明.pdf

    关于模块的I/O寻址,FBs-4DA/2DA模块提供四点或两点输出,这些点的编号是顺序排列的,从CH0开始,每个模块的点数都会累加。实际的I/O地址可以通过WinProladder这个软件来自动检测和配置。用户可以根据软件提供的模块...

    chx2095中文 英文资料

    根据给定的文件信息,我们可以提炼出以下关于CHX2095的详细IT知识: ### CHX2095概述 **CHX2095**是一款由United Monolithic Semiconductors S.A.S.制造的频率倍增器集成电路(IC),其工作频率范围在7.5至30GHz...

    CHX Hyper eXpressor-开源

    通过深入研究`chx-0.0.2`中的文件,开发者可以全面了解CHX的工作方式,并将其应用于自己的Web开发项目中。同时,参与开源社区,与全球的开发者交流,共同推动CHX Hyper eXpressor 的发展,也是提升自身技能和影响力...

    CHX-3大手臂大法兰.SLDDRW

    CHX-3大手臂大法兰.SLDDRW

Global site tag (gtag.js) - Google Analytics