日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Struts第2天

 liuyang_inf 2014-08-26

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

今天剛一上課,吳老就又總結了下昨天的知識點,并且,又給我們講了一遍Struts的加載流程。這個問題在昨天的博客中已經寫到,今天就不具體描述了。

Struts的5個擴展點:

1.ActionSerlet 擴充中央控制器

2.RequestProessor組件 請求處理器

3.ActionForm

4.Action

5.Plug in 插件

Struts視圖組件

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

ActionForm的生命周期:

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

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

好了,我們來看一下一個簡單的動態(tài)Form的配置吧,就拿今天的DynActionForm來說,示例:

<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里面直接配置,那么,這種書寫formbean的方法感覺很良好,但是,它有很多缺點,配置好了,那么我們的頁面如果改動的話我們的action里面也需要改動配置文件也需要改動,這樣就違反了開閉原則了,并且,不支持validate代碼方式驗證。

既然說到了formbean的驗證,那么就順便談談struts的代碼方式的驗證。

我們需要做的是:

1.在Action的配置中需要配置兩項內容,

validate="true" 是否驗證為true input="/login.jsp" 如果驗證錯誤的話就會跳轉到login.jsp頁面

2.在我們的formbean中需要重寫validate方法,那么我們來看一個最簡單的驗證:

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

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

好了,我們來具體看看這句代碼的意思

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

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

error.login.name=\u7528\u6237\u540D\u975E\u6CD5\uFF01 我們知道了,它的鍵的來源,那么,它的value是從哪來的,其實它的值正好對應的是我們要提示的錯誤信息,這里我使用了utf-8編碼格式。

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

那么在這個標簽庫里面有一個<html:errors property="name" /> 在這里我們的property的值是引用我們的

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

其實Struts標簽庫是完全替代了html的標簽庫了的,但是,為了較好的移植性,所以,我們一般在項目中用的較少。

 

控制器組件

控制器組件,今天就講了3個內置Action對象,其實在struts中有6中內置的Action對象

ForwardAction 用于頁面的轉發(fā)和鏈接的跳轉

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

DisPatchAction 用于一個表單多個提交按鈕的時候

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

MappingDisPatchAction 這個也是擴展了DisPatchAction,在url請求時不需要方法名,其他的大致跟DisPathchAction差不多,配置上稍微有那么一點點區(qū)別,因為,它有多個請求路徑。

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

那么,我們在這里具體講解前3個內置Action。

ForwardAction

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

好了,其實ForwardAction的配置很簡單,示例:

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

這里的parameter的屬性就是要跳轉的頁面,IncludeAction 跟這個配置一樣,parameter就是要包含的頁面。

DisPatchAction

我們先看下面代碼:

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

我們看以上的代碼會發(fā)現(xiàn)當一個表單有多個按鈕的時候,我們怎么區(qū)分不同的點擊呢?當然,這里可以用js來解決,那么,我們的Action就會有3個,那如果在多幾個提交按鈕呢?可見情況是很嚴重的,有什么解決辦法么?

哈哈,我們的DisPatchAction就是在這里發(fā)揮它的重要作用的,好了,我們將3種不同的請求合成到一個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;
   
}

這個時候,我們的配置文件如何寫呢?

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

這里的parameter的就是指我們的方法名,在我們提交的時候會這樣來寫:

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

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

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

 

好了,先暫時寫到這吧!

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多