jive2.6.4是jivesoftware推出jive3之前的最后一个jive2版本,包括国际化,搜索,附件(pro和ent版本)等几乎所有基本功能都已经完全具备了,而且它的扩展接口也使自己开发相应的插件变得非常简单。因此,我们选择安装jive2.6.4而不是它的更高版本。
1. 安装
(1) 平台选择
我使用windows2000sp4,resin2.1.4,mysql3.23.51-nt,jive2.6.4pro,j2sdk1.4.1-rc,mm.mysql-2.0.14.jar。
为什么不选择tomcat?我的经验是,jive2包括以前的版本,比较适合运行在resin平台上,它对于中文的支持处理非常好;但这种情况到了jive3就不同了,jive3用tomcat运行,对中文的支持显得更好一些。如果有兴趣,你可以用jive的同一版本在resin和tomcat上都运行一下试试,马上就能体会到。所以,这里我们选择resin平台,我用的版本可能老一些,你也可以下载新的版本,没有问题。
数据库用mysql,我想没有多大问题,它已经非常普及了。你可以用更新一点的版本。
windows2000sp4,呵呵,如果你用linux,那我也不知道这些方法还管不管用了。
java的版本我想还是用1.4以上的吧,因为有正则表达式的支持。或许自己写插件的时候用得到。
JDBC选用mm.mysql-2.0.14.jar,现在mysql有了connector,但我没有试用过,你可以试一试。
(2) 阅读jive自带的文档
文档内容包括安装指导,升级指导,数据库安装指导,管理指导,开发指导等等。建议你能够仔细阅读一下,非常有用的。
(3) 安装设置resin
解压以后就可以直接使用了。下面的设置是可选的:
假设你把resin装在D:\resin下面,那么先修改conf目录下的resin.conf,至少把端口改为80,在恰当的位置(文件里有足够的注释让你知道该在哪里下手)加上这么一句就可以:<http port='80'/>。
你还可以把不需要的服务都注释掉,比如一些示例。
(4) 安装jive2.6.4pro
要使用pro版本,你得有一个合法的jive.license文件,可以从网上申请一个30天试用期的,或者自己crack。其实jive几乎就是开源的,它的所有class文件都没有经过混淆,这样只要我们用jad反编译一下就可以得到源文件了。关于jive的crack,这里不讨论,但我想说是非常简单的,你只要修改LicenseManager这一个文件就可以,没错,就是一个,包括后来的jive3。
假设你把jive解压到D:\jive以后,有两种方法可以安装,一是用WAR文件,还有一种是手动安装。这里我们使用手动安装的方式。
第一步:拷贝application目录
先在D:\resin\webapps下面新建一个forum目录,然后把你D:\jive\application目录下的所有内容拷贝到D:\resin\webapps\forum目录下面。
第二步:拷贝jiveHome目录
把D:\jive下面的jiveHome目录拷贝到你硬盘上的任何角落都可以,但不要把它直接放在resin\webapps目录下面,因为这样别人就会从浏览器里面看到你的配置情况。我把jiveHome放在D:\resin\webapps\forum\WEB-INF\jiveHome,这样对于以后打包整个站点会比较方便。
第三步:设置jiveHome位置
这一步很重要。在你的D:\resin\webapps\forum\WEB-INF\classes下面,你会看到一个jive_init.properties文件,这个文件是用来告诉jive它的jiveHome的安装位置的。用文本编辑器打开它,看看它的说明,然后把你自己的jiveHome写进去,注意文件分隔符要使用“\\”,比如:D:\\resin\\Webapps\\forum\\WEB-INF\\jiveHome。指定jiveHome的位置还有一种方法,但是稍微复杂一点,你可以去看文档。
第四步:拷贝jive.license文件(如果你crack了jive,这一步也许就不需要了)
把你的jive.license文件也放到jiveHome里面。
(5) 为jive建立一个数据库
安装好mysql以后,假设装到D:\mysql目录下。
第一步:新建数据库
从开始菜单运行控制台工具cmd,从cmd里面转到D:\mysql\bin目录下,输入:
mysqladmin create 数据库名称
这个命令用来在mysql里面创建一个新数据库。名称随便,但我建议你尽量用含义清晰的命名,比如我的是jive264p_resin,这样以后如果要用tomcat的化,就可以取名为jive264p_tomcat,对于进行不同平台的测试是非常有用的。
第二步:导入schema文件
先在你的D:\jive\database目录下面找到Jive_mysql.sql,然后你可以把它拷贝到D:\mysql\bin目录下(为了方便)。好了,现在重新调出cmd,如果刚才你把它关掉了,那么重新打开它,并转到D:\mysql\bin目录下,输入:
type Jive_mysql.sql | mysql 数据库名称
这里的名称就是你刚才创建的数据库名称。
如果没有出错的话,好了,现在jive数据库已经完全安装成功了。
(6) 安装JDBC
如果你已经得到mm.mysql-2.0.14.jar或者其它支持mysql的JDBC,那么,
第一步:把它拷贝到D:\resin\webapps\forum\WEB-INF\lib目录下,建议最好改一下名称,比如mm.mysql.jar就可以了。
第二步:加入类路径(classpath)
在windows的属性里面加入JDBC的类路径,比如classpath=.,D:\resin\webapps\forum\WEB-INF\lib\mm.mysql.jar
当然,如果你是第一次安装java,那还有其它类路径需要设置,你可以参考其它的资料,比如《java2 核心技术 卷I》。
如果以后要增加插件或其它类库,也把它们放在这个目录下面。
(7) 运行jive自带的安装工具
好了,经过刚才的一系列安装,jive现在只要再在它的管理台工具下面进行最后的一些设置,就完全可以运行了。打开你的服务器(resin),在浏览器的地址栏输入以下地址
http://your_host_name/forum/admin/setup,看到jive的安装界面了吗?
第一步:安装自检
jive会检查它所需要的所有东西。经过我们前面6个步骤的安装,这里肯定是完全成功的(当然,或许你的jive.license有点问题)。如果不是这样,那么请再仔细检查前面6个步骤你是否有哪里做的不对。
第二步:用户系统(pro版)
一个是标准用户系统(默认),另一个是自定义用户系统。选择标准用户系统就可以了。如果你选择自定义,那么下一步jive将会要求你提供你自己编写的用户类和组管理类等等,这个我想以后自己修改jive的时候用得上。
第三步:数据库设置
这也是最最容易出错的地方,一定要仔细。不过pro版本已经内置了好几个常见数据库的JDBC,只要你选择相应的数据库,然后填入用户名,密码,主机名,数据库名称等等就可以了。
不过我还是建议你使用第三个选项--第三方数据库驱动,让我们自己来填写各种数据,这样就可以使用最新的驱动程序。(basic版本没有内置驱动程序,必须自己指定JDBC)
这时候可以看到要填写6个项目,这里只说最容易出错的前两个:JDBC Driver和Server。
如果你用mysql和mm.mysql.jar,那么
JDBC Driver应该填写:org.gjt.mm.mysql.Driver
Server应该填写:jdbc:mysql://localhost:port/数据库名
注意:
不要在Driver里面加入各种参数。
这里最好填写localhost,因为换作ip或是主机名我还没有连接成功过。
剩下要填写的内容就很简单了,完成后,点击continue,这时候jive会尝试和数据库建立连接,如果连接成功,会显示数据库和JDBC等等的信息,如果出错了,请检查上面的步骤哪一步没有做对,修改后继续,直到连接成功。
第四步:admin帐户设置
输入email,密码等等,很简单,不说了。不过要注意,用户名是admin,不能修改,只能修改密码。
恭喜你,到这里,jive已经完完全全安装成功了,下一步要做的,就是用admin帐户登陆管理台,进行各项设置了。
2. 修改配置以支持中文
总的原则是:完全使用UTF-8,不要在任何地方出现GB2312。
(1) 管理台设置
用你的admin帐户登陆管理台以后,在Global Settings选项卡的Locale Settings下面,设置:
Locale:中文(中国)
Time Zone:(GMT+08:00)Asia/Shanghai CST
Character Set:Unicode(UTF-8)
这里字符集一定要设置为UTF-8,因为jive本身是被设计为一个i18n的网络应用,而不单单是针对某种字符集,因此要从UTF-8的角度去思考,会得到意想不到简单的方法。
在Search Settings下面设置:
Indexer Type: Double-Byte(Asian Lanuages)
这是为了让jive能够支持中文搜索。
好了,管理台里面要做的就这两步,没别的了,怎么样,简单吧?
(2) 修改web.xml文件
在D:\resin\webapps\forum\WEB-INF目录下有一个叫做web.xml的文件,用文本编辑器打开它。
第一步:你会在文件开头发现jive使用的是Servlet 2.2的dtd,而下面Servlet 2.3的dtd是被注释掉的,你要做的就是把Servlet 2.3 dtd的注释打开,而把Servlet 2.2 dtd注释掉。
第二步:从文件的50行到59行可以看到一段注释掉的<filter>和<filter- mapping>,现在把这些注释打开,在<filter-name>Set Character Encoding</filter-name>里面填入UTF-8,修改后看起来是这样的:
<filter>
<filter-name>UTF-8</filter-name>
<filter-class>com.jivesoftware.forum.util.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UTF-8</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(3) 修改jive_config.xml文件
在你的jiveHome文件夹下面,什么?哪里是jiveHome文件夹?好吧,如果你不记得了,那么请回顾一下“安装jive2.6.4pro”部分的第二步和第三步。
找到<database>标签,在里面加入<mysql>标签,就像这样:
<mysql>
<useUnicode>true</useUnicode>
</mysql>
好了,让我想想,还有什么要做的吗?嗯,好像没有了,当你完成以上三步的时候,你已经得到一个完全支持中文的jive了,包括搜索。
3. 中文化jive
这里的中文化不包括管理台在内。
(1) 文字部分
第一步:翻译
在WEB-INF\lib目录下找到jive.jar文件,用winrar打开,解压jive_i18n_en_properties文件,然后把它移动到WEB-INF\classes目录下面,用文本编辑器打开它,把里面所有等号右边的内容翻译成中文。
第二步:用native2ascii进行转换
调用cmd,转到WEB-INF\classes目录下,输入:
native2ascii jive_i18n_en_properties jive_i18n_zh_properties
这里没有指定编码是因为它会使用平台默认编码,即GBK。
注意使用native2ascii时,输出目录下不能存在与目标文件同名的文件,否则将会报错。这意味着如果你要再次输出jive_i18n_zh_properties时,必须先把已经存在的那个删除或者更名。
(2) "Community Forums" 图片
如果想把那个有"Community Forums"字样的图片换掉,除了在管理台指定其它图片之外,你还可以在forum\images目录下放入一个名为logo_zh.gif的图片,这样jive会自动调用这个图片。
4. 修改几个bug
(1) 搜索结果显示
当搜索结果超过1页的时候,后面的搜索结果页面你是无法看到的,永远只能看到第一页。这个问题是由于在构造url的时候编码不当造成的。
解决方法:
修改search.jsp第302行,把原来的
encodedQueryText = StringUtils.encodeHex(queryText.getBytes("UTF-8"));
改为
encodedQueryText = StringUtils.encodeHex(queryText.getBytes());
(2) 用户名字符数
由于使用了UTF-8,不管是一个汉字还是一个英文字母,jive都认为是一个字符。所以在用户注册的时候,如果使用中文名,会出现必须使用4个汉字的情况。
解决方法:
修改account.jsp第62行,把原来的
username.length() < 4 改为 username.length() < 2
修改第124行,把原来的int minUsernameLength = 4;
改为int minUsernameLength = 2;
(3) 附件中文名显示
同样由于编码的原因,上传附件如果是中文名称,则会显示乱码。
记住,原则是使用UTF-8。
解决方法:
第一步:修改attach.jsp
在getCanonicalName方法中(第31行),返回filename之前,加入以下几句:
try {
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
目的是使中文名重新用UTF-8编码,这样在页面中使用UTF-8进行浏览时才能正确显示。
然后将第517行的> <a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
> <a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
第二步:修改threadMode2.jsp
第680行,将<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
第687行,将<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
第三步:修改threadMode1.jsp
第616行,将<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
第623行,将<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
第724行,将<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
第731行,将<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName()) %>"
改为
<a href=><%= path %>/servlet/JiveServlet/download/<%= forumID %>-<%= threadID %>-<%= message.getID() %>-<%= attachment.getID() %>/<%= URLEncoder.encode(attachment.getName(), "UTF-8") %>"
(4) FORUM / CATEGORY NAME无法中文化
这也许是由于jive开发者的一个小小疏忽造成的。
解决方法:修改index.jsp
把第164-166行的注释去掉,同时注释掉第167行。
对于上面几个比较典型的bug,或许你有更好的解决方法,一定告诉我。
5. 增添插件
很简单,这是在管理台完成的。
在Global Settings选项卡下面点击Global Filters,你会看到jive已经安装的所有filter,要安装新的filter,就在最下面填写Class Name,然后Add Filter就可以了。
要注意的是Filters的排列顺序,原则是:
HTML filter永远第一位。
在没有安装JavaCodeHighlighter filter的情况下,Newline filter永远最后一位。
在安装了JavaCodeHighlighter filter的情况下,JavaCodeHighlighter filter永远最后一位,Newline filter倒数第二位。
还有,我建议你不要安装Word Break Filter,它会在正文中莫名其妙的插入空格,非常讨厌。不要安装Text Stylizer Filter,因为它会将"i"转义,这会导致我们添加的java代码中使用了int i变量的时候,完全变为斜体字,很难看。(其实可以自己重新写一个插件的,不是吗?)
如果想要自己写插件的话,请参考我的另一篇文章《为jive2.x写ImageFilter》。
嗯,好了好了,花了3天时间,把我在jive上的一些心得详详细细的回忆并记录了下来,也算对自己有个交代,更重要的是,这样就可以抵抗遗忘之神的光临了。也希望对大家有点帮助。