【发布时间】:2014-02-20 21:25:56
【问题描述】:
我正在尝试在我的应用程序中实现一个功能,例如,在对容器的第一次请求时,如果数据库无法连接,它应该重定向到错误页面而不是显示 index.jsp。
我有一个单例
DBConnectionManager类,它在构造函数中处理数据库连接,也是一个返回连接对象的方法。我有一个 servlet 上下文侦听器。所以当上下文初始化时,它会调用
DBConnectionManager构造函数并初始化数据库连接。我将在我的所有模型 DAO 中检索并使用相同的连接对象。
现在我的问题是如何处理连接错误并将其从DBConnectionManager 或servlet 上下文侦听器重定向到error.jsp 页面。我应该在哪里放置重定向条件。
供参考: DBConnectionManager.java=>
public DBConnectionManager(String url,String user,String pass)
{
//constructor called by servlet context listener.
this.DBURL=url;
this.user=user;
this.pass=pass;
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException e) {
log.info("Class Not Found :"+e);
return;
}
try {
log.info("-------url recieved :"+url);
log.info("-------username received :"+user);
log.info("--------password received :"+pass);
con = DriverManager.getConnection(url,user,pass);
log.info("con initialised..");
}
catch (SQLException e) {
//Exception caught here successfully.
log.info("Problem in connecting :"+e);
return;
}
if (con != null) {
log.info("Connected Successfully to database");
} else {
log.info("Mysql not connected.:<");
}
public Connection getConnection()
{
//Method called in every DAOmodel to return the instance of the connection object.
//Where DAO uses this connection object to query database.
return this.con;
}
我的 Servlet 上下文监听器来了=>
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext ctx=servletContextEvent.getServletContext();
String url=ctx.getInitParameter("DBURL");
String user=ctx.getInitParameter("DBUSER");
String pass=ctx.getInitParameter("DBPWD");
//Constructor called here
DBConnectionManager dbManager= new DBConnectionManager(url,user,pass);
log.info("printing db manager::"+dbManager);
ctx.setAttribute("DBManager", dbManager);
log.info("dbmanager Initialized");
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
ServletContext ctx=servletContextEvent.getServletContext();
DBConnectionManager dbManager= (DBConnectionManager)ctx.getAttribute("DBManager");
dbManager.closeConnection();
log.info("dbmanager destroyed and database connection closed");
}
如果您对我的问题有任何疑问,希望这可以解决。
【问题讨论】: