package docen_servlet01; import javax.servlet.ServletException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServlet; import java.io.PrintWriter; import java.io.IOException; import java.sql.*; /************************************************************************* * EJEMPLO DE SERVLET QUE SE CONECTA A BD * 1. En init() se intenta cargar driver. * 2. En doPost() intenta conexión a BD y nos muestra si ha tenido éxito. * La base de datos, login y pwd se obtienen de parámetros del Form * Al final de doPost() cierra la conexión. * Utiliza la clase Propiedades para saber driver y host sobre el que trabaja. * Dicha clase obtiene esta información de archivo de properties. **************************************************************************/ public class Conexion extends HttpServlet { private Connection con = null; // Conexion private boolean driver = false; // true si se ha cargado driver en init() private Propiedades acceso; // Clase para saber driver, host, etc. /************************************************************************ Al inicializarse el servlet se carga el driver. Para lo cual uso el contexto **************************************************************************/ public void init(ServletConfig config) throws ServletException { super.init(config); try { ServletContext sc = config.getServletContext(); // Obtengo contexto del servlet //// El path donde está el archivo de propiedades es 'contexto/propiedades/paquete/' //// sc.RealPath("/") me da el path del contexto de aplicación acceso = new Propiedades( sc.getRealPath("/")+"propiedades/" + getClass().getPackage().getName()+"/"); //// Si no hay problema con el archivo de propiedades, cargo el driver if ( acceso.mensajeError == null ) { Class.forName(acceso.getDriver()); driver = true; } } catch (ClassNotFoundException e) { driver = false; } } /***************************************************************** * Procesar una petición HTTP con el método POST. Intenta conexión *****************************************************************/ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=iso-8859-1"); // Definir tipo de salida PrintWriter out = response.getWriter(); // Obtener flujo salida try { //// Imprimir inicio página out.println(""); out.println("Servlet de conexión"); out.println(""); out.println("

Servlet de conexión parametrizada


"); //// Si hay un error con el archivo de propiedades, muestro mensaje de error if ( acceso.mensajeError != null ) out.println( acceso.mensajeError ); //// Si no se ha cargado el driver: avisamos, terminamos página y salimos if ( !driver ) { out.println("
No se ha cargado el driver."); terminarPagina( out ); return; } out.println("
Driver cargado."); //// Intento de conexión: la base de datos, login y pwd son parámetros del FORM con = DriverManager.getConnection( acceso.getHost() + request.getParameter("base"), request.getParameter("login"), request.getParameter("password")); out.println("
Conexión realizada a " + acceso.getHost() + request.getParameter("base") + ", LOGIN:" + request.getParameter("login")); } catch (SQLException e) { out.println("
Error. No hay conexión a la base de datos. " + e.getMessage() + ""); } catch (Exception e) { out.println("
Error. Excepción general. " + e.getMessage() + ""); } //// Terminar página y cerrar conexión finally { if ( cerrarConexion() ) out.println( "
Cerrada la conexión."); else out.println( "
Error en cierre de conexión."); terminarPagina( out ); } } /***************************************************************** * Procesar una petición HTTP con el método GET. Reenvia a doPost *****************************************************************/ public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /*********************************************************************** * Terminar página **********************************************************************/ void terminarPagina( PrintWriter out ) { out.println("
"); out.close(); } /************************************************************************ Cerrar la conexión a base de datos **************************************************************************/ boolean cerrarConexion() { try { if ( con != null ) { if (!con.isClosed()) con.close(); } return true; } catch (SQLException e) { return false; } } }