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

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

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

    samtiger


    QQ:418148757
    Name:yangchuan
    數據加載中……
    DIY mvc框架
     一直都很猶豫,自己寫的東西羞于拿出手來,羞于見世面,主要是覺得,東西太簡單,代碼太丑陋,功能太少。但一直卻又有那么一點點沖動,想找個地方說道說道。就好象自己的孩子再不好,也希望碰面了介紹一下,這是我的娃,男娃。
            起因:08年7月有幸外包到了H公司在L市的bi項目組,更有幸的是,我做了我喜歡的前臺編碼工作。可是,等我開始正式工作的時候,我才發現我接下來的工作的痛苦。這是一個老系統,利用的是struts+spring+hibernate經典框架,應該說這個東西還是很不錯的。就是太麻煩了,我們每次修改一個功能或添加一個功能,至少都要接觸到4到6個配置文件,其中業務層的bean需要spring配置兩個:為本模塊加一bean配置,然后又要將這個配置文件的信息包含到一個總的配置文件里。orm持久層的配置:實體bean需要一個配置,(該系統是利用配置文件讀取實體bean的配置文件的),所以也要將這個配置文件包含到另一個文件里。mvc配置文件,該模塊需要一個配置文件,當然還需要在web.xml里包含這個配置文件。
          另外還有一點,就是struts1有個缺點就是一個action類配置一個actionForm,要不就是用動態的,要不就是繼承它的actionform。這樣其實很麻煩,比如我有一個增刪查改的頁面,我就放到一個action類里去處理,其實在這個類里,我有不同的表單,比如,查詢表單,實體表單。針對不同的方法,傳入不同的表單對象。還有就是對于以簡單的增加刪除,很希望,不多做任何事情,直接從頁面表單一步就到數據庫了。struts1倒是能解決這個問題,但是始終是要多寫一個actionform類,還要去配置他。總覺得麻煩。

          綜上所述:其實我想解決配置文件多和繁瑣的問題,另外就是希望mvc框架提供同一個action可以傳入不同的表單實體,同一個action方法可以接受多個不同的表單實體。
          我的愚思: 我是這么想的,我覺得,解決配置文件的問題,完全可以利用注解來配置,我們的業務層,持久層完全可以利用注解來解決,甚至我們的mvc其實也可以利用注解來解決。業務層,持久層就不說了,spring+hibernate早就這么干了。至于mvc,其實流行框架也這么干了,不過我就是想DIY一把,利用spring強大的bean管理能力,mvc的action直接就放在spring里了,通過分析請求地址得到bean的名稱,從而知道調用哪一個action,分析請求中的特定參數,來確定訪問action bean里對應的方法。
         詳細: 整個框架因為小,所以僅需要一個filter就可以了,所有的請求都通過這個filter,在它里面我的主要工作就是分析請求地址,取出它里面含有.do的字串作為action bean的name,然后通過spring返回該action對象。通過取出action參數值,做為此次請求需要調用的action 方法。
    在調用實際的action之前我們還需要做一個事情,那就是將提交上來的表單,分門別類的裝入到不同的javabean里(實體bean,或查詢bean),通過注解訪問上邊找到的action方法,找到該方法對應的@actionForm注解,提取該方法需要的javabean,迭代出每一個bean的屬性名稱,以及屬性類型,并使用propertyManager所管理的不同類型的屬性編輯器將表單里對應的數據轉化為屬性值存入到javabean里。(當然這里需要將表單里的html元素名稱與javabean里的屬性名稱一致)。最后一步,關于action方法的返回,我做了一個處理器。將返回的數據存入到map中,根據需要做不同的返回。
    為了方便處理ajax返回,我也DIY了一個json處理器,將所有對象轉化成json字串,供前臺頁面調用。

          個人體會: 這個框架有幾個好處,action 類,不用繼承任何類,看上去就是一個簡單的java類,方法不再依賴request,response對象,方便做單元測試。同一個方法可以傳入不同的javabean對象,可直接將持久層對象與表單數據綁定,不用多寫額外的actionForm對象。加上spring的注解功能
    基本減少了80%的配置信息,而且不容易因為配置失誤而出錯。方便做權限管理,通過請求,控制action,控制方法,只要分析請求,就可用權限管路業務。
          我的一個案列:后來利用這個框架為客戶做了一個考核系統。整體代碼應該說好是非常簡潔的。比如我的一個簡單存儲。就如下簡單:
              

    @Component("/targetAction")
    public class TargetAction {

     @Autowired()
     @Qualifier("targetService")
     private ItargetService itargetService;

     @ActionForm(TblBsTargetInfo.class)
     public Object add(Object form, HttpServletRequest request,
       HttpServletResponse response) {
      
          itargetService.saveTarget((TblBsTargetInfo) form);
         return new JsonResultHandler(“ok”);
     }

     






    posted on 2009-03-15 11:32 sam.chuan.yang 閱讀(310) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 中文字幕免费视频一| 国产无限免费观看黄网站| 久久精品无码专区免费东京热 | 综合在线免费视频| 亚洲国产精品婷婷久久| 一级毛片免费播放| 亚洲精品视频观看| 曰批视频免费30分钟成人| 亚洲AV无码精品蜜桃| 影音先锋在线免费观看| 蜜桃传媒一区二区亚洲AV| 国产精品免费看久久久无码| 粉色视频在线观看www免费| 亚洲va中文字幕无码| 好吊色永久免费视频大全| 久热综合在线亚洲精品| 222www免费视频| 456亚洲人成影院在线观| 日韩在线免费播放| 一本一道dvd在线观看免费视频 | 亚洲国产精品毛片av不卡在线| www永久免费视频| 久久亚洲精品中文字幕| 毛片a级毛片免费播放100| 黄网站色视频免费观看45分钟| 自拍偷自拍亚洲精品第1页| 午夜影院免费观看| 亚洲第一男人天堂| 亚洲午夜成人精品电影在线观看| a级毛片100部免费观看| 亚洲一本之道高清乱码| 亚洲国产综合无码一区二区二三区 | 222www免费视频| 国产成人综合亚洲绿色| 亚洲精品国产字幕久久不卡| 波多野结衣在线免费视频| 福利片免费一区二区三区| 中文字幕亚洲综合久久2| 国产一区二区三区免费视频| 日本人成在线视频免费播放| 亚洲高清一区二区三区电影|