天天看點

Struts 為什麼使用插件

注:對Struts進行擴充有三種方法(1.修改ActionServlet,2.繼承RequestProcessor.3.做一插件繼承PlugIn)  

問題:有時候你需要在應用程式啟動時裝載一些資料到程式上下文中或執行某些操作。

解決方法:建立一個實作了org.apache.struts.action.PlugIn接口的類檔案并在struts-config.xml中設定plug-in元素。

以下代碼片段顯示了一個plug-in生命聲明和一個自定義的set-property子元素:

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

<set-property property="customData"                   value="Hello from the plugin"/></plug-in>   

細節讨論:Struts提供一個 PlugIn接口能使你在啟動應用程式時為你提供自定義的操作。

其源代碼如下:package org.apache.struts.action; 

import javax.servlet.ServletException;

import org.apache.struts.config.ModuleConfig; 

public interface PlugIn {  void destroy(); void init(ActionServlet servlet, ModuleConfig config) throws ServletException;}要實作一個plug-in,你隻需要實作這個接口并在struts-config.xml檔案的中聲明plug-in元素。子類必須實作方法destroy()和init()。init()在ActionServlet啟動時執行個體化plug-in過程中執行,當ActionServlet結束時執行destroy(),一般情況下是應用程式關閉。通過在plug-in元素中設定set-property元素,可以向PlugIn類傳遞參數。所有set-property元素都在init()方法執行之前被執行,這樣就可以在init()方法中使用這些由set-property設定的參數了。Struts将ActionServlet的引用和ModuleConfig參數傳遞給init()方法。ActionServlet使的init()方法中可以将資料儲存到ServletContext中。ActionServlet還可以使你能夠通路更多的J2EE元件如java sources、message隊列等。ModuleConfig可以讓你通路目前的子產品配置資訊。n   舉例說明:你需要定義一個plug-in記錄應用程式何時運作的及運作了多久。TimeTracker.java:package com.yourcompany.struts.plugin; 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子類TimeTrackerPlugin。

TimeTrackerPlugi将TimeTracker儲存在ServletContext中,鍵名由由plug-in元素的set-propery子元素指定:TimeTrackerPlugin.java:package com.yourcompany.struts.plugin; 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( ) {    }}struts-config.xml:  <plug-in className="com.yourcompany.struts.plugin.TimeTrackerPlugin">    <set-property property="contextKey" value="timeTracker"/>  </plug-in> 你可以使用如下的JSP片段通路TimTracker,并顯示關于應用程式運作時間的資訊。 n   你也可以在web.xml中配置一個Servlet實作plug-in的功能将load-on-startup值設定為一個較低的值如1。他将在應用程式啟動是自動加載并執行。

容器在執行個體化Servlet後将調用此Servlet的init()方法。

比較而言,使用plug-in有更多的優勢:

1.  一般情況下Struts應用程式設定好web.xml後,在開發過程中不許要改動他的内容。在web.xml中增加servlet意味着增加了一個維護對象。

2.  plug-in接口提供了通路struts應用程式特有的資訊的能力。 

plug-in的聲明周期跟ActionSerlvet的生命周期一緻。他可以保證你的struts應用程式需要的資訊可用

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911916.html,如需轉載請自行聯系原作者