当我们做一个java项目时,有几个功能都需要加载servlet或者实现某个共同的方法,虽然我们一味地在每一个功能中依次加载也不是不可以,但是当某个servlet 或者方法被频繁地加载和应用,我们将面向对象的思想置于不顾却也真的说不过去。
所以,对于这类的servlet我们需要在Tomcat启动时直接加载,比如初始化信息、读取配置文件等需求时,我们就可以通过web.xml的配置文件对来实现这个需求:
首先,AbstractItemServlet 类中封装了对应的Init方法:
<span style="font-family:FangSong_GB2312;font-size:18px;">package com.bjpowernode.drp.util.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import com.bjpowernode.drp.util.BeanFactory;
/**
*
* 负责系统在server启动时初始化
* @author chao
*
*/
public class InitServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("创建BeanFactory。。。。。");
//将抽象工厂放到servletContext中
BeanFactory beanFactory = BeanFactory.getInstance();
this.getServletContext().setAttribute("beanFactory", beanFactory);
}
}</span>
其次,在项目的配置文件web.xml(路径为:/WebRoot/WEB-INF/web.xml)中对抽象出来的servlet进行配置:
<span style="font-family:FangSong_GB2312;font-size:18px;"> <!-- 设置tomcat一启动就执行InniServlet -->
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.bjpowernode.drp.util.servlet.InitServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet></span>
这样就可以实现在Tomcat启动时调用com.bjpowernode.drp.util.servlet.InitServlet的init()方法。
其中,<load-on-startup>N</load-on-startup> 的含义是:标记容器是否在启动的时候就加载这个servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。
有了这个方法,我们既可以省去每次调用该方法的执行时间和占用空间,又可以完美地实现面向对象的思想。那我们又何乐而不为呢?