乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Struts第2天

       liuyang_inf 2014-08-26

      繼續(xù)總結(jié)Struts的第2天的學(xué)習(xí)成果!

      今天剛一上課,吳老就又總結(jié)了下昨天的知識(shí)點(diǎn),并且,又給我們講了一遍Struts的加載流程。這個(gè)問(wèn)題在昨天的博客中已經(jīng)寫(xiě)到,今天就不具體描述了。

      Struts的5個(gè)擴(kuò)展點(diǎn):

      1.ActionSerlet 擴(kuò)充中央控制器

      2.RequestProessor組件 請(qǐng)求處理器

      3.ActionForm

      4.Action

      5.Plug in 插件

      Struts視圖組件

      提到Struts視圖組件那么就的提ActionForm了,ActionForm封裝了客戶端的請(qǐng)求信息,我們一般所用的就是一般的靜態(tài)Action,也就是說(shuō)我們的ActionForm必須創(chuàng)建出來(lái)。

      ActionForm的生命周期:

      ActionForm是在web服務(wù)器到傳遞給不同的Action的時(shí)候也就是它的生命周期了,其實(shí),我們可以看到我們的form對(duì)象的只能傳遞到Action里面,不能傳遞到我們的Model層了,那么,在Action中的時(shí)候我們就必須要轉(zhuǎn)換ActionForm對(duì)象到DTO(簡(jiǎn)單值對(duì)象),然后在繼續(xù)往下一層傳遞。

      剛才提到了靜態(tài)的ActionForm對(duì)象,那么,可想而知肯定會(huì)有動(dòng)態(tài)的ActionForm了,當(dāng)然,java提供了7種內(nèi)置的ActionForm對(duì)象,今天就先熟悉一下我們的DynActionForm對(duì)象,動(dòng)態(tài)的ActionFrom對(duì)象配置更為簡(jiǎn)單,并且,不用創(chuàng)建formbean對(duì)象了。

      好了,我們來(lái)看一下一個(gè)簡(jiǎn)單的動(dòng)態(tài)Form的配置吧,就拿今天的DynActionForm來(lái)說(shuō),示例:

      <form-bean name="lovo" type="org.apache.struts.action.DynaActionForm">
          <form-property name="name" type="java.lang.String"></form-property>
          <form-property name="pwd" type="java.lang.String"></form-property>
         </form-bean>

      屬性全部都在formbean里面直接配置,那么,這種書(shū)寫(xiě)formbean的方法感覺(jué)很良好,但是,它有很多缺點(diǎn),配置好了,那么我們的頁(yè)面如果改動(dòng)的話我們的action里面也需要改動(dòng)配置文件也需要改動(dòng),這樣就違反了開(kāi)閉原則了,并且,不支持validate代碼方式驗(yàn)證。

      既然說(shuō)到了formbean的驗(yàn)證,那么就順便談?wù)剆truts的代碼方式的驗(yàn)證。

      我們需要做的是:

      1.在Action的配置中需要配置兩項(xiàng)內(nèi)容,

      validate="true" 是否驗(yàn)證為true input="/login.jsp" 如果驗(yàn)證錯(cuò)誤的話就會(huì)跳轉(zhuǎn)到login.jsp頁(yè)面

      2.在我們的formbean中需要重寫(xiě)validate方法,那么我們來(lái)看一個(gè)最簡(jiǎn)單的驗(yàn)證:

       public ActionErrors validate(ActionMapping mapping,
         HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if("".equals(name) || name == null){ //驗(yàn)證非空
         errors.add("name",new ActionMessage("error.login.name"));

        //添加一條錯(cuò)誤信息到errors中
        }
        if("".equals(pwd) || pwd == null){
         errors.add("pwd",new ActionMessage("error.login.pwd"));
        }
        return errors;
       }

      好了,我們來(lái)具體看看這句代碼的意思

      errors.add("name",new ActionMessage("error.login.name"));

      errors是一個(gè)裝錯(cuò)誤的容器,大眼一看就曉得是一個(gè)MAP集合了,那么,它的鍵是對(duì)應(yīng)我們的jsp頁(yè)面顯示的property,值對(duì)應(yīng)著一條錯(cuò)誤信息,我們會(huì)發(fā)現(xiàn)這條錯(cuò)誤信息的參數(shù)看起來(lái)有點(diǎn)奇怪,其實(shí),它的參數(shù)對(duì)應(yīng)著國(guó)際化文件-ApplicationResources.properties的鍵,那么,我們來(lái)看看這個(gè)properties文件:

      error.login.name=\u7528\u6237\u540D\u975E\u6CD5\uFF01 我們知道了,它的鍵的來(lái)源,那么,它的value是從哪來(lái)的,其實(shí)它的值正好對(duì)應(yīng)的是我們要提示的錯(cuò)誤信息,這里我使用了utf-8編碼格式。

      3.既然我們的錯(cuò)誤信息有了,那么我們需要在我們的視圖層來(lái)提示用戶,那么,在這里我們就必須用到我們的Struts標(biāo)簽庫(kù)了,在這里我們需要在jsp頁(yè)面中應(yīng)用struts-html.tld這個(gè)文件,一般它的位置位于/WEB-INF/struts-html.tld,例如:<%@taglib prefix="html" uri="/WEB-INF/struts-html.tld" %>

      那么在這個(gè)標(biāo)簽庫(kù)里面有一個(gè)<html:errors property="name" /> 在這里我們的property的值是引用我們的

      errors.add("name",new ActionMessage("error.login.name")); 這句話里面的key值的。

      其實(shí)Struts標(biāo)簽庫(kù)是完全替代了html的標(biāo)簽庫(kù)了的,但是,為了較好的移植性,所以,我們一般在項(xiàng)目中用的較少。

       

      控制器組件

      控制器組件,今天就講了3個(gè)內(nèi)置Action對(duì)象,其實(shí)在struts中有6中內(nèi)置的Action對(duì)象

      ForwardAction 用于頁(yè)面的轉(zhuǎn)發(fā)和鏈接的跳轉(zhuǎn)

      IncludeAction 用于包含另外一個(gè)web組件 它的配置跟ForwordAction配置基本一致

      DisPatchAction 用于一個(gè)表單多個(gè)提交按鈕的時(shí)候

      LookUpDisPatchAction 在一個(gè)表單中有多個(gè)提交按鈕而這些按鈕又有一個(gè)共同的名字,擴(kuò)展了DisPatchAction

      MappingDisPatchAction 這個(gè)也是擴(kuò)展了DisPatchAction,在url請(qǐng)求時(shí)不需要方法名,其他的大致跟DisPathchAction差不多,配置上稍微有那么一點(diǎn)點(diǎn)區(qū)別,因?yàn)椋卸鄠€(gè)請(qǐng)求路徑。

      SwitchAction 用于多模塊配置各個(gè)子模塊之間的切換

      那么,我們?cè)谶@里具體講解前3個(gè)內(nèi)置Action。

      ForwardAction

      在講解之前,為什么要使用ForwardAction呢?因?yàn)镾truts規(guī)定所有的請(qǐng)求必須經(jīng)過(guò)中央控制器-ActionServlet,但是,在使用A連接和 Forward轉(zhuǎn)發(fā)的時(shí)候我們是否思考過(guò),他們是否經(jīng)過(guò)了中央控制器呢?很顯然答案是否定的!

      好了,其實(shí)ForwardAction的配置很簡(jiǎn)單,示例:

      <action path="/lovo" type="org.apache.struts.actions.ForwardAction" parameter="/index.jsp"></action>

      這里的parameter的屬性就是要跳轉(zhuǎn)的頁(yè)面,IncludeAction 跟這個(gè)配置一樣,parameter就是要包含的頁(yè)面。

      DisPatchAction

      我們先看下面代碼:

       <form action="lovo.do" method="post">
        <input type="submit" value="添加" />
        <input type="submit" value="刪除" />
        <input type="submit" value="修改" />
       </form>

      我們看以上的代碼會(huì)發(fā)現(xiàn)當(dāng)一個(gè)表單有多個(gè)按鈕的時(shí)候,我們?cè)趺磪^(qū)分不同的點(diǎn)擊呢?當(dāng)然,這里可以用js來(lái)解決,那么,我們的Action就會(huì)有3個(gè),那如果在多幾個(gè)提交按鈕呢?可見(jiàn)情況是很?chē)?yán)重的,有什么解決辦法么?

      哈哈,我們的DisPatchAction就是在這里發(fā)揮它的重要作用的,好了,我們將3種不同的請(qǐng)求合成到一個(gè)action中,代碼如下:

      public class BookAction extends DispatchAction{
       public ActionForward add(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response)
         throws Exception { 
        return null;
       }
       public ActionForward del(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response)
         throws Exception { 
        return null;
       }
        public ActionForward update(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {
         return null;
         
      }

      這個(gè)時(shí)候,我們的配置文件如何寫(xiě)呢?

      <action path="/book" type="com.lovo.action.BookAction" parameter="m"></action>

      這里的parameter的就是指我們的方法名,在我們提交的時(shí)候會(huì)這樣來(lái)寫(xiě):

      book.do?m=add  添加業(yè)務(wù)

      book.do?m=del  刪除業(yè)務(wù)

      book.do?m=update 更新業(yè)務(wù)

       

      好了,先暫時(shí)寫(xiě)到這吧!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多