Servlet – Operación CRUD con ejemplo

CRUD significa Crear, Leer, Actualizar y Eliminar. Estas son las operaciones básicas importantes que se llevan a cabo en la base de datos y en las aplicaciones. Construiremos una aplicación de registro de usuario simple utilizando un Servlet, MYSQL y JDBC para la demostración. En este ejemplo, podremos crear usuarios, leer usuarios, actualizar usuarios y eliminar usuarios. 

Herramientas tecnológicas:

  • Base de datos MySQL (banco de trabajo)
  • IDE (inteligente)
  • Apache Tomcat (utilicé la versión Tomcat 9).

Primero, descargamos Apache Tomcat desde la descarga de Apache Tomcat , Extraiga en su directorio de trabajo.

Download Apache Tomcat 9

Apache Tomcat 9 extracted into Dev folder

Luego creamos un nuevo proyecto, lo nombramos usuario de la aplicación. Por lo general, hay dos enfoques para esto, el primero es crear su proyecto desde la base de datos y el otro es crear la aplicación primero y luego configurar la base de datos. En este artículo, comenzaremos nuestro proyecto desde la base de datos. Entonces, configuremos nuestra base de datos, en este ejemplo estoy usando MYSQL, verifique la imagen a continuación para ver la demostración de cómo configurar la base de datos.

Después de eso, configuramos nuestro proyecto, para este ejemplo estoy usando Intellij IDE, 

  • Cree un nuevo proyecto seleccionando Archivo (le mostrará varias opciones)
  • Seleccione Nuevo, luego proyecto
  • Haga clic en Java Enterprise y elija la aplicación web como su plantilla de proyecto

Configuración del servidor de aplicaciones

  • Seleccione la aplicación y elija nueva
  • Seleccione el directorio base de Tomcat (el que está guardado en su directorio de trabajo)

Así es como se verá la estructura del proyecto:

El aspecto de la codificación. Primero, creamos una clase modelo llamada Usuario, que es una clase POJO simple;

Usuario.java

Java

public class User {
    private int id;
    private String username;
    private String password;
  
    public int getId() { return id; }
  
    public void setId(int id) { this.id = id; }
  
    public String getUsername() { return username; }
  
    public void setUsername(String username)
    {
        this.username = username;
    }
  
    public String getPassword() { return password; }
  
    public void setPassword(String password)
    {
        this.password = password;
    }
}

Luego creamos una clase que ayuda a realizar operaciones CRUD en nuestra base de datos,

UserDaoHandler.java

Java

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
  
public class UserDaoHandler {
    public static Connection connectDB()
    {
        // connection object
        Connection connection = null;
        try {
            // returns the class object
            Class.forName("com.mysql.jdbc.Driver");
            // it creates a connection to the database using
            // the url
            connection = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/appuserdb",
                "adminuser", "user123");
        }
  
        catch (Exception message) {
            System.out.println(message);
        }
        return connection;
    }
  
    public static int addUser(User user) throws SQLException
    {
        int result = 0;
        Connection connect = UserDaoHandler.connectDB();
        
        // SQL statement is precompiled and stored in a
        // PreparedStatement object.
        PreparedStatement preparedStatement
            = connect.prepareStatement(
                "insert into user(username,password) values (?,?)");
        
        // set the parameter to the given Java String value
        preparedStatement.setString(1, user.getUsername());
        preparedStatement.setString(2, user.getPassword());
        
        // execute SQl statement insert values to the
        // database
        result = preparedStatement.executeUpdate();
        
        // close the database connection
        connect.close();
        return result;
    }
    public static int updateUser(User user)
        throws SQLException
    {
        int result = 0;
        
        // create connection at the call of this method
        Connection connect = UserDaoHandler.connectDB();
        
        // SQL statement is precompiled and stored in a
        // PreparedStatement object
        PreparedStatement preparedStatement
            = connect.prepareStatement(
                "update user set username=?,password=? where id=?");
        
        // set the parameter to the given Java String value
        preparedStatement.setString(1, user.getUsername());
        preparedStatement.setString(2, user.getPassword());
        
        // execute SQl statement, insert values to the
        // database
        result = preparedStatement.executeUpdate();
        
        // close the database connection
        connect.close();
        return result;
    }
    public static int deleteUser(int id) throws SQLException
    {
        int result = 0;
        
        // create connection at the call of this method
        Connection connect = UserDaoHandler.connectDB();
        
        // SQL statement is precompiled and stored in a
        // PreparedStatement object
        PreparedStatement preparedStatement
            = connect.prepareStatement(
                "delete from USER where id =?");
        // set the integer value to the  user id,
        preparedStatement.setInt(1, id);
        
        // execute SQl statement, insert values to the
        // database
        result = preparedStatement.executeUpdate();
        
        // close the database connection
        connect.close();
        
        return result;
    }
    public static User getUserById(int id)
        throws SQLException
    {
        // create a user object
        User user = new User();
        
        // create connection at the call of the method
        Connection connect = UserDaoHandler.connectDB();
        
        // SQL statement is precompiled and stored in a
        // PreparedStatement object
        PreparedStatement preparedStatement
            = connect.prepareStatement(
                "select * from USER where id=?");
        
        // set the integer value to the  user id,
        preparedStatement.setInt(1, id);
        
        // A table of data representing a database result
        // set,generated after the query
        ResultSet resultSet
            = preparedStatement.executeQuery();
        
        // checking for saved fields,if more than one
        if (resultSet.next()) {
            // value of the column is assigned to the set
            // method
            user.setId(resultSet.getInt(1));
            user.setUsername(resultSet.getString(2));
            user.setPassword(resultSet.getString(3));
        }
        
        // close the database connection
        connect.close();
        return user;
    }
    public static List<User> getAllUsers(int start,
                                         int total)
        throws SQLException
    {
        // creating an empty arraylist of type User.
        List<User> list = new ArrayList<User>();
        
        // create connection at the call of the method
        Connection connect = UserDaoHandler.connectDB();
        
        // SQL statement and telling it to select from the
        // first index
        PreparedStatement preparedStatement
            = connect.prepareStatement(
                "select * from user limit " + (start - 1)
                + "," + total);
        ResultSet resultSet
            = preparedStatement.executeQuery();
        
        // this keep iterating the list of user
        // setting the values to the corresponding integer
        while (resultSet.next()) {
            User user = new User();
            user.setId(resultSet.getInt(1));
            user.setUsername(resultSet.getString(2));
            user.setPassword(resultSet.getString(3));
            // store the values into the list
            list.add(user);
        }
        
        // close the database connection
        connect.close();
        
        return list;
    }
}

Después, creamos nuestras clases de servlet, cada clase de servlet para Crear usuario, Actualizar usuario, Leer usuario y Eliminar usuario de la base de datos. Aquí están las clases;

Agregar servlet de usuario:

Este método hace un método de publicación, recopila información de los usuarios y la agrega a la base de datos, en este ejemplo, estamos utilizando «nombre de usuario», «contraseña» e «ID de usuario» como el campo que se guardará en la base de datos.

Java

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
  
@WebServlet(name = "addUser", value = "/addUser")
public class AddUser extends HttpServlet {
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
    }
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
    }
    
    // override the supertype method post
    @Override
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
    {
        processRequest(request, response);
        
        // print object for string formatting
        PrintWriter out = response.getWriter();
        
        // Httpservletrequest get parameters from user
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        // Instances of User class
        User user = new User();
        
        // set the parameters gotten to the 'Username' field
        // of User class
        user.setUsername(username);
        user.setPassword(password);
  
        int status = 0;
        try {
            // static method add the values stored in the
            // user object to the database
            status = UserDaoHandler.addUser(user);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        
        // check if the values correspond to the one
        // specified
        if (status > 0) {
            out.print("
<p>Record saved successfully!</p>
");
            request.getRequestDispatcher("index.html")
                .include(request, response);
        }
        else {
            out.println("Sorry! unable to save record");
        }
  
        // close database connection
        out.close();
    }
}

AddUser.java para agregar usuarios a la base de datos.

Actualizar servlet de usuario:

Este método obtiene la identificación del usuario y la compara con la de la base de datos, luego realiza una actualización.

ActualizarUsuario.java

Java

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
  
@WebServlet(name = "updateUser", value = "/updateUser")
public class UpdateUser extends HttpServlet {
    // override the supertype method post
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
        PrintWriter out = response.getWriter();
        
        // collect user id parameter
        String userId = request.getParameter("id");
        
        // the string value is parse as integer to id
        int id = Integer.parseInt(userId);
        try {
            
            // this statement get user by id
            User user = UserDaoHandler.getUserById(id);
            
            // this print the jsp and render web page
            out.println("<h2>Edit User Account</h2>");
            out.print(
                "<form action='patchUser' method='post'>");
            out.print("<table>");
            out.print(
                "<tr><td></td><td><input type='hidden' name='id' value='"
                + user.getId() + "'/></td></tr>");
            out.print(
                "<tr><td>Name:</td><td><input type='text' name='name' value='"
                + user.getUsername() + "'/></td></tr>");
            out.print(
                "<tr><td colspan='2'><input type='submit' value='Update'/></td></tr>");
            out.print("</table>");
            out.print("</form>");
            
            // close database connection
            out.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
  
    @Override
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
    {
    }
}

El método del parche:

Este método simplemente intercambia información en la base de datos con los parámetros de entrada obtenidos de la página web y los guarda en la base de datos.

PatchUser.java

Java

import static java.lang.System.out;
  
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
  
@WebServlet(name = "patchUser", value = "/patchUser")
public class PatchUser extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
    }
  
    @Override
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
    {
        PrintWriter out = response.getWriter();
        String userId = request.getParameter("id");
        int id = Integer.parseInt(userId);
        String username = request.getParameter("name");
        String password = request.getParameter("password");
        User user = new User();
        user.setId(id);
        user.setUsername(username);
        user.setPassword(password);
        try {
            int result = UserDaoHandler.updateUser(user);
            if (result > 0) {
                response.sendRedirect("viewUser? page =1");
            }
            else {
                out.print("unable to connect");
            }
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        out.close();
    }
}

Ver usuario Servlet:

Este método obtiene todos los usuarios de la base de datos y los muestra en un formato de tabla simple.

VerUsuario.java

Java

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
  
@WebServlet(name = "viewUser", value = "/viewUser")
public class ViewUser extends HttpServlet {
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
    }
    
    // override the supertype method get
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
        processRequest(request, response);
        PrintWriter out = response.getWriter();
        
        // assigning integer values to web pages
        String pageId = request.getParameter("page");
        int total = 3;
        int pagesId = Integer.parseInt(pageId);
        if (pagesId == 1) {
        }
        else {
            pagesId = pagesId - 1;
            pagesId = pagesId * total + 1;
        }
        
        // initializing list of users
        List<User> list = null;
        out.println(
            "<a href='/appuser_war_exploded/'>Add user</a>");
  
        out.print("<h1> User Table: </h1>");
        out.print(
            "<table border='1' cellpadding='4' width='80%'>");
        out.print("<tr><th>Id</th><th>username</th></tr>");
        try {
            // getting all users and assigning to the page
            // numbers
            list = UserDaoHandler.getAllUsers(pagesId,
                                              total);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        
        // ensuring list is not null
        if (list != null) {
            // iterating through the list of Users
            // And getting username and id of users.
            for (User user : list) {
                out.print("<tr><td>" + user.getId()
                          + "</td><td>" + user.getUsername()
                          + "</td></tr>");
            }
            
            // printing out in a jsp web format.
            out.print("</table>");
            out.print("<a href='viewUser?page=1'>1</a> ");
            out.print("<a href='viewUser?page=2'>2</a> ");
            out.print("<a href='viewUser?page=3'>3</a> ");
        }
    }
  
    @Override
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
    {
    }
}

Eliminar servlet:

El método a continuación elimina al usuario de la base de datos y envía la respuesta de vista del usuario, mostrando los usuarios actuales en la base de datos.

EliminarUsuario.java

Java

import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
  
@WebServlet(name = "deleteUser", value = "/deleteUser")
public class DeleteUser extends HttpServlet {
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
    }
    
    // overriding the supertype method get
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
        processRequest(request, response);
        
        // get user by id
        String userId = request.getParameter("id");
        
        // the int value of the parameter
          // is parse to the id
        int id = Integer.parseInt(userId);
        try {
            // the delete method is 
              // invoked on user with the
            // specified id
            UserDaoHandler.deleteUser(id);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        // it sent the current
         // user view as response
        response.sendRedirect("viewUser?page=1");
    }
  
    @Override
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
    {
    }
}

Producción:

El servlet de Java representa la página del servidor de Java cada vez que llama un usuario.

Output

Output

Output

Publicación traducida automáticamente

Artículo escrito por auduigbekele 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 *