方法1:web服务启动时自动加载servlet
就是写一个servlet,在init()方法中写好想要执行的程序,
同时,在web.xml配置文件中指出
<servlet>
<servlet-name>XXXX</servlet-name>
<servlet-class>XXXX</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
其中粗体部分即可实现tomcat启动时执行该servlet,Jboss中同样适用~
load-on-startup的值必须为整数
当load-on-startup值为负整数或者未指定时,容器在该servlet被调用时加载
当其值为0和正整数时,容器启动时加载,值越小,优先级越高
方法2:让服务启动或停止时自动执行代码
原理是使用servlet的监听器,建立一个servlet类并且实现ServletContextListener 接口:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class TestListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
//启动时要自动执行的代码
}
public void contextDestroyed(ServletContextEvent event) {
//停止时要自动执行的代码
}
}
在web.xml中添加一个listener ,以便让该servlet类自动执行,在web.xml中添加如下内容:
< listener >
< listener-class > TestListener </ listener-class >
</ listener >
listener-class里面的内容就是刚才添加的servlet类
3、若用spring框架可以通过init、destory方法
附录:
ServletContext、Session Listener (监听器)
· 标准Servlet
· 过滤器
· 监听器
主要有以下三类:
· ServletContext:Servlet上下文(WEB容器的监听)
· Session:对Session监听(用户会话监听)
· Request监听
在WEB端实现监听 (一系列的监听接口)
1、ServletContextListener:对整个Servlet上下文监听(启动、销毁)
public void contextInitialized(ServletContextEvent sce):上下文初始化
public void contextDestroyed(ServletContextEvent sce):上下文销毁
ServletContextEvent事件:取得一个ServletContext(application)对象
public ServletContext getServletContext()
public void attributeAdded(ServletContextAttributeEvent scab):增加属性(setAttribute)
public void attributeRemoved(ServletContextAttributeEvent scab):属性删除(removeAttribute)
public void attributeReplaced(ServletContextAttributeEvent scab):属性替换(第二次设置同一个属性)
ServletContextAttributeEvent事件:能取得设置属性的名称与内容
public String getName():得到属性名称
public Object getValue():得到属性的值
对session的创建、销毁、属性操作
Session属于http协议下的内容:javax.servlet.http.HttpSessionXxxx
public void sessionCreated(HttpSessionEvent se):session创建
public void sessionDestroyed(HttpSessionEvent se): session销毁
HttpSessionEvent 事件:
public HttpSession getSession();取得当前session
2、HttpSessionAttributeListener: 对session属性监听
public void attributeAdded(HttpSessionBindingEvent se): 增加属性
public void attributeRemoved(HttpSessionBindingEvent se): 属性删除
public void attributeReplaced(HttpSessionBindingEvent se): 属性替换
HttpSessionBindingEvent 事件:
public String getName(); 取得属性名称
public Object getValue();取得属性的值
public HttpSession getSession();取得当前session
//-------------------------------------------------------------------
web.xml 增加-->
<listener>
<listener-class>ServletContextListenerDemo</listener-class>
</listener>
<session-config>
<!-- session 超时分钟值(不是很准确,有误差,TOMCAT v5.0.28 中有延后) -->
<session-timeout>1</session-timeout>
</session-config>
session.invalidate();
session.setAttribute(key, value)中的属性在session.invalidate()和session超时失效时都会由容器自己删除(监听器方法可以监听到)