监听器_是否启动web容器

在服务器启动前作判断。

 有某些项目当中,可能会出现需要先判断系统数据库或条件是否通过。如果通过就启动web容器,不通过就不启动web容器。

 以下给出解决思想:

首先使用ServletContextListener接口作出判断(ServletContextListener会在容器启动前先执行) 

在ServletContextListner中有两个方法。其中contextDestroyed是在服务器关闭时执行的方法,其中contextInitialized会在服务器启动前执行的方法。

我们可以在contextInitialized中作判断,当需要停止web服务器时。我们可以调用System.exit(1)强制跳出系统停止服务器启动

具体代码

packagecom.im.listener;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

importjavax.servlet.ServletContextEvent;

importjavax.servlet.ServletContextListener;

importorg.apache.commons.logging.Log;

importorg.apache.commons.logging.impl.Log4JLogger;

importorg.apache.log4j.Logger;

importorg.hibernate.util.ConfigHelper;

importcom.im.hibernate.HibernateSessionFactory;

publicclassSystemListenerimplementsServletContextListener{

publicvoidcontextDestroyed(ServletContextEventarg0){

}

publicvoidcontextInitialized(ServletContextEventarg0){

Loggerlogger=Logger.getLogger(SystemListener.class);

logger.info("系统数据库监听中");

Connectionconnection=null;

Stringurl=HibernateSessionFactory.getConfiguration().getProperty("connection.url");

Stringuser=HibernateSessionFactory.getConfiguration().getProperty("connection.username");

Stringpassword=HibernateSessionFactory.getConfiguration().getProperty("connection.password");

StringconnectionClass=HibernateSessionFactory.getConfiguration().getProperty("connection.driver_class");

try{

Class.forName(connectionClass);

connection=DriverManager.getConnection(url,user,password);

logger.info("系统数据库连接成功");

}catch(SQLExceptione){

logger.error("系统数据库连接失败,停止启动服务器");

System.exit(1);

}catch(ClassNotFoundExceptione){

logger.error("找不到系统数据库连接包,停止启动服务器");

System.exit(1);

}finally{

try{

if(connection!=null){

connection.close();

}

}catch(SQLExceptione){

System.exit(1);

}

}

}

}

web.xml配置:

//添加服务器监听

<listener>

<listener-class>CheckDB</listener-class>

</listener>

相关推荐