Servlet: acceso a la base de datos

Los servlets se utilizan principalmente en aplicaciones web dinámicas que proporcionan respuestas dinámicas a las requests de los clientes. En la mayoría de los casos, las aplicaciones web dinámicas acceden a una base de datos para proporcionar los datos solicitados por el cliente. Podemos usar la conexión de base de datos estándar de Java: JDBC en Servlets para realizar operaciones de base de datos. Para comprender este tutorial, debe tener conocimientos básicos sobre cómo funciona la aplicación JDBC. Consulte nuestro tutorial de JDBC para obtener más detalles.

Servlet: conexión a la base de datos

Un servlet puede generar HTML dinámico recuperando datos de la base de datos y enviándolos al cliente como respuesta. También podemos actualizar la base de datos en función de los datos pasados ​​en la solicitud HTTP del cliente. Crearemos un servlet simple para obtener/recuperar datos de la base de datos según la solicitud del cliente. En este ejemplo, usaremos Eclipse IDE y la base de datos PostgreSQL.  

Pasos para la conexión JDBC en Servlets

Instale el controlador JDBC:

Necesitamos instalar el controlador JDBC apropiado en nuestro programa para conectarnos con la base de datos. Como estamos usando la base de datos PostgreSQL, instale el archivo » postgresql.jar » con la última versión del repositorio de Maven. Después de la instalación, coloque su archivo jar en la carpeta » WebContent -> WEB-INF -> lib»

Importar paquetes JDBC:

Para acceder y procesar las operaciones de la base de datos, necesitamos importar todos los paquetes » java.sql » requeridos en el programa.

Java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

Registre el controlador JDBC:

Después de importar todos los paquetes, debemos registrar el controlador JDBC que instalamos en nuestro programa. El registro del controlador le dice a la JVM que cargue el archivo de clase del controlador en la memoria para que podamos implementar las operaciones JDBC. Podemos registrar el controlador usando el método » Class.forName() «:

Clase.forName():

Java

try {
    // Register PostgreSQL Driver
    Class.forName("org.postgresql.Driver");
}
catch (ClassNotFoundException e) {
      System.out.println("Unable to load Driver class");  
      // e.printStackTrace(); OR you
      // can directly print the stack trace
      System.exit(1);
}

Establecer la conexión a la base de datos:

Ahora, necesitamos establecer la conexión a la base de datos usando el método “ DriverManager.getConnection() ”.

Java

String URL = "jdbc:postgresql://localhost/postgres";
String USER = "username";
String PASSWORD = "password";
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

Como puede ver, necesitamos pasar la URL, el nombre de usuario y la contraseña de la base de datos que estamos usando como parámetros para la conexión. 

  • URL: Esta es la dirección de la base de datos que está utilizando. En la URL, debe mencionar » jdbc: base de datos: nombre de host: puerto: nombre de base de datos».
  • Nombre de usuario y contraseña: debe especificar el nombre de usuario/contraseña establecido en su base de datos.

Cree un objeto de declaración JDBC:

Después de una conexión exitosa, prepare el objeto de declaración JDBC usando el objeto Connection.

Java

Statement stmt = conn.createStatement();

Ejecute la consulta SQL:

Construya la consulta SQL basada en la solicitud del cliente y ejecute la consulta utilizando el objeto de declaración.

Java

stmt.executeQuery(sql);

Cerrar la conexión de la base de datos:

Después de procesar las operaciones requeridas, finalmente, cierre todos los objetos de conexión a la base de datos.

Java

stmt.close();
conn.close();

Ejemplo

En este ejemplo, crearemos 

  • Una tabla en PostgreSQL: para obtener los datos de ella
  • Un formulario HTML – para el acceso del cliente
  • Una clase de servlet: para procesar la solicitud del cliente y generar la respuesta.

tabla postgreSQL:

Cree una tabla en la base de datos PostgreSQL e inserte algunos registros como se muestra a continuación.

PostgreSQL - Table

PostgreSQL – Tabla

casa.html:

Java

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Home Page</title>
</head>
<body>
  
    <form action="fetch" method="get">
  
        Fetch Mobile phone details:<input type="submit" value="Search" />
  
    </form>
  
</body>
</html>
  • Cree el archivo » home.html» en » WebContent -> home.html».
  • Este es el archivo de bienvenida, donde el navegador accede a esta página de formulario.
  • Aquí simplemente mostramos un botón de envío para obtener los datos de la base de datos.
  • En la etiqueta del formulario, se menciona la acción » buscar» y el método «obtener» para asignar la URL a una clase de servlet específica cuando se envía el formulario.

FetchServlet.java:

Java

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/fetch")
public class FetchServlet extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
    final String URL = "jdbc:postgresql://localhost/postgres";
    final String USER = "root";
    final String PASSWORD = "root";
    final String DRIVER = "org.postgresql.Driver";
    Connection conn = null;
  
    public void init() throws ServletException {
  
        // Database connection through Driver Manager
        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
  
    }
  
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  
        try {
  
            // Set the response content type and 
            // get the PrintWriter object.
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
  
            // Set up HTML table formatting for the output
            out.println("<html><body>");
            out.println("<h3>Mobile Phone Details</h3>");
            out.println("<table border=1><tr>" + "<td><b>S.No</b></td>" + "<td><b>Brand</b></td>"
                    + "<td><b>Processor</b></td>" + "<td><b>Operating System</b></td>"
                    + "<td><b>Screen Size(inches)</b></td>" + "<td><b>Battery Life(mAh)</b></td></tr>");
  
            // Create JDBC statement object, construct 
            // the SQL query and execute the query.
            Statement stmt = conn.createStatement();
            String sql = "select * from public.mobilePhones;";
            ResultSet rs = stmt.executeQuery(sql);
  
            // Loop through the result set to 
            // retrieve the individual data items.
            while (rs.next()) {
                int sno = rs.getInt("sno");
                String brand = rs.getString("brand");
                String processor = rs.getString("processor");
                float screenSize = rs.getFloat("screensize");
                String osystem = rs.getString("operatingsystem");
                int batteryLife = rs.getInt("batterylife");
  
                out.println("<tr>" + "<td>" + sno + "</td>" + "<td>" + brand + "</td>" + "<td>" + processor + "</td>"
                        + "<td>" + osystem + "</td>" + "<td>" + screenSize + "</td>" + "<td>" + batteryLife
                        + "</td></tr>");
  
            }
            out.println("</table></body></html>");
  
            // Close Result set, Statement
            // and PrintWriter objects.
            rs.close();
            stmt.close();
            out.close();
  
        } catch (SQLException e) {
            e.printStackTrace();
        }
  
    }
  
    public void destroy() {
  
        // Close connection object.
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
  
}
  • Cree » FetchServlet.java » en la carpeta » src» .

en eso():

  • Como sabemos, el contenedor de servlet llama al método Servlet “ init()” solo una vez para inicializar el servlet después de instanciarlo. Solo después de la inicialización exitosa del servlet, puede recibir las requests del cliente. Si el método init()  falla, arroja » ServletException «.
  • Entonces, estamos usando este método init() para registrar el controlador JDBC y establecer una conexión con la base de datos mientras inicializamos la clase de servlet.
  • Mientras registra el controlador JDBC, si no puede cargar la clase, arroja » ClassNotFoundException «.
  • Si falla la conexión a la base de datos, arroja » SQLException «.
  • Por lo tanto, debemos asegurarnos de que estas excepciones verificadas se manejen en nuestro código usando el bloque try/catch.

doGet():

  • Después de la inicialización del servlet, cuando el cliente solicita los datos para obtenerlos de la base de datos, el contenedor del servlet llama al método de servicio respectivo para realizar la operación.
  • Aquí especificamos la URL con la anotación “ @WebServlet(“/fetch”)” en nuestro código. En lugar de usar anotaciones, también puede especificar la asignación de URL en web.xml: descriptor de implementación web.
  • Cuando llega la solicitud, se asigna a la URL especificada en el servlet y ejecuta el método » doGet()» en este servlet, ya que especificamos el método como » get» en el HTML.
  • Como necesitamos generar la respuesta e imprimir los datos obtenidos en ella, configure el tipo de contenido de la respuesta como » texto/html» para especificar qué tipo de datos se enviarán en el objeto de respuesta.
  • Para imprimir los datos en el flujo de salida de texto, usamos el objeto de clase » PrintWriter» usando el método » getWriter()» en el objeto de respuesta.
  • Ahora, necesitamos mostrar los datos en el navegador de una manera comprensible para el usuario y formateada. Por lo tanto, formatee la información usando la etiqueta de la tabla HTML en la salida.
  • Como establecimos la conexión a la base de datos, ahora cree el objeto de declaración.
  • Construya la consulta de selección para obtener los datos de la base de datos y ejecútelos.
  • Almacene el resultado de la consulta ejecutada en un conjunto de resultados para que podamos recuperar esos datos en los elementos de datos individuales en el servlet.
  • Recorra el conjunto de resultados e imprima los datos recuperados en forma formateada en la respuesta.
  • Por último, cierre todas las conexiones a la base de datos para evitar cualquier pérdida de recursos.
  • Al realizar estas operaciones de la base de datos, si falla algún paso, arroja » SQLException «, así que asegúrese de manejar la excepción usando el bloque try/catch.

destruir():

  • El contenedor de servlet llamará al método “ destruir()” para destruir el servlet específico del servicio. Una vez que se procesan todas las requests de los clientes o después de que haya pasado un período de tiempo de espera especificado, este método se llamará solo una vez al final.
  • En este método, podemos especificar todas las actividades de limpieza, como las desasignaciones de recursos.
  • Entonces, una vez que se procesan todas las requests de los clientes, debemos cerrar la conexión a la base de datos.

Implementar y probar el servlet

  • Para implementar y ejecutar el programa, ejecute el archivo » home.html «, ya que es el archivo de bienvenida.
  • Haga clic derecho en HTML, » Ejecutar como -> Ejecutar en el servidor».
  • Una vez que se inicia el servidor, el contenedor Servlet carga esta aplicación web y muestra la página HTML en el navegador.
  • URL: http://localhost:8081/ServletDBAccess/inicio.html
Home Page

Página de inicio

  • Haga clic en el botón » Buscar » para obtener los resultados.
Output

Producción

  • De esta manera, el servlet procesa la solicitud del cliente y obtiene los datos de la base de datos y genera la respuesta al cliente con esos datos.
  • Como formateamos los datos de salida en la tabla HTML, la información se muestra de esa manera formateada.

De esta forma, podemos acceder a la base de datos a través de Java Servlets y generar respuestas dinámicas en función de las requests de los clientes. En este ejemplo, aprendemos a obtener los datos de la base de datos. Podemos realizar todas las operaciones CRUD en Java Servlets usando JDBC. Visite aquí para aprender el tutorial.

Publicación traducida automáticamente

Artículo escrito por yaminitalisetty y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *