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

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

          個(gè)人體會(huì): 這個(gè)框架有幾個(gè)好處,action 類(lèi),不用繼承任何類(lèi),看上去就是一個(gè)簡(jiǎn)單的java類(lèi),方法不再依賴(lài)request,response對(duì)象,方便做單元測(cè)試。同一個(gè)方法可以傳入不同的javabean對(duì)象,可直接將持久層對(duì)象與表單數(shù)據(jù)綁定,不用多寫(xiě)額外的actionForm對(duì)象。加上spring的注解功能
    基本減少了80%的配置信息,而且不容易因?yàn)榕渲檬д`而出錯(cuò)。方便做權(quán)限管理,通過(guò)請(qǐng)求,控制action,控制方法,只要分析請(qǐng)求,就可用權(quán)限管路業(yè)務(wù)。
          我的一個(gè)案列:后來(lái)利用這個(gè)框架為客戶(hù)做了一個(gè)考核系統(tǒng)。整體代碼應(yīng)該說(shuō)好是非常簡(jiǎn)潔的。比如我的一個(gè)簡(jiǎn)單存儲(chǔ)。就如下簡(jiǎn)單:
              

    @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 閱讀(309) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本视频免费观看| 亚洲精品午夜国产va久久| 日本v片免费一区二区三区| 色婷婷六月亚洲婷婷丁香| 毛片在线播放免费观看| 亚洲精品狼友在线播放| 亚洲av无码专区在线观看亚| 免费观看的a级毛片的网站| 亚洲色大成网站www| 国产yw855.c免费视频| 一区二区三区在线观看免费| 日韩精品福利片午夜免费观着| 亚洲AV无码第一区二区三区 | 插鸡网站在线播放免费观看| 亚洲精品乱码久久久久久蜜桃 | 黄 色一级 成 人网站免费| 成人特黄a级毛片免费视频| 亚洲免费福利在线视频| 国产极品粉嫩泬免费观看 | 免费涩涩在线视频网| 美女黄频a美女大全免费皮| 国产午夜亚洲精品理论片不卡| 亚洲av无码成人精品国产| 亚洲精品视频免费| 午夜视频免费在线观看| 亚洲春色另类小说| 免费**毛片在线播放直播 | 亚洲精品无码成人片久久不卡| 啊灬啊灬别停啊灬用力啊免费看| 三上悠亚在线观看免费| 亚洲欧洲高清有无| 又色又污又黄无遮挡的免费视| 好紧我太爽了视频免费国产| 中文字幕亚洲精品无码| 国产亚洲一区区二区在线 | 国产91在线免费| 日本黄色动图免费在线观看| 亚洲国产视频久久| 亚洲人成77777在线播放网站| 国产精品福利片免费看| 亚洲高清无在码在线无弹窗 |