Struts
框架的一大优势在于它允许开发人员根据实际需要来扩展框架,定制客户化的功能。
Struts1.1
框架提供了动态插入和加载组件的功能,这种组件被称为
Struts
插件。
Struts
插件实际上就是一个
Java
类,它在
Struts
应用启动时
Struts
框架调用每个插件的
init
()方法进行初始化,在插件的初始化阶段可以完成一些初始化的操作,如建立数据库连接,和远程系统建立连接
,
在当前的应用范围内加入插件类自身的实例等。在应用关闭时
Struts
框架会调用每个插件的
destroy()
方法,
destroy()
方法可以用来完成释放资源的任务,如关闭数据库连接,断开与远程的连接等。任何作为插件的
Java
类都应该实现
org.apache.struts.action.PlugIn
接口。
PlugIn
接口包括两个方法
public interface PlugIn {
/**
*
当
struts
应用启动时,下面的方法将被调用执行
*/
public void init(ActionServlet servlet, ApplicationConfig config)
throws ServletException;
/**
*
当
struts
应用关闭时,将调用下面的方法,以释放资源。
*/
public void destroy();
}
现在我们用
PLUGIN
实现日志的创建
<
plug-in
className
=
"net.skycity.search.SearchEnginePlugIn"
>
<!--
日记索引文件存放的目录 -->
<
set-property
property
=
"logIndexPath"
value
=
"/WEB-INF/log_index"
/>
<!--
中文分词器 -->
<
set-property
property
=
"analyzerClass"
value
=
"org.apache.lucene.analysis.standard.StandardAnalyzer"
/>
</
plug-in>
SearchProxyPlugIn.java
package net.skycity.search;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
public class SearchEnginePlugIn implements PlugIn{
private static Analyzer analyzer;//设置lucene要用的切词方法。
protected static ActionServlet servlet = null;
protected static String logIndexPath = "/WEB-INF/log_index";//日志索引文件存放目录
protected String analyzerClass;
protected Logger log = Logger.getLogger(SearchEnginePlugIn.class);
/**
* 初始化
*/
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException{
SearchEnginePlugIn.servlet = servlet;
if(analyzerClass==null)
analyzerClass = StandardAnalyzer.class.getName();
try{
analyzer = (Analyzer)Class.forName(analyzerClass).newInstance();
}catch(Exception e){
servlet.log("Initialize Analyzer Failed.",e);
}
}
/**
* 容器停止时,销毁
*/
public void destroy() {
IndexWriter indexWriter;
try {
indexWriter = getLogIndexWriter();
indexWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 得到日记索引的Writter
* @return
* @throws IOException
*/
protected static IndexWriter getLogIndexWriter() throws IOException{
String logPath = getLogIndexPath();
File rp = new File(logPath);
if(!rp.exists())
rp.mkdirs();
File segments = new File(logPath + File.separator + "segments");
boolean bCreate = !segments.exists();
return new IndexWriter(logPath,analyzer,bCreate);
}
/**
* 得到日记索引所在的绝对路径
* @return
*/
public static String getLogIndexPath() {
if(logIndexPath.toUpperCase().startsWith("/WEB-INF"))
return servlet.getServletContext().getRealPath(logIndexPath);
return logIndexPath;
}
public void setLogIndexPath(String indexPath) {
logIndexPath = indexPath;
}
public static Analyzer getAnalyzer() {
return analyzer;
}
public String getAnalyzerClass() {
return analyzerClass;
}
public void setAnalyzerClass(String analyzerClass) {
this.analyzerClass = analyzerClass;
}
}
Lyyb2001