lizongbo 的 編程學習

          http://618119.com

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            23 Posts :: 1 Stories :: 78 Comments :: 0 Trackbacks


          前言:discuz是一個很流行的 php論壇,一時好奇,打算學習并將其功能用java實現(xiàn)。
          但是個人精力有限,只試著做了很小的一點功能。
          但是在此過程中總結了一些經(jīng)驗:

          需要轉(zhuǎn)換實現(xiàn)機制的模塊



          1.計劃任務
          由于php受語言限制,必須靠外界的訪問去觸發(fā)計劃任務,而java則可以通過qutarz來做定時任務.
          因此可以采取spring配置 qutarz的方式去設置定時任務.

          2.風格機制
          使用.jsp,使用jstl語法,允許用戶寫jstl
          依然按目錄存放到templates目錄下,每個風格為一個文件夾.

          3.緩存機制
          使用oscache 標簽 來緩存頁面的方式.

          4.特殊標簽的解析 hidden標簽,reply標簽
          采取在顯示的時候,進行 jsp:include page="/tag/hidden.jsp" 這樣的方式來實現(xiàn).

          5.日歷選擇框: 使用jscalendar

          6.頁面gzip壓縮,使用專門的gzip過濾器.

          7.全文檢索,使用compass.

          8.視圖層的模板.
          discuz 已經(jīng)使用了 mvc的模式,只是使用自己開發(fā)的模板技術,
           D:\xampp\htdocs\bbs\templates每個文件夾為一個主題,每個主題內(nèi)對應的是各種視圖的htm.
          因此在用java實現(xiàn)的時候,使用spring mvc ,
          視圖層使用jsp來展示.
          其中頁面的布局分為三段
          {template header} 是最上面的導航部分
          {template footer} 是最下方的版權申明等部分.
          中間部分為各具體模塊的視圖.
          后臺則是使用的固定框架,然后來合成內(nèi)容的.

          9.國際化支持
          discuz使用的是 .lang.php定義數(shù)組的方式實現(xiàn)的,而且一次只支持一種語言
          而java開發(fā)則使用I18N方式.多種語言均使用同一個系統(tǒng).

           

           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卻可以不操作數(shù)據(jù)庫,
          因此crud單元測試的時候,導致不停的插入數(shù)據(jù)卻沒有刪除數(shù)據(jù).
          解決辦法,在 crud 測試方法的最后加上一行代碼:  this.setComplete();

          3.mysql的jdbc需要幾個特殊設置
          a.字符編碼集必須指定.
          b.對于"0000-00-00" 這樣的默認日期,在轉(zhuǎn)化成java.sql.Date的時候會出錯,因此需要加上個zeroDateTimeBehavior屬性.

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

          4.mysql的jdbc驅(qū)動存在bug :  http://bugs.mysql.com/bug.php?id=22215

          在usergroups 表中, readaccess字段是 tinyint(3)類型,而有值為200的,mysql的jdbc就會報錯,說數(shù)字越界了.

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

          暫時無解決辦法,采取修改200為20回避之.
          (update:后來使用Short代替byte類型)
          discuz 已經(jīng)使用了 mvc的模式,只是使用自己開發(fā)的模板技術,
           D:\xampp\htdocs\bbs\templates每個文件夾為一個主題,每個主題內(nèi)對應的是各種視圖的htm.

          因此在用java實現(xiàn)的時候,使用spring mvc ,

          視圖層使用jspx來展示.


          其中頁面的布局分為三段

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

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

          中間部分為各具體模塊的視圖.

           

          后臺則是使用的固定框架,然后來合成內(nèi)容的.



           

          posted on 2007-08-29 09:41 lizongbo 的編程學習 閱讀(1649) 評論(5)  編輯  收藏 所屬分類: java discuz
          主站蜘蛛池模板: 巫山县| 吉安市| 肃宁县| 长治县| 镇安县| 铜川市| 南江县| 莲花县| 成武县| 西盟| 额尔古纳市| 勃利县| 宁河县| 五指山市| 新邵县| 万全县| 桑植县| 镇原县| 濮阳县| 兴安县| 寿阳县| 芜湖县| 长沙市| 松潘县| 定襄县| 黑龙江省| 赤水市| 沅江市| 卢氏县| 清丰县| 蒙阴县| 全椒县| 卫辉市| 长沙县| 莱芜市| 东至县| 永登县| 夏津县| 阿克| 宁南县| 南京市|