Jive talkin':开放源码的 Java论坛软件

Jive论坛源码解读与二次开发指南 Jive是一个功能丰富的在线论坛软件,它提供了一个平台,使用户能够围绕不同的主题和兴趣点交流意见和信息。Jive的用户界面是灵活的,允许轻松创建和管理多个论坛,这使得它成为各种组织和社区的理想选择。Jive论坛的源码目录结构是其整个系统组织的重要表现,它反映了Jive论坛的模块化设计思想和开发过程的条理。核心的源码目录大致可以分为以下几个部分:src:存放所有的Java源代码文件。webapp:包括了JSP页面、CSS样式表、JavaScript脚本以及HTML文件等Web资源。 阅读详情

很快我们就决定采用Jive,正如 lockerjock.com 一样, Jive 采用服务器端Java,支持我们的数据库(mySQL)和应用服务器(JRun), 并采用 JSP文件表示。我们不仅是只有一个论坛,而是可以有很多个性化的论坛。所有的论坛都能很好的和 lockerjock.com 结合在一起。

安装 Jive 和创建 Jive表一样简单。将 jive.jar 文件拷贝到 classpath 目录下, 将论坛和管理JSP 文件放在站点的合适的位置,并运行 Jive 安装页面。唯一的问题就是我们的 JSP 版本是 0.92,而 Jive 需要 JSP 1.0或者更高的版本。因此我花了几天 时间将 JSP升级到最新版本。

Jive 是如何工作的?

Jive 由一系列的存在 SQL 数据库中的表以及一系列的类库组成,这些表中存放论坛数据,类库操纵表、JSP 文件,并能显示论坛数据。两套待用的 JSP 文件和 Jive 一起提供;它们的功能相同,显示论坛并允许用户和论坛交互。lockerjock.com 用的一套是viewForum.jsp,viewMessage.jsp 和 post.jsp。这些 JSP文件的功能如它们的名字一样。 如果想在发送消息和访问论坛时使用 Jive验证方案,正好可以使用这些文件。

Example 1: 一个简单的 Jive应用程序

清单 1 列出的 JSP 文件利用了 Jive主要对象来显示一个给定论坛中线程的名称。后面会详细的讨论每个对象和方法,但是这里给出的概念对理解 Jive 是如何工作是非常重要的。

  • 在开始任何 Jive操作之前,首先创建一个 Jive授权令牌,在本例中将创建一个匿名授权令牌。
  • 利用授权令牌,创建一个具体的论坛工厂。
  • 从论坛工厂创建一个论坛,如果授权令牌的许可和论坛的许可集不匹配,将抛出一个异常,而且用户不能访问论坛。
  • 对论坛中的每一个线程迭带,打印出每个线程的名称。

清单 1:打印论坛中每个线程的名字
<%@ page import="java.util.Iterator,com.coolservlets.forum.*" %>
 <%
   //JSP to print out the names of all the threads in a forum.
   //Get an anonymous authorization object.
   Authorization auth = AuthorizationFactory.getAnonymousAuthorization();
   ForumFactory factory = ForumFactory.getInstance(auth);
   //Loading a forum object throws an Unauthorized exception if the
   //the permissions set on the forum don't correspond to your access level.
   try {
       //Load the forum named myForum
       Forum forum = factory.getForum("myForum");
       
       //Get an iterator for all the threads in myForum
       Iterator threads = forum.threads();
       while (threads.hasNext() ) {
           ForumThread thread = (ForumThread)threads.next();
 %>
       <%= thread.getName() %> 
 <%
       }
   }
   catch (UnauthorizedException ue) {
     System.err.println("You do not have permission to read this forum.");
   }
 %>

Jive Example 2: 定制Jive

在 lockerjock我们已经拥有了一些客户以及自己的客户授权方案,因此,如果不修改 Jive授权方案,我们就无法使用它。我们需要将 Jive用户授权方案和我们的用户授权方案融合。 在我修改 Jive 代码中的 SQL使它从我们的用户数据表而不是 Jive 表中查询之前,我觉得如果 使用Jive用户数据表将会非常简单,并且将来需要很少的维护因此,我决定同时保持两套用户数据表。当一个 lockerjock 用户被创建,我同时创建一个 Jive用户;当一个用户改变了它的数据, 我将更新 Jive表中的数据。为了将所用到的所有 Jive 方法进行封装,我创建了 Jivehelp 类。

操纵 Jive 用户需要一个 Jive授权对象。当一个授权对象创建任何用户之前,只有有 Jive 管理员用户(ID 号为 1的用户)创建的授权对象才有操纵其它用户的权力。清单 2 显示了创建一个Jive 授权对象 helper 类的方法。


Listing 2: 创建管理员授权对象
public static Authorization getLJJiveAdminAuthorization()
{
  if (m_adminAuth != null) 
  {
     return m_adminAuth;  
  }
  else 
  {
     try 
     { m_adminAuth = 
         AuthorizationFactory.getAuthorization( ADMIN_ID, ADMIN_PWD );}
     catch( UnauthorizedException ue ) {
     System.out.println("Error in getLJJiveAdminAuthorization: " 
                           + ue.toString());
     }
  }
  return m_adminAuth;
}

代码首先检查管理员授权对象是否已经存在,然后从 AuthorizationFactory 中创建一个管理员授权对象。管理员授权令牌将被广泛的使用。

下一步是位一个 Jive 用户创建一个 helper 类方法( 参见 清单 3 这段代码通过管理员授权令牌调用 getInstance() 获得一个 ForumFactory 实例。传递给论坛工厂的授权令牌决定所创建的对象在系统中的访问等级;由于利用了管理员授权令牌,因此可以完全访问所有的Jive对象。代理管理所有的用户和组,在本例中,它用来创建用户并设置用户的属性。并返回新创建的用户对象。


Listing 3: 创建一个 Jive 用户
public User createForumUser(String name, String username, 
                             String password, String email)
 {
    ProfileManager profileManager = null;
    ForumFactory forumFactory = null;
    User newUser = null;
    forumFactory = 
      ForumFactory.getInstance(ForumHelper.getLJJiveAdminAuthorization());
 
    try {
       
       if (forumFactory != null)
       {
         profileManager = forumFactory.getProfileManager();
         newUser = profileManager.createUser(username,password,email);
         newUser.setName( name );
         newUser.setEmailVisible(true);
         newUser.setNameVisible(true);
       }  
    }
    catch( UserAlreadyExistsException uaee ) 
    {    
       System.out.println("Error in createUser: " + uaee.toString());
       System.out.println("User is: " + username);
    }
    catch( UnauthorizedException ue ) 
    {
       System.out.println("Error in createUser: " + ue.toString());
    }
    return newUser;
 }

清单 4 显示了获得一个 Jiv e用户的 helper方法。这段代码为被检索的用户创建了一个授权令牌,这个授权令牌中包含了一个用户ID,因为代理用这个 ID 来检索 Jive 用户对象。注意到这个方法包含了利用管理员授权令牌的代理。


Listing 4: 获得一个 Jive 用户
public User getUser(String userName, String password)
 {
    ProfileManager profileManager = null;
    ForumFactory forumFactory = null;
    User user = null;
      
    Authorization userAuth = getUserAuthorization(userName, password);
    if (userAuth == null)
    {
       return null;
    }
    forumFactory = 
      ForumFactory.getInstance(ForumHelper.getLJJiveAdminAuthorization());
    try {
       
       if (forumFactory != null)
       {
          profileManager = forumFactory.getProfileManager();
          user = profileManager.getUser( userAuth.getUserID() );
       }  
    }
    catch( UserNotFoundException unfe ) {
      System.out.println("Error in getUser: " + unfe.toString());
    }
      
    return user;
 }

将它们组合在一起

在 lockerjock 我们利用 servlets (服务器程序片)来管理应用程序、 数据beans 来存放数据,以及 JSP 文件类显示数据。

在登录服务器程序片中,创建了 ForumHelper 并调用 getUser() , 传递从 lockerjock用户获得的名称和密码。如果 Jive用户对象的返回值非空,它将会把其它的 数据 beans保存在会话过程,如清单5中所示。


清单 5: 在会话中添加 Jive 用户
ForumHelper forumHelper = new ForumHelper(); 
User user = forumHelper.getUser(userBean.getScreenName(), 
                                userBean.getPassword());
if (user != null)
{
   session.putValue(LockerjockConstants.SESSION_JIVE_USER, user);
}

我用了 3 个修改版的 Jive JSP文件: viewForum.jspviewMessage.jsppost.jsp 。因为 Jive 提供的默认的 JSP文件允许非法用户作为一个特殊的匿名用户访问。因为我们要求所有的论坛用户均为 lockerjock 用户,因此我修改了 Jive 的JSP 文件以检查会话,确认 Jive 用户 和 lockerjock的同时存在。只有两个用户同时存在的情况下,该用户才能访问论坛。这段代码在清单6种给出。


清单 6: 从 Jive 论坛的 JSP 文件中控制访问
<%
 User jiveUser 
    = (User)session.getValue(LockerjockConstants.LOCKERJOCK_JIVE_USER);
 UserBean userBean 
    = (UserBean)session.getValue(LockerjockConstants.LOCKERJOCK_USER_BEAN);
    
 if (jiveUser != null && userBean != null)
 {
   // do forum stuff, yadayadayada
 }
%>

不象默认的 Jive JSP 文件,我们基于 lockerjock用户可以访问的部分来控制对论坛的访问,而不是基于论坛用户的访问许可。例如,只有当用户为某个社区的成员时,他才能访问某个社区的论坛。用户的 Jive 许可服从 lockerjock许可。因此,得到的论坛对象是基于我们的管理员授权不是用户授权。在这点上,如果用户不是这个论坛的授权用户,默认的 JiveJSP 文件将重定向到一个出错页。但我们不需要重定向,因为管理级用户总是被授权的。如果不是 lockerjock这部分的授权用户,在运行 清单 7中的代码前就会被重定向。 这段代码从论坛对象中检索用户的名称。


清单 7: 获得论坛的名称
<%
   String pForumID = request.getParameter("forum");
   
   // get the forumID, create the forum object
   int forumID = 
    ((pForumID!=null&&!pForumID.equals(""))?(Integer.parseInt(pForumID)):-1);
   ForumFactory forumFactory = 
     ForumHelper.getForumFactory(ForumHelper.getLJJiveAdminAuthorization());
 
   Forum forum = null;
   String forumName = null;
   try {
        if (forumFactory != null)
           forum = forumFactory.getForum(forumID);
    }
    catch( UnauthorizedException ue ) 
    {
      //default Jive forum JSPs redirect to an error page if
      //the forum factory doesn't have permission to get this forum
    }
    catch( ForumNotFoundException fnfe ) 
    { 
    }
   if (forum != null)
     forumName = forum.getName();
%>

Jive 令我着迷之处还包括一个最酷的特性--随时创建论坛的能力。 清单 8显示了一个简单的简直令人吃惊的方法来创建一个论坛。这个方法仅仅是获得一个带有管理员授权令牌的论坛工厂,然后调用这个论坛工厂的 createForum() 方法。当一个用户创建一个新的主题社区时,利用这个方法可以创建一个新社区论坛。


清单 8: 随时创建一个论坛
public Forum createForum(String name, String description)
 {
    ForumFactory forumFactory = null;
    Forum newForum = null;
       
    try 
    {
       if( description == null )
         description = "";
             
       forumFactory = 
         ForumFactory.getInstance(ForumHelper.getLJJiveAdminAuthorization());
       
       if (forumFactory != null)
         newForum = forumFactory.createForum( name, description );
    }
    catch( UnauthorizedException ue ) {
       System.out.println("Error in createForum: " + ue.toString());
    }
    catch( ForumAlreadyExistsException fae ) {
       System.out.println("Error in createForum: " + fae.toString());
    }
    return newForum;
 }

小结

Jive 为 Web 群体提供了一个开放源码、100% Java论坛软件包。正如显示的那样,它可以直接应用,也可以修改并扩展以适合各种需要。Jive的开发者是如此的友好、有益、高效。事实上,许多新特性,比如搜索,自从我使用 Jive以来已经被引入。唯一的问题就是花点时间来学习和使用它们。我鼓励你们使用 Jive!




参考资料

关于作者

Jay Allen

Jay Allen 是一家大型计算机公司的软件工程师,他在业余时间为 lockerjock.com 和其他几个 Web站点工作。可以通过 allenj@us.ibm.com联系 Jay.


jive论坛源码(经典) jivejava做的最经典的网站源码,经过多人改动,现在几乎完美,大家好好学习啊,呵呵 立即下载

相关推荐

jive论坛源码,jive项目源码,jive源码

jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码

jive(源代码研究)(提供源代码)

        最近正在抽时间研究jive源代码,如果有谁想学习,我这有jive(Jdon版)的,是由Jive 2.1源代码改编而成,运行环境JBoss3+Tomcat+Linux+J2se1.4 给个邮箱就可以了。Jive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于JSP论坛。在其设计目标的指导下,其结构设计得非常得好,融合了很多新的观念,比如Desig...

咖啡妆 654

jive论坛

很好的 开源项目,源码,可运行

Jive 源代码研究

简介: Jive 是一个开放的 Java 源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于 JSP论坛。在其设计目标的指导下,其结构设计得非常得好,融合了很多新的观念,比如 Design Pattern,可更换的 Skin,可插入 Plug 等等。详细解读其源代码对于理解这些新的设计上的概念是很有裨益的。如果你对 Design Pattern 和 Java 语言有一定的了解,但是

HelloJava1234的专栏 817

Jive2到JiveJdon3看OO发展轨迹

Jive2到JiveJdon3看OO发展轨迹板桥里人 http://www.jdon.com 2007/07/9  OO面向对象概念虽然出现很久,但是其间也经过较长的不断完善和发展过程,这也是很多初学者总是有“只闻其声,不见其影”的疑惑, 下面从Jive论坛这个缩影来看看OO思想和技术的发展轨迹,从而说明今天OO已经全面进入成熟普及阶段。  论坛软件可能很多搞企业开发的人不一定看得上

devliu1986的专栏 724

Jive开源项目

一、概述:     Jive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于JSP论坛。在其设计目标的指导下,其结构设计得非常得好,融合了很多新的观念,比如Design Pattern,可更换的Skin,可插入Plug等等。详细解读其源代码对于理解这些新的设计上的概念是很有裨益的。如果你对Design Pattern和Java语言有一定的了解,但是还是会时常

Oracle ERP开发/Tina与阿布的故事 2271

java缓存研究_JAVA缓存研究之剖析Jive的缓存机制内容是什么呢?

Jive是一个广受欢迎的开放源码论坛项目,虽然推出了很多年,但至今很多Java程序员还对它津津乐道。从框架结构上看,它采用了很多设计模式,如Factory模式、Proxy模式、Decorator模式、Iterator模式,使得程序易于扩展和移植。从设计细节上看,它采用了很多先进的设计思想和方法,如XML读写配置文件、数据库的缓存和连接池、帖子的过滤和TreeWalk遍历等,使得程序更加强健和高效...

weixin_39862097的博客 270

国外知名源代码网站

学习J2EE的国外网站资源(提供源代码下载,技术文档,论坛,技术合作等)http://www.jdon.com/jive.htmhttp://www.theserverside.com/国外知名的源代码网站http://www.hotscripts.com A

happyjiahan的专栏 1万+

Jive源代码研究

Jive源代码研究 内容: 前言 整体结构概叙 AbstractFactory模式和可扩展性 Proxy模式和权限控制 Decorator模式和过滤器 Iterator模式和论坛的浏览 参考资料 关于作者 ...

weixin_33895657的博客 187

jive,jivejdon,yazd论坛源码

jive 1.2.4源码,jivejdon2.5源码,yazd(jive前身)源码

最早最经典的jive论坛源代码

最早最经典的jive论坛源代码,jive被誉为学习java的九阴真经,其重要性还是不言而喻的

Jive java版源码

Jive java版源码 设计模式必看  

jive源码

java jive缓存机制源码

Java的九阴真经

http://www.jdon.com/index.html 如果你是一个java web 方面的程序员,请你一定药看看这个: Jive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于JSP论坛。在其设计目标的指导下,其结构设计得非常得 好,融合了很多新的观念,比如Design Pattern,可更换的Skin,可插入Plug等等。详细解读其源代码...

Chinaxxren 320
上一篇: Jive 中的设计模式
下一篇: 对于求字符串中出现频率最高字符的算法实现
coollor
博客等级 码龄15年 48粉丝 26原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值