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

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

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

    posts - 431,  comments - 344,  trackbacks - 0

    問題

    在應用啟動時需要裝入應用初始化數據到context 中。

    動作要領

    創建一個類,實現org.apache.struts.action.PlugIn接口,并且在struts-config.xml文件中指定plug-in元素。下面的XML 片斷展示了一個plug-in 聲明以及一個嵌套的set-property元素來設置定制屬性:

     

    <plug-in className="com.oreilly.strutsckbk.CustomPlugin" >

      
    <set-property property="customData"

                       value
    ="Hello from the plugin"/>

    </plug-in>

     

    動作變化

    Struts提供了一個PlugIn接口,你可以用它來創建在應用啟動時初始化的定制服務。PlugIn接口的Java源代碼示于Example 2-1. (為了清晰起見,去除了JavaDoc 文檔)

    Example 2-1. Struts PlugIn 接口

     

    package org.apache.struts.action;

    import javax.servlet.ServletException;
    import org.apache.struts.config.ModuleConfig;

    public interface PlugIn {

        
    public void destroy( );

        
    public void init(ActionServlet servlet, ModuleConfig config)
            throws ServletException;
    }

     

    為了實現一個plug-in,只需要實現這個接口并且在struts-config.xml文件中聲明這個plug-in 實現。有兩個方法必須被實現:即init()和destroy( ), 它們在插件的生命周期中被調用。Struts 在啟動ActionServlet時實例化plug-in 之后調用init( )。Struts則在ActionServlet被銷毀時調用destroy()方法,通常是在一個用服務器停止時。首先,這個 plug-in 特征似乎是很單純和有限的。然而,通過使用Struts的另外一個特征,即set-property元素,你可以將特殊的信息傳遞到plug-in中。這種能力增強了這些類的靈活性。

    set-property元素被幾乎所有定義Struts實體的元素所支持,比如form-bean, action-mapping, action, 以及plug-in。set-property元素有兩個屬性:namevalueStruts調用name屬性的值指定的property的setter方法,將property設置為value屬性的字符串值。

    對給定plug-in的所有set-property元素都將在調用plug-in的init( )方法之前進行處理。這允許plug-in 在init( )方法中使用屬性的值。

    如果對一個plug-in使用多個set-property元素, Struts不能保證它們被調用的順序。每個setter方法都應該獨立于其他任何方法。

     

    Struts 將對ActionServlet和plug-in的ModuleConfig的引用作為引數傳遞給init( )方法。ActionServlet允許訪問ServletContext來進行應用范圍的對象存儲。ActionServlet還可以允許你訪問更多高級的容器管理的J2EE 組件,比如數據源和消息隊列。ModuleConfig允許你訪問定義plug-in 的模塊的Struts配置。

    每個Struts 應用至少有一個模塊:默認模塊。如果你不熟悉模塊,我們將在第2.5式中講解之。

    為了更具體一些,請考慮一個簡單的,但仍然相關的例子。你需要定義一個plug-in,它可以使你決定應用何時啟動,以及它啟動和運行了多長時間。你可以使用下面所示的類跟蹤和報告你的應用的運行時間。

    Example 2-2. Application uptime tracker 對象

     

    package com.oreilly.strutsckbk;

    import java.util.Date;

    public class TimeTracker {

      
    private long startUpTimeMillis;
      
    private Date startedOn;

      
    public TimeTracker( ) {
         startUpTimeMillis 
    = System.currentTimeMillis( );
         startedOn 
    = new Date( );
       }


      
    public long getUptime( ) {
        
    return System.currentTimeMillis( ) - startUpTimeMillis;
      }


      
    public Date getStartedOn( ) {
        
    return startedOn;
      }

    }

     

    創建一個PlugIn接口的實現,比如Example 2-3所示,它實例化了TimeTracker。plug-in 通過plug-in 屬性的值將TimeTracker實例保存在ServletContext中。你可以使用這個值來從Servlet上下文中獲取TimeTracker實例。雖然這個值是硬編碼的,使用屬性也提供了更大的靈活性。

    Example 2-3. Time tracker plugin

     

    package com.oreilly.strutsckbk;

    import javax.servlet.ServletException;

    import org.apache.struts.action.ActionServlet;
    import org.apache.struts.action.PlugIn;
    import org.apache.struts.config.ModuleConfig;

    public class TimeTrackerPlugin implements PlugIn {

        
    private String contextKey;
       
       
    public void setContextKey(String key) {
           
    this.contextKey = key;
       }

       
       
    public void init(ActionServlet servlet, ModuleConfig conf)
             throws ServletException 
    {
          servlet.getServletContext( ).setAttribute(contextKey, 
    new TimeTracker( ));
       }


       
    public void destroy( ) {
        }

    }

     

    現在你已經有了為plug-in 創建的類,你可以通過在struts-config.xml中加入plug-in元素來將其集成到Struts 應用中。

     

    <plug-in className="com.oreilly.strutsckbk.TimeTrackerPlugin">
        
    <set-property property="contextKey" value="timeTracker"/>
    </plug-in>

     

    plug-in 在servlet 上下文中存儲了time tracker對象。可以訪問TimeTracker來顯示關于應用啟動運行時間的信息,下面是相關的JSP 片斷:

     

    <h4>Continuously running since 
        
    <bean:write name="timeTracker" 
                property
    ="startedOn" 
                  format
    ="MM/dd/yyyy HH:mm"/> for
        
    <bean:write name="timeTracker" 
                property
    ="uptime"/> milliseconds!
    </h4>

     

    你可以使用一個servlet 來載入像Struts plug-in之類的初始化數據。具有load-on-startup初始化參數的servlet,應將其設置為較低的數值,比如1, 一保證它們在應用啟動時載入。容器在實例化Servlet之后將調用servlet的init( )方法。但是Struts plug-in 方式由多個優點。首先,大多數Struts 應用在其初始化設置后不需要修改web.xml文件。必須在web.xml中聲明額外的Servlet意味著要維護額外的文件。其次,如果需要PlugIn接口提供對特定Struts信息的訪問。最后,因為plug-in 的生命周期緊隨ActionServlet的生命周期,所以可以保證在你的Struts應用所需時數據有效。

    相關招式

    第2.8式展示了set-property元素的另一種用法。Struts 文檔中關于plug-in 的信息可以訪問http://jakarta.apache.org/struts/userGuide/building_controller.html#plugin_classes.

    你也可以使用一個Servlet 上下文listener 來載入初始化數據。

    posted on 2008-03-27 19:56 周銳 閱讀(353) 評論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 久久久久久曰本AV免费免费| a级毛片无码免费真人久久| 97免费人妻在线视频| 亚洲AV乱码一区二区三区林ゆな| 国产免费福利体检区久久| 亚洲精品国产自在久久| a毛片成人免费全部播放| 亚洲av再在线观看| 一边摸一边桶一边脱免费视频| 亚洲国产精品成人AV无码久久综合影院 | 国产又黄又爽又大的免费视频 | 亚洲色偷偷综合亚洲AV伊人蜜桃| 99在线观看视频免费| 久久亚洲精品无码aⅴ大香| 99久久久国产精品免费牛牛| 久久亚洲精品国产精品| 最近高清中文字幕无吗免费看| 久久精品国产亚洲AV蜜臀色欲 | 中文字幕无码一区二区免费| 国产AV无码专区亚洲AV毛网站 | 最近免费中文字幕大全视频| 亚洲AV电影天堂男人的天堂| 亚洲AV无码成人精品区大在线| 国产高潮久久免费观看| 久久精品国产精品亚洲艾草网| 114级毛片免费观看| 亚洲日韩av无码中文| gogo全球高清大胆亚洲| 国产免费爽爽视频在线观看| 亚洲天堂一区在线| 免费的涩涩视频在线播放| 一本一道dvd在线观看免费视频| 亚洲AV日韩AV高潮无码专区| 国产啪精品视频网免费| 深夜福利在线免费观看| 亚洲VA中文字幕无码一二三区| 国产香蕉九九久久精品免费| 51午夜精品免费视频| 亚洲午夜久久久精品电影院| 成人亚洲网站www在线观看| 免费人成黄页在线观看日本|