<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    lizongbo 的 編程學(xué)習(xí)

    http://618119.com

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


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

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



    1.計(jì)劃任務(wù)
    由于php受語(yǔ)言限制,必須靠外界的訪問(wèn)去觸發(fā)計(jì)劃任務(wù),而java則可以通過(guò)qutarz來(lái)做定時(shí)任務(wù).
    因此可以采取spring配置 qutarz的方式去設(shè)置定時(shí)任務(wù).

    2.風(fēng)格機(jī)制
    使用.jsp,使用jstl語(yǔ)法,允許用戶寫jstl
    依然按目錄存放到templates目錄下,每個(gè)風(fēng)格為一個(gè)文件夾.

    3.緩存機(jī)制
    使用oscache 標(biāo)簽 來(lái)緩存頁(yè)面的方式.

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

    5.日歷選擇框: 使用jscalendar

    6.頁(yè)面gzip壓縮,使用專門的gzip過(guò)濾器.

    7.全文檢索,使用compass.

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

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

     

     1.php的array功能非常強(qiáng)大,而java中只能用map和list結(jié)合起來(lái)處理.
    2.在一個(gè)http請(qǐng)求中php的變量幾乎都是全局生效,而jstl中,則可以放到requestScope中.

    1.discuz的有些表的主鍵不是自動(dòng)增長(zhǎng)的,因此不能夠生成@GeneratedValue(strategy = GenerationType.AUTO)的注釋.
    這些表有: new String[] {
          "validating", "trades", "relatedthreads", "pushedthreads", "polls",
          "onlinetime", "memberspaces", "memberfields", "forumfields",
          "admingroups", "adminactions", "activities"}

    2.mysql的hibernate dao單元測(cè)試中,insert是無(wú)法回滾的,而delete卻可以不操作數(shù)據(jù)庫(kù),
    因此crud單元測(cè)試的時(shí)候,導(dǎo)致不停的插入數(shù)據(jù)卻沒有刪除數(shù)據(jù).
    解決辦法,在 crud 測(cè)試方法的最后加上一行代碼:  this.setComplete();

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

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

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

    在usergroups 表中, readaccess字段是 tinyint(3)類型,而有值為200的,mysql的jdbc就會(huì)報(bào)錯(cuò),說(shuō)數(shù)字越界了.

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

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

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

    視圖層使用jspx來(lái)展示.


    其中頁(yè)面的布局分為三段

    {template header} 是最上面的導(dǎo)航部分

    {template footer} 是最下方的版權(quán)申明等部分.

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

     

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



     

    posted on 2007-08-29 09:41 lizongbo 的編程學(xué)習(xí) 閱讀(1647) 評(píng)論(5)  編輯  收藏 所屬分類: java discuz
    主站蜘蛛池模板: 久久久久国产免费| 亚洲国产成人精品无码区在线观看 | 亚洲三级在线免费观看| 成人亚洲性情网站WWW在线观看| av无码国产在线看免费网站 | 亚洲色婷婷六月亚洲婷婷6月| 午夜电影免费观看| 久久中文字幕免费视频| 国产免费一区二区三区免费视频| 亚洲av日韩综合一区二区三区 | 中国在线观看免费国语版| 日本一道本不卡免费 | 亚洲国产午夜中文字幕精品黄网站| 国产成人免费网站| 4444www免费看| 无码国产精品一区二区免费16| 国产精品一区二区三区免费| 直接进入免费看黄的网站| 亚洲欧美国产国产综合一区| 亚洲一卡2卡4卡5卡6卡残暴在线| 97se亚洲综合在线| 亚洲第一区香蕉_国产a| 亚洲AV无码久久精品成人| 亚洲精品无码专区久久久| 亚洲精品456播放| 亚洲A∨午夜成人片精品网站| 国产无遮挡又黄又爽免费视频| 好爽又高潮了毛片免费下载| 无码av免费毛片一区二区| **一级毛片免费完整视| 久久午夜夜伦鲁鲁片免费无码影视| 四虎影视成人永久免费观看视频| 久久免费线看线看| 久久久精品免费视频| 最近高清中文字幕免费| 国产精彩免费视频| 蜜桃视频在线观看免费网址入口| 毛片基地免费观看| 国产乱子伦精品免费女| 亚洲成年人啊啊aa在线观看| 国产午夜亚洲精品理论片不卡 |