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

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

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

    幫助IT團(tuán)隊(duì)快速構(gòu)建符合jt808協(xié)議部標(biāo)的基于java技術(shù)的GPS和視頻平臺(tái)(2379423771@qq.com)

    struts2 權(quán)威指南

    struts2的開(kāi)發(fā)規(guī)范與技巧

    Struts2的前景還是穩(wěn)健的,使用的人數(shù)在不斷的增加。參看struts 2依然堅(jiān)挺 Seam前景不明


    但基于Struts2的開(kāi)發(fā),如果沒(méi)有足夠的經(jīng)驗(yàn)和規(guī)范做支撐,并不能帶來(lái)還多的好處,如果失控,一樣和JSP+servlet泛濫,這一點(diǎn)需要警示。

    1).Action類(lèi)及Action Name的命名規(guī)范
    ? Action類(lèi)的后綴統(tǒng)一加上"Action",
    ? Action的Name與類(lèi)的名稱保持一致,但不要"Action"的后綴。
    ? 這樣是為了通過(guò)Action的調(diào)用url, 很方便的找到Action類(lèi)。

    ?

    1??action?name="searchKnowledge"
    2???class="com.demo.search.action.SearchKnowledgeAction">
    3???result?name="search">/demo/search.jspresult>
    4??action>

    ?

    ? 如上,看到/searchKnowledge.action,就可以很清楚的知道類(lèi)是SearchKnowledgeAction了。很多人不注重這一點(diǎn),開(kāi)發(fā)調(diào)試中,每次都要笨拙的看struts.xml文件。

    2).每個(gè)項(xiàng)目都必須至少有一個(gè)公用的Action類(lèi),GenericAction
    ? 完成的功能如下:
    ? 1.獲取、注入request
    ? 2.獲取、注入Session
    ? 3.錯(cuò)誤頁(yè)面跳轉(zhuǎn)
    ? 4.獲取在線用戶和會(huì)員的信息(個(gè)人信息、權(quán)限、角色等)
    ? 5.注入類(lèi)型轉(zhuǎn)換的格式轉(zhuǎn)換類(lèi),如日期類(lèi)型轉(zhuǎn)換:ConvertUtils.register(new DateConverter(), Date.class);
    ? 6.獲取系統(tǒng)配置信息,如公用變量(如配置路徑等)
    ? 7.對(duì)于request參數(shù)的處理等
    ? 8.其他可擴(kuò)展的操作

    3).擅長(zhǎng)使用Dispatch的模式
    ? 有人說(shuō)Action,不就是Dispatch的延伸嗎,其實(shí)還可以做的更好。

    ? 這個(gè)典型的模式如下:
    ? 1.頁(yè)面表單的Hidden參數(shù)中,就是一個(gè)ID,如queryID="queryKnowledges". Action="/paginate.action"

    ? 2.PaginateAction的模板如下

    1private?String?queryID;
    2????public?String?execute()?{
    3????????//獲得Service的接口
    4????????//根據(jù)queryID調(diào)用Ibatis分頁(yè)查詢方法
    5????????return?queryID;??//這一點(diǎn),就是動(dòng)態(tài)跳轉(zhuǎn),在Action不明確注明"success"之類(lèi)的跳轉(zhuǎn)名稱。
    6????}


    ????? 3.在struts.xml中進(jìn)行配置與queryID想對(duì)應(yīng):
    ?

    ?1???action?name="paginate"
    ?2???class="com.gehc.util.pagination.PaginateAction">
    ?3???result?name="queryKnowledges">
    ?4????/demo/knowledgeList.jsp
    ?5???result>
    ?6???
    ?7???result?name="queryIssue">
    ?8????/pm/issue/allIssue.jsp
    ?9???result>
    10????????????????????????
    11????action>



    ?? 實(shí)戰(zhàn)代碼如下:
    ??

    4).配置文件的目錄結(jié)構(gòu)
    ?

    5).不斷的提煉公用的Action,并放在一個(gè)package中:
    ? 如上傳、下載、異常處理、excel數(shù)據(jù)錄入、過(guò)濾器(filter)、截取器(inteceptor)等等
    ?

    6).將一個(gè)模塊中的Action放置在一起
    ???

    7).擅與使用redirect來(lái)保持request參數(shù).
    ? 使用redirect一樣可以將request參數(shù)傳遞到下一頁(yè)面中,不需要使用session.
    ? viewPost?postid=${postid}
    ?

    public?String?execute()?throws?Exception?{

    ?????
    //一些處理……

    ?????name
    =xiaowang?;?//給要傳遞的參數(shù)賦值

    ?????
    return?SUCCESS;?????//默認(rèn)頁(yè)面

    ???
    //return?"redirect_1"?;?//重定向(不帶參數(shù))?showInfo.do

    ???
    //return?"redirect_2"?;?//重定向(帶固定參數(shù)yangzi)?showInfo.do?name=yangzi

    ???
    //重定向(帶動(dòng)態(tài)參數(shù),根據(jù)struts.xml的配置將${name}賦值為xiaowang)最后為?showInfo.do?name=xiaowang???
    ???
    //?return?"redirect_3"?;

    //return?"redirect_4"?;?//這個(gè)是重定向到?一個(gè)action

    }

    action?name="login"?class="LoginAction">?
    ???
    result?name="success"?type="velocity">/pages/logok.vmresult>?
    ???
    result?name="redirect_1"?type="redirect">showInfo.doresult>?
    ???
    result?name="redirect_2"?type="redirect">showInfo.do?name=yangziresult>
    ???
    result?name="redirect_3"?type="redirect">showInfo.do?name=${name}result>
    ???
    result?name="redirect_4"?type=?"redirect">?
    ??????????????
    param?name="actionName">showInfoparam>?
    ??????????????
    param?name="name">${name}param>?
    ????
    result>???

    action>


    8)靈活使用chain模式,來(lái)編寫(xiě)簡(jiǎn)短而高度重用的Action,把相關(guān)的幾個(gè)action連接起來(lái),共同完成一個(gè)功能
    ????? 同一個(gè)Chain的多個(gè)action間數(shù)據(jù)的傳遞非常方便,由于處于chain中的action屬于同一個(gè)http請(qǐng)求,共享一個(gè)ActionContext,故可以在上下文中獲取,在頁(yè)面上可以直接使用,上一個(gè)Action的成員變量。??????

    1<action?name="step1"?class="test.Step1Action">??
    2????????<result?name="success"?type="chain">step2.action</result>??
    3</action>??
    4??
    5<action?name="step2"?class="test.Step2Action">??
    6????????<result?name="success">finish.jsp</result>??
    7</action>??


    9) 編寫(xiě)簡(jiǎn)潔而高度重用的Action的另一個(gè)方法,就是將頁(yè)面的渲染,格式轉(zhuǎn)換的邏輯,抽取出來(lái),自定義成Result。
    官方的Result

    10) 明確Action類(lèi)不要超長(zhǎng),如不要超過(guò)500行代碼。

    ???? 很多人為了偷懶,喜歡在一個(gè)Action中,不斷的添加方法,而不管這些方法與Action的語(yǔ)義是否符合,到底是多個(gè)Action,還是多個(gè)方法,在開(kāi)發(fā)過(guò)程中,還是要注重這些方法是否與創(chuàng)建Action類(lèi)的目的、語(yǔ)義保持一致。

    ???? 最好明確代碼的長(zhǎng)度,團(tuán)隊(duì)人多,手雜,水平不一,為了保證可維護(hù)性,這是一個(gè)不得已的方法。

    posted on 2008-11-27 08:54 Speed 閱讀(4827) 評(píng)論(5)  編輯  收藏 所屬分類(lèi): 框架設(shè)計(jì)struts2J2EE

    評(píng)論

    # re: struts2的開(kāi)發(fā)規(guī)范與技巧 2008-11-27 09:54 ss

    GenericAction 貼出來(lái)一個(gè)看看  回復(fù)  更多評(píng)論   

    # re: struts2的開(kāi)發(fā)規(guī)范與技巧 2008-11-27 10:15 Fyun Li

    3).擅長(zhǎng)使用Dispatch的模式
    樓主這條應(yīng)該可以再斟酌  回復(fù)  更多評(píng)論   

    # re: struts2的開(kāi)發(fā)規(guī)范與技巧 2008-11-27 12:01 fiesta

    很實(shí)用的東東,謝謝分享,期待更多精彩!  回復(fù)  更多評(píng)論   

    # re: struts2的開(kāi)發(fā)規(guī)范與技巧 2008-11-27 21:08 bigbusyboy

    try annotation and you will find it amazing...  回復(fù)  更多評(píng)論   

    # re: struts2的開(kāi)發(fā)規(guī)范與技巧 2008-12-01 09:45 daniel zhou

    似乎這幾點(diǎn)是所有的編程人員都要有的習(xí)慣!  回復(fù)  更多評(píng)論   

    導(dǎo)航

    留言簿(15)

    隨筆分類(lèi)

    值得一看的博客

    積分與排名

    最新評(píng)論

    閱讀排行榜

    主站蜘蛛池模板: 中国好声音第二季免费播放| 亚洲日韩精品国产一区二区三区| 亚洲男女内射在线播放| 国产精品免费视频网站| 精品久久久久久久免费加勒比| 最近最好的中文字幕2019免费 | 亚洲国产精品xo在线观看| 亚洲视频一区网站| 亚洲精品国产成人| 亚洲av无码一区二区三区天堂古代| 亚洲av无码片在线观看| 精品亚洲成在人线AV无码| 亚洲一卡2卡三卡4卡无卡下载| 亚洲欧美日韩中文字幕一区二区三区 | 在线观看免费视频资源| 日日麻批免费40分钟日本的| 麻豆最新国产剧情AV原创免费| 国产h视频在线观看免费| 好爽…又高潮了免费毛片| 国产精品国产自线拍免费软件| 免费a级毛片无码a∨性按摩| 免费观看四虎精品国产永久| 亚洲一级片免费看| 婷婷精品国产亚洲AV麻豆不片| 亚洲视频在线观看网站| 亚洲综合一区国产精品| 色多多免费视频观看区一区| 国产A∨免费精品视频| 无人在线观看免费高清| 999久久久免费精品国产| 免费无遮挡无码视频网站| 亚洲国产高清在线一区二区三区| 亚洲精品你懂的在线观看| 亚洲精品日韩中文字幕久久久| 亚洲春色另类小说| 亚洲AV无码国产剧情| 国产免费区在线观看十分钟| 久久久免费精品re6| 成年女人喷潮毛片免费播放| 亚洲午夜AV无码专区在线播放| 日韩精品一区二区亚洲AV观看|