`

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()

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

 

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics