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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    J2EE網(wǎng)站經(jīng)驗共享

    Posted on 2007-03-12 11:35 semovy 閱讀(170) 評論(0)  編輯  收藏 所屬分類: J2EE綜合
    網(wǎng)站包括 商家博客,個人博客,論壇,新聞等

    設(shè)計采用了MVC模式,具體調(diào)用的時候采用了命令模式
    數(shù)據(jù)操作層Model中,例如;BlockDAO,TopicDAO,ResponseDAO,UserDAO等。
    里面封裝了一個對象所有的數(shù)據(jù)操作

    視圖/傳輸層 View 例如BlockDTO,TopicDTO等,主要是對象的屬性
    jsp用它來顯示,dao用它作為DTO


    最后就是控制層 Controll 控制層的類都繼承了Service接口
    里面有一個方法
    execute(ServletContext context, HttpServletRequest request,
    HttpServletResponse response) {
    }
    ,因為使用命令模式,后面會說明
    例如 ManageBlock, ManageTopic等
    主要是接收請求然后調(diào)用DAO,把結(jié)果返回給jsp


    調(diào)用的時候,我采用的是命令模式
    一個所有請求的總?cè)肟赟ervlet被影射到controll.do;他獲取Service的類名,然后
    實例化這個類,調(diào)用對應(yīng)的方法
    例如 ../controll.do?Service=ManageBlock&action=save

    String Name = request.getParameter("Service");
      if (Name == null||Name.equals("")){
        ErrorView error=new ErrorView("系統(tǒng)獲取Service錯誤。");
        request.setAttribute("error",error);
        request.getRequestDispatcher(Constant.ErrorPage).forward(request,response);
      }
     String  serviceName = "aill.bbs.controll." + Name;
    try {
        Class serviceClass = Class.forName(serviceName);
        Service service = (Service) serviceClass.newInstance();  
          boolean isSuc = service.execute(this.getServletContext(), request,
                                          response);
          }catch(Exception e){}
    


    下面說說安全架構(gòu):
    網(wǎng)站采用J2EE的身份認證系統(tǒng),通過對不同路徑的權(quán)限限制來做到不用角色具有不同操作捐獻
    例如:bbs/user/* 下主要是普通用戶的操作權(quán)限
    想新建帖子的時候,請求地址是 bbs/user/insertTopic.jsp

    bbs/blockAdmin/*主要是板塊管理員的權(quán)限
    bbs/bbsAdmin/* 下是論壇管理員的權(quán)限
    bbs/sysAdmin/* 下主要是系統(tǒng)管理員的權(quán)限

    最后再說說緩存,
    緩存的內(nèi)容主要是數(shù)據(jù)源,所有板塊分類,所有板塊的信息[因為這些內(nèi)容不多,而且使用
    比較頻繁];還緩存了最新的N個帖子,和點擊率最高的N個帖子;
    另外還緩存了N[差不多是每個板塊前5頁的]個帖子點擊數(shù)

    因為緩存主要有兩類,一個是只讀,一種是讀寫。數(shù)據(jù)源就屬于只讀的,點擊數(shù)就屬于讀寫的

    我設(shè)計了兩個緩存接口,一個CacheRObject,一個CacheRWObject
    CacheRObject里有個init()和 get(key)方法,
    init()當(dāng)然是初始化或者更新緩存的時候用 get方法就是獲取被緩存的對象
    CacheRWObject里有init(),save()和get(key)方法
    這里多出來的save()就是把緩存里的內(nèi)容更新到sql數(shù)據(jù)庫中

    具體要緩存什么東西,只要寫一個類繼承CacheRObject,或者CacheRWObject

    例如
    publicclass BlockKindCache implements CacheRWObject{
            HashMap cache=new HashMap();
            int size;//還有其他一些屬性,
            init(){調(diào)用dao獲取初始化的內(nèi)容}
            save(){//保存}
            get(key){//獲取}
           }
    

    緩存的屬性設(shè)置都是些在cache.xml配置文件中,包括緩存大小,要更新那些緩存對象
    更新的間隔等等
    服務(wù)器啟動的時候,獲取這些設(shè)置,初始化緩存;
    同時服務(wù)器關(guān)閉的時候把所有CacheRWObject類型緩存中的內(nèi)容保存到數(shù)據(jù)庫

    ---其實做這個網(wǎng)站前我從來沒做過什么大的java項目,在jdon中也只是一個潛水者,通過這個網(wǎng)站真的學(xué)了很多東西,在這里要特別感謝bang大哥和其他各位jdon的兄弟,

    說實在的這個網(wǎng)站還有很多自己不滿意的地方,希望大家一起交流一起進步

    哦,網(wǎng)站地址:www.cityxiu.com 大家可以去看看

    還有bang大哥,我把咱們jdon的logo放到我們論壇的下面了,算是做點貢獻吧





    ///老大回復(fù)

    客氣。整體設(shè)計把握了良好架構(gòu)和優(yōu)異性能兩個點,作為經(jīng)驗不多的初學(xué)者實屬難能可貴。

    如果你希望在現(xiàn)在架構(gòu)上有所提高,下面提供幾點建議:

    1.表現(xiàn)層的controller是通過class.forName來加載業(yè)務(wù)Service的,一般業(yè)務(wù)Service都比較大,在并發(fā)很大情況下,new Service尚且覺得耗時,所以這里是否需要優(yōu)化一下?使用資源池pool來預(yù)先生成這些大的Service。當(dāng)然,小型的代碼少的service現(xiàn)在這樣就可以了。

    2.安全架構(gòu)使用了J2EE的容器驗證,但是ACL除了URL資源、還有組件方法的ACL,提供了組件方法的ACL,基本杜絕了安全漏洞,否則,多個Jsp調(diào)用同一個組件方法,不同級別權(quán)限設(shè)置的Jsp資源必然導(dǎo)致這個組件方法訪問權(quán)限的漏洞。


    3.對你緩存分成讀和寫比較感興趣,特別是緩存寫專門做了一個接口,說明你充分認識到緩存重要性,緩存作為數(shù)據(jù)庫一種臨時替代,起到減少數(shù)據(jù)庫連接池的占用等,象這個帖子中詢問數(shù)據(jù)庫連接池設(shè)置問題,當(dāng)我們覺得數(shù)據(jù)庫連接池設(shè)置再大都不能解決問題時,我們是需要象你這樣考慮緩存了,原帖:
    http://www.jdon.com/jive/thread.jsp?forum=46&thread=27083

    但是使用緩存寫需要考慮因素很多,比如兩個用戶同時寫,如何解決資源爭奪,如何解決死鎖等問題,這些都要求寫緩存質(zhì)量相當(dāng)高,所以一般在訪問大情況下發(fā)生這樣問題,我們還是依賴數(shù)據(jù)庫強大的ACID事務(wù)機制來解決沖突;或者使用支持事務(wù)的緩存如JBossTreeCache等。

    一般應(yīng)用下,讀緩存就可以了,關(guān)鍵要做好讀緩存的更新問題,特別是模型類的嵌套情況下,一個AModel嵌套BModel,那么如何保證AModel中的BModel就是讀緩存中的那個BModel,也就是兩者同一,這樣,萬一BModel更新時,只要更新緩存中BModel即可,否則就麻煩了,這些都是非常復(fù)雜的域模型緩存問題,這些在JiveJdon3中有些解決,當(dāng)然還有待提高。

    我一直認為:緩存屬于業(yè)務(wù)邏輯編寫,因為數(shù)據(jù)庫操作也屬于業(yè)務(wù)邏輯部分,為什么不把等同于數(shù)據(jù)庫的緩存也作為業(yè)務(wù)邏輯對待呢?正是緩存屬于業(yè)務(wù)邏輯組件,所以,處理緩存是不能完全使用框架替代的,除非使用EJB,但是使用EJB不了解其緩存機制,也會走上使用誤區(qū),最后唾棄EJB,這是一些所謂高人經(jīng)常范的毛病。
    主站蜘蛛池模板: 最近免费字幕中文大全| 国产亚洲漂亮白嫩美女在线| 三级毛片在线免费观看| 午夜亚洲国产成人不卡在线| 精品国产亚洲AV麻豆| 国产精品无码一区二区三区免费 | jizz在线免费观看| 亚洲国产综合久久天堂| 乱爱性全过程免费视频| 亚洲人妻av伦理| 三级网站在线免费观看| 亚洲gv白嫩小受在线观看| 毛片在线全部免费观看| 亚洲综合在线成人一区| 中文字幕人成无码免费视频| 亚洲经典千人经典日产| 亚洲Av无码乱码在线观看性色| 无码免费又爽又高潮喷水的视频 | 亚洲国产美女在线观看| 希望影院高清免费观看视频| 亚洲欧美日韩一区二区三区| 在线观看亚洲免费| 一日本道a高清免费播放| 久久久亚洲精品国产| 国产精品无码免费播放| 美女露100%胸无遮挡免费观看| 国产亚洲精品AA片在线观看不加载 | 亚洲a一级免费视频| 国产免费不卡视频| 色婷婷六月亚洲综合香蕉| 亚洲午夜无码久久久久| 18禁成人网站免费观看| 亚洲第一第二第三第四第五第六 | 国产精品成人免费福利| 国产成人亚洲综合无| 亚洲日韩精品A∨片无码| 日本XXX黄区免费看| 一级毛片免费一级直接观看| 亚洲网站视频在线观看| 免费一级e一片在线播放| 四虎国产精品永久免费网址 |