lizongbo 的 编程学习

http://618119.com

BlogJava 首页 新随笔 联系 聚合 管理
  23 Posts :: 1 Stories :: 78 Comments :: 0 Trackbacks


前言:discuz是一个很流行的 php论坛,一时好奇,打算学习并将其功能用java实现。
但是个人精力有限,只试着做了很小的一点功能。
但是在此过程中总结了一些经验:

需要转换实现机制的模块



1.计划任务
由于php受语言限制,必须靠外界的访问去触发计划任务,而java则可以通过qutarz来做定时任务.
因此可以采取spring配置 qutarz的方式去设置定时任务.

2.风格机制
使用.jsp,使用jstl语法,允许用户写jstl
依然按目录存放到templates目录下,每个风格为一个文件夹.

3.缓存机制
使用oscache 标签 来缓存页面的方式.

4.特殊标签的解析 hidden标签,reply标签
采取在显示的时候,进行 jsp:include page="/tag/hidden.jsp" 这样的方式来实现.

5.日历选择框: 使用jscalendar

6.页面gzip压缩,使用专门的gzip过滤器.

7.全文检索,使用compass.

8.视图层的模板.
discuz 已经使用了 mvc的模式,只是使用自己开发的模板技术,
 D:\xampp\htdocs\bbs\templates每个文件夹为一个主题,每个主题内对应的是各种视图的htm.
因此在用java实现的时候,使用spring mvc ,
视图层使用jsp来展示.
其中页面的布局分为三段
{template header} 是最上面的导航部分
{template footer} 是最下方的版权申明等部分.
中间部分为各具体模块的视图.
后台则是使用的固定框架,然后来合成内容的.

9.国际化支持
discuz使用的是 .lang.php定义数组的方式实现的,而且一次只支持一种语言
而java开发则使用I18N方式.多种语言均使用同一个系统.

 

 1.php的array功能非常强大,而java中只能用map和list结合起来处理.
2.在一个http请求中php的变量几乎都是全局生效,而jstl中,则可以放到requestScope中.

1.discuz的有些表的主键不是自动增长的,因此不能够生成@GeneratedValue(strategy = GenerationType.AUTO)的注释.
这些表有: new String[] {
      "validating", "trades", "relatedthreads", "pushedthreads", "polls",
      "onlinetime", "memberspaces", "memberfields", "forumfields",
      "admingroups", "adminactions", "activities"}

2.mysql的hibernate dao单元测试中,insert是无法回滚的,而delete却可以不操作数据库,
因此crud单元测试的时候,导致不停的插入数据却没有删除数据.
解决办法,在 crud 测试方法的最后加上一行代码:  this.setComplete();

3.mysql的jdbc需要几个特殊设置
a.字符编码集必须指定.
b.对于"0000-00-00" 这样的默认日期,在转化成java.sql.Date的时候会出错,因此需要加上个zeroDateTimeBehavior属性.

datasource.url=jdbc:mysql://localhost:3306/discuz?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

4.mysql的jdbc驱动存在bug :  http://bugs.mysql.com/bug.php?id=22215

在usergroups 表中, readaccess字段是 tinyint(3)类型,而有值为200的,mysql的jdbc就会报错,说数字越界了.

java.sql.SQLException: '200' in column '1' is outside valid range for the
datatype TINYINT.

暂时无解决办法,采取修改200为20回避之.
(update:后来使用Short代替byte类型)
discuz 已经使用了 mvc的模式,只是使用自己开发的模板技术,
 D:\xampp\htdocs\bbs\templates每个文件夹为一个主题,每个主题内对应的是各种视图的htm.

因此在用java实现的时候,使用spring mvc ,

视图层使用jspx来展示.


其中页面的布局分为三段

{template header} 是最上面的导航部分

{template footer} 是最下方的版权申明等部分.

中间部分为各具体模块的视图.

 

后台则是使用的固定框架,然后来合成内容的.



 

posted on 2007-08-29 09:41 lizongbo 的编程学习 阅读(1621) 评论(5)  编辑  收藏 所属分类: java discuz