1、ServletContext这个类代表的是整个应用,他的监听有两个: 整个应用生命周期的监听,以及属性值变更的监听
2、servletContext 的第一个监听:即生命周期的监听
(1)、实现ServletContextListener这个接口以及未实现方法
(2)、配置这个监听器,配置方式有两种:第一种就是使用javax.servlet.annotation.WebListener 这个类来注释
即:
@WebListener()
public classServletConL implements ServletContextListener{
第二种就是web.xml 中配置监听:
<listener>
<listener-class>soufun.com.ServletConL</listener-class>
</listener>
这样在这个 应用启动或停止的时候都会调用这个类的contextInitialized(ServletContextEvent arg0)方法和contextDestroyed(ServletContextEventarg0)这个方法。通过这个方法的两个参数可以获取ServletContext 对象
(3)、实例:
package soufun.com;
importjava.io.IOException;
importjava.util.logging.Logger;
importjavax.servlet.ServletContext;
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
importjavax.servlet.annotation.WebListener;
/**
*@author WHD
*/
@WebListener()
public classServletConL implements ServletContextListener{
@Override
publicvoid contextDestroyed(ServletContextEvent arg0) {
//TODO Auto-generated method stub
ServletContextcon=arg0.getServletContext();
Strings1=con.getInitParameter("con1");
Strings2=con.getInitParameter("con2");
con.setAttribute("DATA","WHD");
System.out.print(s1+" "+s2);
System.out.println("这个监听器就是这个应用生命周期的监听-结束");
}
@Override
publicvoid contextInitialized(ServletContextEvent arg0) {
LogFactory factory=null;
Loggerlog=null;
try{
factory = new LogFactory();
log=factory.getLog("logs");
}catch (SecurityException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
// 通过servletcontextEvent可以获取 servletcontext 对象
System.out.println("这个监听器就是这个应用生命周期的监听-开始");
log.info("web容器启动,context对象建立");
ServletContextcon=arg0.getServletContext();
log.info("beginget the init param");
Strings1=con.getInitParameter("con1");
Strings2=con.getInitParameter("con2");
System.out.print(s1+" "+s2);
//TODO Auto-generated method stub
log.info("beginset attribute in context");
con.setAttribute("DATA","WHD");
}
}
************** 日志文件****************
package soufun.com;
/**
*@author WHD
*data 2015年8月4日
*/
importjava.util.Date;
importjava.util.logging.*;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
public classLogFactory {
// 在web容器启动的时候就创建日志
private Logger log;
SimpleDateFormats= new SimpleDateFormat("yyyy-MM-dd");
Stringdata=s.format(new Date());
publicLogFactory(){}
publicLogFactory(String name) throws SecurityException, IOException{
log=Logger.getLogger(name+data+".log");
// 设置日志级别
log.setLevel(Level.INFO);
FileHandlerfhandler= new FileHandler("G:/test.log");
log.addHandler(fhandler);
}
public Logger getLog(String name) throwsSecurityException, IOException{
if(null==log){
log=Logger.getLogger(name+data+".log");
log.setLevel(Level.INFO);
FileHandlerfhandler= new FileHandler("G:/test.log");
fhandler.setLevel(Level.INFO);
fhandler.setFormatter(newmyformat());
log.addHandler(fhandler);
}
returnlog;
}
}
class myformatextends Formatter{
@Override
publicString format(LogRecord record) {
//TODO Auto-generated method stub
return "级别"+record.getLevel()+" 信息"+record.getMessage()+"\n";
}
}
3、servletContext 的第二个监听:也就是属性变化的监听,当servletContext 中添加属性,替换属性或移除属性的时候会触发这个监听器
(1)、实现ServletContextAttributeListener 这个接口以及未实现的接口的方法
(2)、同上面一样配置监听有两种方式:第一种 使用javax.servlet.annotation.WebListener 这个类来注释:
@WebListener()
public classServletConAL implementsServletContextAttributeListener {
第二种方式就是使用web.xml 配置
<listener>
<listener-class>soufun.com.ServletConAL</listener-class>
</listener>
(3)、实例:
package soufun.com;
importjavax.servlet.ServletContextAttributeEvent;
importjavax.servlet.ServletContextAttributeListener;
importjavax.servlet.annotation.WebListener;
/**
*@author WHD
*/
public classServletConAL implementsServletContextAttributeListener {
@Override
publicvoid attributeAdded(ServletContextAttributeEvent arg0) {
Stringdata=String.valueOf(arg0.getServletContext().getAttribute("DATA"));
// 修改servletcontext属性的值来替换原有属性的值
arg0.getServletContext().setAttribute("DATA","whd");
// 删除这个属性值,触发下面的值
arg0.getServletContext().removeAttribute("DATA");
}
@Override
publicvoid attributeRemoved(ServletContextAttributeEvent arg0) {
//TODO Auto-generated method stub
System.out.println("context删除了属性");
}
@Override
publicvoid attributeReplaced(ServletContextAttributeEvent arg0) {
//TODO Auto-generated method stub
System.out.println("修改原来的值,触发这个函数");
}
}