有些时候,我们有某些业务,或者某些设置是需要在项目启动的时候要进行初始化,比如,自动SQL执行、初始化fastJSON序列化过滤器,初始化系统权限等等,还有在系统销毁的时候执行某些业务,这个时候就需要了解一下GenericServlet这个类的init方法和destory方法;
了解一下这个类,这个类是一个抽象类,要想对这个类进行扩展就需要实现这个类的所有抽象方法,看看这个类的方法:
destory()方法作用与Servlet.destory()方法相同,略。
getInitParameter()方法概述:public java.lang.String getInitParameter(java.lang.String name)
返回一个包含初始化变量的值的字符串,如果变量不存在则返回null,该方法从servlet的ServletConfig变量获得命名变量的值。
getInitParameterNames()方法概述:public java.util.Enumeration getInitParameterNames()
该方法返回一个包含所有初始化变量的枚举函数。如果没有初始化变量,则返回一个空枚举函数。
getServletConfig()方法概述:public ServletConfig getServletConfig()
返回一个servlet的ServletConfig对象getServletContext()方法与ServletConfig.getServletContext()相同,略。
getServletInfo()方法概述:public java.lang.String getServletInfo()
该方法来源于Servlet接口,覆写该方法以产生有意义的信息。(如:版本号、版权、作者等)
init(ServletConfig config)方法概述:public void init(ServletConfig config) throws ServletException
该方法来源于Servlet接口,覆写该方法,必须调用super.init(config)
init()方法概述:public void init() throws ServletException
该方法重载Servlet.init(ServletConfig config)方法而无需调用super.init(config)。而ServletConfig对象依然可以通过调用getServletConfig()方法获得。
log(java.lang.String msg)方法概述:public void log(java.lang.String msg)
该方法把指定的信息写入一个日志文件,见ServletContext.log(String)。
log(java.lang.String message,java.lang.Throwable t)方法概述:public void log(java.lang.String message,java.lang.Throwable t)
该方法把解释性的内容和抛出的例外信息写入一个日志文件。
service()方法概述:public abstract void service(ServletRequest req,ServletResponse res)
throws ServletException,java.io.IOException
该方法必须由servlet容器调用以允许servlet 对请求作出响应。
见Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)。
getServletName(),见ServletConfig.getServletName()。
详细的就不进行赘述了,现在说说这个扩展,因为我这边目前只想扩展init(ServletConfig config)和destory()方法,并不想扩展其他的方法,所有我这里选择继承HttpServlet这个类,
它是GenericServlet的子类,也是一个抽象类,但是它基本上已经实现了GenericServlet的抽象方法,我们可以只实现init方法和destory方法就行了,
看一下代码:
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 所有初始化工作
* @author Run the ant
* @date 2018-08-17
* @version 1.0
*/
public class InitServlet extends HttpServlet {
private static final long serialVersionUID = 3117103275293498582L;
private Logger logger = LoggerFactory.getLogger(InitServlet.class);
public void init(ServletConfig config) throws ServletException {
logger.info("InitServlet init start");
long start = System.currentTimeMillis();
//在这里进行所有的初始化工作!!!
//下面这行不要忘了,执行这行才能生效!!!
super.init(config);
logger.info("InitServlet init completed in {}ms",(System.currentTimeMillis()-start));
}
public void destroy() {
logger.info("InitServlet destroy.....");
//在这里进行所有的销毁工作!!!
super.destroy();
}
}
好啦好啦!~~~~~ OK啦,
下篇文章讲一下,如何在初始化方法中,初始化Spring的WebApplicationContext容器。。。