有时候在Struts框架在启动的时候就自动做一些初始化工作,
可以有什么方案呢?
1、 传统方法:过滤器(服务器启动的时候自动运行一次init,以后每次提交都运行一次doFilte)
看例子:
创建一个Filter1类:
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter1 implements Filter {
public void init(FilterConfig arg0) throws ServletException {//服务器启动时运行
System.out.println("init");
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,//提交时动行。
FilterChain arg2) throws IOException, ServletException {
System.out.println("doFilter");
arg2.doFilter(arg0, arg1);
}
public void destroy() {
System.out.println("destroy");
}
}
----------------------------------------------------------------------------
再将Filter在WEB.xml中注册。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>filter1</filter-name>
<filter-class>filter.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
-----------------------------------------------------------------------
当启动服务器的时候就会初使化init函数,
可以打印出init
-----------------------------------------------------------------------------
2、 用struts框架可以做到上面的。并且少一个处理函数。
看例:
package 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 Plug implements PlugIn {
public void init(ActionServlet arg0, ModuleConfig arg1)
throws ServletException {
System.out.println("plugin init");
}
public void destroy() {
System.out.println("plugin destroy");
}
}
在stuts-config.xml中注册。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards />
<action-mappings />
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="plugIn.Plug"></plug-in>
</struts-config>
启动服务器时也会打印出:plugin init