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

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

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

    posts - 51, comments - 17, trackbacks - 0, articles - 9
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Action

    Posted on 2007-03-20 15:30 chenweicai 閱讀(200) 評(píng)論(0)  編輯  收藏
    ? Action類是用戶請(qǐng)求和業(yè)務(wù)邏輯之間的橋梁。每個(gè)Action充當(dāng)用戶的一項(xiàng)業(yè)務(wù)代理。在 ? RequestProcessor類預(yù)處理請(qǐng)求時(shí),在創(chuàng)建了Action的實(shí)例后,就調(diào)用自身的processActionPerform()方法,該方法再調(diào)用Action類的execute()方法。Action的execute()方法調(diào)用模型的業(yè)務(wù)方法,完成用戶請(qǐng)求的業(yè)務(wù)邏輯,然后根據(jù)執(zhí)行結(jié)果把請(qǐng)求轉(zhuǎn)發(fā)給其他合適的Web組件。在實(shí)際的應(yīng)用中,主要有以下幾種比較常見的使用方法: ?
    ? ?
    ? 1.普通的Action應(yīng)用 ?
    ? ?
    ? <action ? path="/normalAction" ?
    ? type="package.OneActionClass"> ?
    ? name="oneForm" ?
    ? input="page.jsp" ?
    ? <forward ? name="success" ? path="success.jsp"/> ?
    ? <forward ? name="failure" ? path="failure.jsp"/> ?
    ? </action> ?
    ? ?
    ? ? ? ? ? Struts的ActionServlet接收到一個(gè)請(qǐng)求,然后根據(jù)struts-config.xml的配置定位到相應(yīng)的mapping(映射);接下來(lái)如果form的范圍是request或者在定義的范圍中找不到這個(gè)form,創(chuàng)建一個(gè)新的form實(shí)例,如果找到則重用;取得form實(shí)例以后,調(diào)用其 ? reset()方法,然后將表單中的參數(shù)放入form,如果validate屬性不為false,調(diào)用validate()方法;如果validate ? ()返回非空的ActionErrors,將會(huì)被轉(zhuǎn)到input屬性指定的URI,如果返回空的ActionErrors,那么執(zhí)行Action的 ? execute()方法,根據(jù)返回的ActionForward確定目標(biāo)URI。即execute()僅當(dāng)validate()成功以后才執(zhí)行; ? input屬性指定的是一個(gè)URI。 ?
    ? ?
    ? ?
    ? 2.有Form的Action應(yīng)用 ?
    ? ?
    ? <action ? path="/formAction" ?
    ? type="org.apache.struts.actions.ForwardAction" ?
    ? name="oneForm" ?
    ? input="page.jsp" ?
    ? parameter="another.jsp" ?
    ? /> ?
    ? ?
    ? ? ? ? ? Struts會(huì)在定義的scope搜尋oneForm,如果找到則重用,如果找不到則新建一個(gè)實(shí)例;取得form實(shí)例以后,調(diào)用其reset()方法,然后將表單中的參數(shù)放入form,如果validate屬性不為false,調(diào)用validate()方法;如果validate()返回非空的 ? ActionErrors,將會(huì)被轉(zhuǎn)到input屬性指定的URI,如果返回空的ActionErrors,那么轉(zhuǎn)到parameter屬性指定的目標(biāo) ? URI。 ?
    ? ?
    ? ? ? ? ? 這種方法使得沒(méi)有action類可以存放我們的業(yè)務(wù)邏輯,所以所有需要寫入的邏輯都只能寫到form的reset()或者validate()方法中。 ? validate()的作用是驗(yàn)證和訪問(wèn)業(yè)務(wù)層。因?yàn)檫@里的action映射不包括forward,所以不能重定向,只能用默認(rèn)的那個(gè)forward。這種僅有form的action可以用來(lái)處理數(shù)據(jù)獲取并forward到另一個(gè)JSP來(lái)顯示。 ?
    ? ?
    ? ?
    ? 3.僅有Action的Action應(yīng)用 ?
    ? ?
    ? <action ? path="/actionAction" ?
    ? type="package.OneActionClass"> ?
    ? input="page.jsp" ?
    ? <forward ? name="success" ? path="success.jsp"/> ?
    ? <forward ? name="failure" ? path="failure.jsp"/> ?
    ? </action> ?
    ? ?
    ? ? ? ? ? ActionServlet接收到請(qǐng)求后,取得action類實(shí)例,調(diào)用execute()方法;然后根據(jù)返回的ActionForward在配置中找 ? forward,forward到指定的URI或action。這樣就沒(méi)有form實(shí)例被傳入execute()方法,于是execute()必須自己從請(qǐng)求中獲取參數(shù)。Action可以被forward或者重定向。這種action不能處理通過(guò)HTML ? FORM提交的請(qǐng)求,只能處理鏈接式的請(qǐng)求。 ?
    ? ?
    ? ?
    ? 4.僅有JSP的Action應(yīng)用 ?
    ? ?
    ? <action ? path="/jspAction" ?
    ? type="org.apache.struts.actions.ForwardAction" ?
    ? parameter="another.jsp" ?
    ? /> ?
    ? ?
    ? ? ? ? ? ActionServlet接到請(qǐng)求后調(diào)用ForwardAction的execute()方法,execute()根據(jù)配置的parameter屬性值來(lái)forward到那個(gè)URI。這種情況下,沒(méi)有任何form被實(shí)例化,比較現(xiàn)實(shí)的情形可能是form在request更高級(jí)別的范圍中定義;或者這個(gè) ? action被用作在應(yīng)用程序編譯好后充當(dāng)系統(tǒng)參數(shù),只需要更改這個(gè)配置文件而不需要重新編譯系統(tǒng)。 ?
    ? ?
    ? ?
    ? 5.兩個(gè)Action對(duì)應(yīng)一個(gè)Form(和第四種方式部分的Action作用相近) ?
    ? ?
    ? <action ? path="/oneAction" ?
    ? type="package.OneActionClass"> ?
    ? name="oneForm" ?
    ? input="one.jsp" ?
    ? <forward ? name="success" ? path="/anotherAction.do"/> ?
    ? </action> ?
    ? <action ? path="/anotherAction" ?
    ? type="package.AnotherActionClass"> ?
    ? name="oneForm" ?
    ? input="another.jsp" ?
    ? <forward ? name="success" ? path="success.jsp"/> ?
    ? </action> ?
    ? ?
    ? ? ? ? ? 這個(gè)組合模式可以被用來(lái)傳遞form對(duì)象,就每個(gè)單獨(dú)的action來(lái)講,處理上并沒(méi)有和完整的action有什么實(shí)質(zhì)的區(qū)別。需要注意的是在后一個(gè) ? action中同樣會(huì)調(diào)用form的reset()和validate()方法,因此我們必須確保form中的信息不被重寫。這種情況分兩種方式處理: ? a) ? 在request中放入一個(gè)指示器表明前一個(gè)action有意向后一個(gè)action傳遞form,從而在后一個(gè)action可以保留那個(gè)form中的值,這一方式只能在使用forward時(shí)使用。b) ? 當(dāng)使用redirect而不是forward時(shí),可以把指示器放在session或更高的級(jí)別,在命令鏈的最后一環(huán)將這個(gè)指示器清除。 ?
    ? ?
    ? ?
    ? 6.兩個(gè)Action對(duì)應(yīng)兩個(gè)form ?
    ? ?
    ? <action ? path="/oneAction" ?
    ? type="package.oneActionClass"> ?
    ? name="oneForm" ?
    ? input="one.jsp" ?
    ? <forward ? name="successful" ? path="/anotherAction.do" ? redirect="true"/> ?
    ? </action> ?
    ? <action ? path="/anotherAction" ?
    ? type="package.AnotherActionClass">" ?
    ? name="anotherForm" ?
    ? input="another.jsp" ?
    ? <forward ? name="success" ? path="success.jsp"/> ?
    ? </action> ?
    ? ?
    ? ? ? ? ? 這個(gè)組合方式跟前一種在流程上沒(méi)有太大區(qū)別,只是我們現(xiàn)在對(duì)于兩個(gè)action分別提供了form,于是代碼看上去更加清晰。于是我們可以分別處理WEB ? 應(yīng)用程序的輸入和輸出。值得注意的是,后一個(gè)action同樣會(huì)嘗試往form中寫入那些參數(shù),不過(guò)我們可以這樣處理:a) ? 在后一個(gè)form中使用另一套屬性名;b) ? 只提供getter而不提供setter。 ?
    ? ?
    ? 基本處理過(guò)程: ?
    ? ? ? ? ? 前一個(gè)action接收輸入、驗(yàn)證、然后將數(shù)據(jù)寫入業(yè)務(wù)層或持久層,重定向到后一個(gè)action,后一個(gè)action手動(dòng)的從業(yè)務(wù)層/持久層取出數(shù)據(jù),寫入form(通過(guò)其他方式),交給前臺(tái)JSP顯示。這樣做的好處是不必保留輸入form中的值,因此可以使用redirect而不是forward。這樣就降低了兩個(gè)action之間的耦合度,同時(shí)也避免了不必要的重復(fù)提交。 ?
    ? ?
    ? 注明:文中所提及的“僅有Form”指的是沒(méi)有繼承Struts提供的Action類,而是直接使用了Struts自身提供的Action類;“僅有Action”指的是僅繼承了Struts提供的Action類而沒(méi)有使用Form。

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精一品亚洲二区在线播放| 男人j进女人p免费视频| 毛片免费在线观看| 亚洲狠狠婷婷综合久久久久| 国产97视频人人做人人爱免费| 四虎免费永久在线播放| 国产精品亚洲小说专区| 日韩成人免费视频播放| 羞羞视频在线免费观看| 免费在线观看你懂的| eeuss影院www天堂免费| 激情97综合亚洲色婷婷五| 色播在线永久免费视频网站| 亚洲精品蜜桃久久久久久| 美女视频黄的免费视频网页| 激情内射亚洲一区二区三区| 久久国产乱子伦免费精品| 亚洲六月丁香六月婷婷蜜芽| 成人奭片免费观看| 美女视频黄a视频全免费网站色| 亚洲免费日韩无码系列 | 无套内谢孕妇毛片免费看看| 亚洲国产精品无码久久青草| 中国一级特黄的片子免费| 无码欧精品亚洲日韩一区| 免费观看AV片在线播放| 亚洲国产精品美女久久久久| 亚洲av无码成人精品区| 美女视频黄的免费视频网页 | 99久久婷婷国产综合亚洲| 国产jizzjizz免费视频| 中文字幕免费不卡二区| 亚洲一区二区三区高清不卡| 又大又黄又粗又爽的免费视频| 免费无码作爱视频| 久久亚洲精品国产精品婷婷 | 亚洲美女视频一区二区三区| 天天摸夜夜摸成人免费视频| 国产高清视频免费在线观看| 亚洲欧洲日产国产最新| 亚洲人成人网站在线观看|