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