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

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

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

    我的Blog我做主^_^

    走向一條通往JAVA的不歸路...

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      64 隨筆 :: 68 文章 :: 77 評論 :: 0 Trackbacks
    自己感覺不錯的一篇文章,粘過來與看到的人共享<來自J道>,也算為J道做點貢獻吧,呵呵
    aill

    發表文章: 131
    注冊時間: 2004年06月02日 15:20

    J2EE網站經驗共享! 發表: 2006年06月02日 11:19 回復
    網站包括 商家博客,個人博客,論壇,新聞等

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

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


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


    調用的時候,我采用的是命令模式
    一個所有請求的總入口Servlet被影射到controll.do;他獲取Service的類名,然后
    實例化這個類,調用對應的方法
    例如 ../controll.do?Service=ManageBlock&action=save

    																						
    String Name = request.getParameter( "Service" );
    if (Name == null||Name.equals(
    ""
    )){
    ErrorView error=new ErrorView(
    "系統獲取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){}


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

    bbs/blockAdmin/*主要是板塊管理員的權限
    bbs/bbsAdmin/* 下是論壇管理員的權限
    bbs/sysAdmin/* 下主要是系統管理員的權限

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

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

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

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

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

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

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

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

    哦,網站地址:www.cityxiu.com 大家可以去看看

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

    banq

    發表文章: 7507
    注冊時間: 2002年08月03日 17:08

    Re: J2EE網站經驗共享! 發表: 2006年06月06日 11:08 回復
    不錯,先Mark一下,等會兒好好看一下。多謝aill的對jdon支持。

    aill

    發表文章: 131
    注冊時間: 2004年06月02日 15:20

    Re: J2EE網站經驗共享! 發表: 2006年06月06日 16:18 回復
    bang大哥客氣了,學java幾年了,真正提高還是來jdon以后,還有您的書,真心感謝!

    banq

    發表文章: 7507
    注冊時間: 2002年08月03日 17:08

    Re: J2EE網站經驗共享! 發表: 2006年06月08日 11:52 回復
    客氣。整體設計把握了良好架構和優異性能兩個點,作為經驗不多的初學者實屬難能可貴。

    如果你希望在現在架構上有所提高,下面提供幾點建議:

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

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


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

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

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

    我一直認為:緩存屬于業務邏輯編寫,因為數據庫操作也屬于業務邏輯部分,為什么不把等同于數據庫的緩存也作為業務邏輯對待呢?正是緩存屬于業務邏輯組件,所以,處理緩存是不能完全使用框架替代的,除非使用EJB,但是使用EJB不了解其緩存機制,也會走上使用誤區,最后唾棄EJB,這是一些所謂高人經常范的毛病。

    aill

    發表文章: 131
    注冊時間: 2004年06月02日 15:20

    Re: J2EE網站經驗共享! 發表: 2006年06月08日 12:18 回復
    謝謝老大的點評!

    mythmoon

    發表文章: 207
    注冊時間: 2005年03月21日 01:09

    Re: J2EE網站經驗共享! 發表: 2006年06月18日 11:57 回復
    當你的VIEW(JSP或actionForm)需要對應兩個以上的實體bean并且要進行操作你是直接傳兩個DTO,還是把兩個實體轉成一個DTO(hashMap)再傳到VIEW。
    然后,你的DAO又是怎么處理的呢!
    我比較疑惑這個問題!

    jgtang

    發表文章: 3
    注冊時間: 2006年06月20日 17:13

    Re: J2EE網站經驗共享! 發表: 2006年06月20日 19:46 回復
    IService receiver = (IService)Class.forName(serviceName).newInstance();
    ICommand cmd = new CommandXX();
    cmd.setReceiver(receiver);
    cmd.getParams.add(request);
    cmd.getParams.add(response);
    cmd.execute();

    class CommandXX extends ICommand{
    private List params = new ArrayList();
    private <T> receiver;
    public void execute(){
    receiver.method();//method的內容和你的service.execute相同
    }
    public getter/setter;
    }
    按我對command的理解,如果讓我做的話,我會這么寫,不知道合不合理?

    jgtang

    發表文章: 3
    注冊時間: 2006年06月20日 17:13

    Re: J2EE網站經驗共享! 發表: 2006年06月20日 19:46 回復
    ICommand cmd = new CommandXX();
    cmd.setReceiver(receiver);
    cmd.getParams.add(request);
    cmd.getParams.add(response);
    cmd.execute();

    class CommandXX extends ICommand{
    private List params = new ArrayList();
    private <T> receiver;
    public void execute(){
    receiver.method();//method的內容和你的service.execute相同
    }
    public getter/setter;
    }
    按我對command的理解,如果讓我做的話,我會這么寫,不知道合不合理?

    jgtang

    發表文章: 3
    注冊時間: 2006年06月20日 17:13

    Re: J2EE網站經驗共享! 發表: 2006年06月20日 20:02 回復
    呵呵,不好意思,CommandXX里的params不對,不能是一個ArrayList應該讓它是一個Object里面有像struts的Action Formbean, request, response,等這樣的東西.

    charrot

    發表文章: 1
    注冊時間: 2006年06月23日 10:48

    Re: J2EE網站經驗共享! 發表: 2006年06月23日 10:49 回復
    呵,原來是廈門的啊,我也是啊,樓主,有空聊聊啊
    我的**58061178

    limb

    發表文章: 19
    注冊時間: 2006年06月14日 18:01

    Re: J2EE網站經驗共享! 發表: 2006年06月28日 10:14 回復
    不錯!
    做個標記先!

    tocow

    發表文章: 4
    注冊時間: 2006年07月27日 17:26

    Re: J2EE網站經驗共享! 發表: 2006年07月27日 17:29 回復
    大牛?。∧莻€登記注冊碼圖片怎么生成的呀,是不是只是一個隨機碼+一張背景圖片,呵呵,我的msn:hpj2001@hotmail.com

    aill

    發表文章: 131
    注冊時間: 2004年06月02日 15:20

    Re: J2EE網站經驗共享! 發表: 2006年07月30日 15:26 回復
    哈哈,沒想到廈門的道友這么多,有空聊聊啊。另外工作很忙,基本不上**或msn,有問題可以到秀城論壇的java板塊留言!

    feiren2004

    發表文章: 1
    注冊時間: 2006年08月16日 11:52

    Re: J2EE網站經驗共享! 發表: 2006年08月16日 11:59 回復
    終于找到組織了!贊一個

    junglesong

    發表文章: 36
    注冊時間: 2006年06月07日 14:05

    Re: J2EE網站經驗共享! 發表: 2006年09月05日 16:19 回復
    請問Banq大哥,Service類中方法是靜態的好還是非靜態的好?

    icesyc

    發表文章: 3
    注冊時間: 2007年02月08日 10:55

    re:J2EE網站經驗共享! 發表: 2007年02月08日 10:56 回復
    test

    icesyc

    發表文章: 3
    注冊時間: 2007年02月08日 10:55

    re:J2EE網站經驗共享! 發表: 2007年02月08日 11:01 回復
    有一個問題.

    boolean isSuc = service.execute(this.getServletContext(), request,
    response);
    這個方法能夠動態的加載對應的Service類,
    那么如果能動態的加載對應的action呢

    要是用if else就是
    public boolean execute(ServletContext sc, HttpServletRequest req, HttpServletResponse, res){
    String act = request.getParameter("action");
    if(act.equals("save")){
    ...
    }elseif(act.equals("list")){
    ...
    }
    }

    我知道一種解決辦法是每個action對應一個方法,
    可以用反射來動態加載類的方法.
    但反射的效率太低,有其它的解決方案嗎?

    還有一個問題就是取出的數據怎么連到jsp頁面上??

    icesyc

    發表文章: 3
    注冊時間: 2007年02月08日 10:55

    re:J2EE網站經驗共享! 發表: 2007年02月09日 09:00 回復
    為什么沒有回應啊呀

    banq

    發表文章: 7507
    注冊時間: 2002年08月03日 17:08

    回復:re:J2EE網站經驗共享! 發表: 2007年03月10日 10:49 回復
    >我知道一種解決辦法是每個action對應一個方法,可以用反射來動態加載類的方法.
    就是用反射+命令模式,Struts等框架都是采取這種方式。




    posted on 2007-03-24 11:16 java_蟈蟈 閱讀(421) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 在线观看肉片AV网站免费| 亚洲国产精品成人综合色在线婷婷 | 久久久国产亚洲精品| 91精品视频免费| 亚洲国产成AV人天堂无码| 啦啦啦高清视频在线观看免费 | 羞羞视频网站免费入口| 国产在线a不卡免费视频| 亚洲成av人无码亚洲成av人| 美女被免费视频网站a国产| 亚洲AV无码专区在线厂| 亚洲国产成人久久一区WWW| jizz免费在线观看| 亚洲av无码不卡| 青娱乐免费在线视频| 狠狠入ady亚洲精品| 亚洲日本va午夜中文字幕久久| 美女无遮挡拍拍拍免费视频| 亚洲va无码va在线va天堂| 久久免费视频精品| 亚洲国产精品成人精品软件| 在线看片无码永久免费aⅴ| 久久国产精品免费| 亚洲黄色免费网站| 国产小视频在线观看免费| 日韩免费高清播放器| 亚洲免费二区三区| 免费一级毛片在线观看| 免费黄网站在线看| 中文日韩亚洲欧美制服| 亚洲日韩精品无码一区二区三区 | 欧洲乱码伦视频免费国产| 亚洲国产精彩中文乱码AV| 国产香蕉九九久久精品免费| 污污视频网站免费观看| 中文字幕亚洲综合精品一区| 性感美女视频免费网站午夜| a级片免费在线播放| 亚洲欧美一区二区三区日产| 亚洲精品无码永久中文字幕| 美女裸身网站免费看免费网站|