关于struts-config.xml中“plug-in”元素的问题

来源:互联网 发布:ubuntu怎么安装到u盘 编辑:程序博客网 时间:2024/05/22 01:39
问题描述:
< plug - in className = " org.apache.struts.validator.ValidatorPlugIn " >     < set - property property = " pathnames "  value = " /WEB-INF/validator-rules.xml,/WEB-INF/validator/validation.xml "   />     < set - property property = " stopOnFirstError "  value = " true "   />   </ plug - in >其中 < set - property property = " stopOnFirstError "  value = " true "   /> 是什么意思???

再比如:

  < plug - in className = " org.apache.struts.validator.ValidatorPlugIn " >         < set - property property = " pathnames "            value = "  /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml "   />     </ plug - in >     < plug - in        className = " org.springframework.web.struts.ContextLoaderPlugIn " >         < set - property property = " contextConfigLocation "            value = " /WEB-INF/classes/applicationContext.xml "   />     </ 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>

n   细节讨论:

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应用程序需要的信息可用。


原创粉丝点击