struts插件plug-in元素的作用
有时候你需要在应用程序启动时装载一些数据到程序上下文中或执行某些操作。
创建一个实现了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可以让你访问当前的模块配置信息。
你需要定义一个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,并显示关于应用程序运行时间的信息。
?
plug-in的声明周期跟ActionSerlvet的生命周期一致。他可以保证你的struts应用程序需要的信息可用。
?