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

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

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

    隨筆-25  評論-6  文章-0  trackbacks-0
    ActionMapping類
    將特定請求映射到特定Action的相關信息存儲在ActionMapping中,ActionServelt將ActionMapping傳送到Action類的execute()方法,Action將使用ActionMapping的findForward()方法,此方法返回一個指定名稱的ActionForward,這樣Action就完成了本地轉發(fā)。若沒有找到具體的ActionForward,就返回一個null.
    ActionMapping的方法:
    public ExceptionConfig findException(Class type) ,查找異常對象
    public ActionForward findForward(String name) 可在映射中動態(tài)添加ActionForward:
    public String[] findForwards()找到一個Action可以使用的actionForward列表
    public ActionForward getInputForward() ?得到本action的輸入ActionForard.
    ActionMapping繼承于org.apache.struts.config.ActionConfig

    Action類
    Action類真正實現(xiàn)應用程序的事務邏輯,它們負責處理請求。在收到請求后,ActionServlet會:
    1.為這個請求選擇適當?shù)腁ction
    2.如果需要,創(chuàng)建Action的一個實例
    3.調用Action的execute()方法
    如果ActionServlet不能找到有效的映射,它會調用默認的Action類(在配置文件中定義)。如果找到了ActionServlet將適當?shù)腁ctionMapping類轉發(fā)給Action,這個Action使用ActionMapping找到本地轉發(fā),然后獲得并設置ActionMapping屬性。根據(jù)servlet的環(huán)境和被覆蓋的execute ()方法的簽名,ActionServlet也會傳送ServletRequest對象或HttpServletRequest對象。
    所有Action類都擴展org.apache.struts.action.Action類,并且覆蓋類中定義的某一個execute ()方法。有兩個execute ()方法:
    處理非HTTP(一般的)請求:
    public ActionForward execute (ActionMapping action,
    Acionform form,
    ServletRequest request,
    ServletResponse response)
    ? ?throws java.lang.Exception
    處理HTTP請求:
    public ActionForward execute (ActionMapping action,
    Acionform form,
    HttpServletRequest request,
    HttpServletResponse response)
    ? ?throws java.lang.Exception
    Action類必須以”線程安全”的方式進行編程,因為控制器會令多個同時發(fā)生的請求共享同一個實例,相應的,在設計Action類時就需要注意以下幾點:
    不能使用實例或靜態(tài)變量存儲特定請求的狀態(tài)信息,它們會在同一個操作中共享跨越請求的全局資源
    如果要訪問的資源(如JavaBeans和會話變量)在并行訪問時需要進行保護,那么訪問就要進行同步
    Action類的方法
    除了execute ()方法外,還有以下方法:
    可以獲得或設置與請求相關聯(lián)的區(qū)域:
    public Locale getLocale(HttpServletRequest request)
    public void setLocale(HttpServletRequest request,Locale locale)
    為應用程序獲得消息資源:
    protected MessageResources getResources(HttpServletRequest request)
    protected MessageResources getResources(HttpServletRequest request,String key)
    檢查用戶是否點擊表單上的”取消”鍵,如果是,將返回true:
    public Boolean isCancelled(HttpServletRequest request)
    當應用程序發(fā)生錯誤時,Action類能夠使用下面方法存儲錯誤信息:
    public void saveErrors(HttpServletRequest request,ActionErrors errors)
    public void saveMessages(HttpServletRequest request,ActionMessages messages)
    ActionError實例被用來存儲錯誤信息,這個方法在錯誤關鍵字下的請求屬性列表中存儲ActionError對象。通過使用在struts標記庫中定義的自定義標記,JSP頁能夠顯示這些錯誤信息。ActionMessages 用來存儲一些提示信息,不是錯誤,在jsp頁面可以使用標記現(xiàn)實這些提示信息。
    請求有效性處理,使用令牌可以有效的防止重復提交。
    protected String generateToken(HttpServletRequest request) 創(chuàng)建一個令牌.
    protected boolean isTokenValid(HttpServletRequest request) 檢查令牌是否有效
    protected boolean isTokenValid(HttpServletRequest request,Boolean reset) 檢查令牌是否有效,并且重置令牌(如果reset 是true)
    protected void resetToken(HttpServletRequest request) 重置令牌
    protected void saveToken(HttpServletRequest request) 添加令牌
    獲取數(shù)據(jù)庫連接
    protected DataSource getDataSource(HttpServletRequest request)
    protected DataSource getDataSource(HttpServletRequest request, String key)
    其他的
    ActionServlet getServlet() ?可以獲得本action的配置信息.

    DispatchAction類
    DispatchAction是Action的子類,主要功能可以實現(xiàn),動態(tài)的方法調用。例如action中有一個方法update(ActionMapping mapping, Actionform form, HttpServletRequest request, HttpServletResponse response), 可以通過 saveSubscription.do?method=update來調用update方法。這個類不需要我們實現(xiàn)其他方法,我們只要實現(xiàn) XXX(ActionMapping mapping, Actionform form, HttpServletRequest request, HttpServletResponse response)就可以了。
    在http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=1166&show=150和
    http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=1129有對DispatchAction和LookupDispatchAction的詳細介紹

    SwitchAction類
    SwitchAction是Action的子類,主要功能是將請求在不同的模塊之間轉發(fā)。對于大的項目很有用。具體看http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=1029&show=0

    Actionform類
    假設用戶在應用程序中為每個表單都創(chuàng)建了一個Actionform bean,對于每個在struts-config.xml文件中定義的bean,框架在調用Action類的execute()方法之前會進行以下操作:
    在相關聯(lián)的關鍵字下,它檢查用于適當類的bean實例的用戶會話(或請求),如果在會話(或請求)中沒有可用的bean,它就會自動創(chuàng)建一個新的bean并添加到用戶的會話(或請求)中。至于是在會話還是請求取決于struts-config.xml 中Action 的scope屬性。在創(chuàng)建Actionform的時候,系統(tǒng)會將請求中的值,進行相應的類型轉換以后對Actionform進行初始化。
    對于請求中每個與bean屬性名稱對應的參數(shù),Action調用相應的設置方法。
    當Action execute()被調用時,最新的Actionform bean傳送給它,參數(shù)值就可以立即使用了。
    Actionform類擴展org.apache.struts.action.Actionform類,程序開發(fā)人員創(chuàng)建的bean能夠包含額外的屬性,而且ActionServlet可能使用反射(允許從已加載的對象中回收信息)訪問它。
    Actionform類提供了另一種處理錯誤的手段,提供兩個方法:
    Public ActionErrors validate(ActionMappin mapping, ServletRequest request)
    Public ActionErrors validate(ActionMappin mapping, HttpServletRequest request)
    你應該在自己的bean里覆蓋validate()方法,并在配置文件里設置<action>元素的validate為true。在ActionServlet調用Action類前,它會調用validate(),如果返回的ActionErrors不是null,則Actinform會根據(jù)錯誤關鍵字將ActionErrors存儲在請求屬性列表中。
    如果返回的不是null,而且長度大于0,則根據(jù)錯誤關鍵字將實例存儲在請求的屬性列表中,然后ActionServlet將響應轉發(fā)到配置文件<action>元素的input屬性所指向的目標。
    如果需要執(zhí)行特定的數(shù)據(jù)有效性檢查,最好在Action類中進行這個操作,而不是在Actionform類中進行。
    方法reset()可將bean的屬性恢復到默認值:
    public void reset(ActionMapping mapping,HttpServletRequest request)
    public void reset(ActionMapping mapping,ServletRequest request)
    典型的ActionFrom bean只有屬性的設置與讀取方法(getXXX),而沒有實現(xiàn)事務邏輯的方法。只有簡單的輸入檢查邏輯,使用的目的是為了存儲用戶在相關表單中輸入的最新數(shù)據(jù),以便可以將同一網(wǎng)頁進行再生,同時提供一組錯誤信息,這樣就可以讓用戶修改不正確的輸入數(shù)據(jù)。而真正對數(shù)據(jù)有效性進行檢查的是Action類或適當?shù)氖聞者壿媌ean。
    Actionform中屬性允許的類型boolean,byte,short,char,int,long,float,double,Boolean,Btye,Short, Character,Integer,Long,Float,Double,String,Date,Time,Timestamp,Object,以及以上類型的數(shù)組。
    如果Actionform bean 的屬性是一個數(shù)組則相應的設置和讀取方法要做部分修改。對于數(shù)組setXXX(…),和getXXX()在jsp頁面中意義不大。應該將添加setXXX( int index , …. ) 方法和getXXX ( int index )方法。這兩個方法對于jsp頁面來說更有意義。jsp中的property應該是XXX[0]。
    如果Actionform bean的屬性是一個 Map則應該提供方法setXXX( String key , … )和getXXX(String key),使得jsp頁面可以訪問Map屬性。jsp中的properry應該是XXX(keyname)。
    通過getXXX(int index),setXXX (int index,…),getXXX(String key),setXXX(String key,…)可以方便的實現(xiàn)重復html輸入框。
    例如:
    public class Fooform extends Actionform {
    ? ?private String yourName;
    ? ?public String getYourName() {
    ? ? ? ?return yourName;
    ? ?}
    ? ?public void setYourName(String yourName) {
    ? ? ? ?this.yourName = yourName;
    ? ?}
    ? ?private final Map values = new HashMap();
    ? ?public void setvalue(String key, Object value) {
    ? ? ? ?values.put(key, value);
    ? ?}
    ? ?public Object getvalue(String key) {
    ? ? ? ?if ( values.containsKey(key)){
    ? ? ? ? ? ?return values.get(key);
    ? ? ? ?}else{
    ? ? ? ? ? ?return "";
    ? ? ? ?}
    ? ?}
    ? ?…
    }


    Validatorform類
    org.apache.struts.validator.Validatorform類繼承了Actionform類。使用本類可以方便的實現(xiàn)表單參數(shù)的校驗。在校驗的時候,使用在struts-config.xml中action元素中的name屬性,確定要在validation.xml中取得校驗規(guī)則的依據(jù)。
    使用本類可以方便的解決同一個form在不同的Action中使用不同的校驗規(guī)則的問題。在繼承了Validatorform的類中不再需要我們去寫validate方法。而是由Validatorform中的validate方法通過讀取validation.xml中的描述信息來進行數(shù)據(jù)的校驗。使用Validatorform也可以方便的實現(xiàn)在瀏覽器端實現(xiàn)利用腳本的校驗。
    Validatorform中的新增加的方法:
    int getPage()
    java.util.Map getResultvalueMap()
    ValidatorResults getValidatorResults()
    void setPage(int page)
    void setValidatorResults()
    使用本類可以大大提高我們的編程效率。
    ValidatorActionform類
    org.apache.struts.validator.ValidatorActionform類繼承了Validatorform類。使用本類可以方便的實現(xiàn)表單參數(shù)的校驗。在校驗的時候,使用在struts-config.xml中action元素中的path屬性,確定要在validation.xml中取得校驗規(guī)則的依據(jù)。

    DynaActionform類
    org.apache.struts.action.DynaActionform類繼承了Actionform類。使用本類可以方便的實現(xiàn)動態(tài)表單。創(chuàng)建不確定的表單,如果jsp發(fā)生了變化只需要修改jsp頁面和struts-config.xml文件中的form-bean元素就可以了。我們的程序中完全可以不用手工書寫actionform的類了。
    DynaActionform中的方法:
    boolean contains(String name, String key) 檢測name(key)在actionform中是否存在。
    Object get(String name) 從actionform中取得name的值。
    Object get(String name,int index) 從actionform中取得 name對象的index個值。
    Object get(String name,String key)從actionform中取得name對象的key對應的值。
    Map getMap() 返回對象中包含的對象屬性名列表。
    void remove(String name, String key) 刪除一個元素。
    void set(String name, int index,Object value) 對actionform中的屬性進行賦值。
    void set(String name,Object value)
    void set(String name, Strign key ,Object value)

    DynaValidatorform類
    org.apache.struts.validator.DynaValidatorform類繼承了DynaActionform類。使用本類可以方便的實現(xiàn)表單參數(shù)的校驗。在校驗的時候,使用在struts-config.xml中action元素中的name屬性,確定要在validation.xml中取得校驗規(guī)則的依據(jù)。
    至于校驗,同Validatorform。
    DynaValidatorform中的新增加的方法:
    int getPage()
    java.util.Map getResultvalueMap()
    ValidatorResults getValidatorResults()
    void setPage(int page)
    void setValidatorResults()

    DynaValidatorActionform類
    org.apache.struts.validator.DynaValidatorActionform類繼承了DynaValidatorform類。使用本類可以方便的實現(xiàn)表單參數(shù)的校驗。在校驗的時候,使用在struts-config.xml中action元素中的path屬性,確定要在validation.xml中取得校驗規(guī)則的依據(jù)。
    至于校驗,同Validatorform。

    ActionForward類
    ActionForward類繼承了org.apache.struts.config.ForwardConfig。
    ForwardConfig的方法:
    String getName() 虛名字
    String getPath() 實際路徑
    boolean getRedirect() 是否重定向
    void setName(String name)
    void setPath(String path)
    void setRedirect(boolean redirect)

    ActionForward目的是控制器將Action類的處理結果轉發(fā)至目的地。
    Action類獲得ActionForward實例的句柄,然后可用兩種方法返回到ActionServlet,
    ActionMapping實例被傳送到execute()方法,使用actionMapping的findForward(String name)根據(jù)名稱獲取一個全局轉發(fā)或本地轉發(fā)。
    另一種是調用下面的一個構造器來創(chuàng)建它們自己的一個實例:
    public ActionForward()
    public ActionForward(String path)
    public ActionForward(String path,Boolean redirect)
    public ActionForward(String name,String path,Boolean redirect)
    public ActionForward(String name,String path,Boolean redirect, boolean contextRelative)
    或下面的構造方法(下面是ActionForward的子類)
    ForwardingActionForward()
    ForwardingActionForward(String path) ?
    RedirectingActionForward()
    RedirectingActionForward(String path

    posted on 2006-06-02 18:14 MyJavaWorld 閱讀(834) 評論(2)  編輯  收藏

    評論:
    # re: struts 中常用得幾個類 2006-06-02 22:42 | littlebat
    歡迎交流struts  回復  更多評論
      
    # re: struts 中常用得幾個類 2006-06-04 12:42 | 藍色Saga
    挺詳細的呀  回復  更多評論
      

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲成人动漫在线| 色费女人18女人毛片免费视频| 亚洲成a人片在线播放| 色se01短视频永久免费| 曰批免费视频播放在线看片二| 亚洲制服丝袜中文字幕| 亚洲欧洲免费视频| 91麻豆精品国产自产在线观看亚洲| 暖暖免费高清日本一区二区三区| 99re这里有免费视频精品 | 最近免费中文字幕mv在线电影 | 精品国产免费一区二区| 亚洲网站免费观看| 国产在线精品免费aaa片| 日产久久强奸免费的看| 色偷偷亚洲第一综合网| 亚洲男人天堂2018av| 亚洲欧洲另类春色校园小说| 久久亚洲AV午夜福利精品一区| 亚洲综合最新无码专区| 亚洲国产午夜福利在线播放| 国产成人免费手机在线观看视频 | 亚洲最大福利视频网站| 色噜噜AV亚洲色一区二区| 亚洲国产主播精品极品网红| 免费一级毛片一级毛片aa| 国产小视频免费观看| 日韩免费视频在线观看| 天天摸夜夜摸成人免费视频| 无码国产精品久久一区免费| 91在线视频免费播放| 无码永久免费AV网站| 性感美女视频免费网站午夜| 成人啪精品视频免费网站| 精品熟女少妇AV免费观看| 久久综合AV免费观看| 精品免费国产一区二区三区| 国产免费卡一卡三卡乱码| 免费人成网站在线高清| 国产精品亚洲αv天堂无码| 亚洲精品无码午夜福利中文字幕 |