There is a way to handle events related to the initialization and destruction of JSP pages. The initialization event occurs the first time the JSP container receives a request for a JSP page. The destruction event occurs when the JSP container unloads the servlet class by any reason. These events are handled by declaring special life-cycle methods that will automatically be called by the JSP container when the corresponding event occurs.

...

<%! 
  static private DbConnectionPool pool = null;

////////////// The initialization event is handled by jspInit():

  public void jspInit () {
    // Initialization code goes here...
    if (pool == null) {
      String username = "...";
      String password = "...";
      pool = DbConnectionPool.getPool(this, username, password);
    }
  

////////////// ... and the destruction event is handled by jspDestroy()

  public void jspDestroy () {
    // Destruction code goes here...
    pool.maybeReclaim(this);
  
%>

...