現在我們結合DBConnetionManager和DBConnectionPool類來講解servlet中連接池的使用:
一、首先簡單介紹一下Servlet的生命周期:
Servlet API定義的servlet生命周期如下:
1、 Servlet 被創建然後初始化(init()方法)。
2、 為0個或多個客戶調用提供服務(service()方法)。
3、 Servlet被銷毀,內存被回收(destroy()方法)。
二、servlet中使用連接池的實例
使用連接池的servlet有三個階段的典型表現是:
1. 在init()中,調用DBConnectionManager.getInstance()然後將返回的引用保存在實例變量中。
2. 在sevice()中,調用getConnection(),執行一系列數據庫操作,然後調用freeConnection()歸還連接。
3. 在destroy()中,調用release()來釋放所有的資源,並關閉所有的連接。
下面的例子演示如何使用連接池。
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet extends HttpServlet {
private DBConnectionManager connMgr;
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
connMgr = DBConnectionManager.getInstance();
}
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
Connection con = connMgr.getConnection("idb");
if (con == null) {
out.println("Cant get connection");
return;
}
ResultSet rs = null;
ResultSetMetaData md = null;
Statement stmt = null;
try {
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
md = rs.getMetaData();
out.println(" Employee data");
while (rs.next()) {
out.println("
");
for (int i = 1; i < md.getColumnCount(); i++) {
out.print(rs.getString(i) + ", ");
}
}
stmt.close();
rs.close();
}
catch (SQLException e) {
e.printStackTrace(out);
}
connMgr.freeConnection("idb", con);
}
public void destroy() {
connMgr.release();
super.destroy();
}
}