Ingresar a Netbeans (Versión 11).
1.- Crear un proyecto de tipo Web Application
Project Name: Dashboard6
Project Location: c:\SC
Presionar la tecla Next > Finish
2. Modifica el navegador por default
3.- Verificar que el proyecto es ejecutable
- Borrar el archivo index.html
- Copia el contenido JSP del proyecto https://github.com/fararoni/Dashboard4.git (NO INCLUIR WEB-INF)
- Copiar el contenido Java
Corregir la instalación del driver
- Si no tienes el driver, se puede descargar de la siguiente url: https://cdn.nekdu.com/jdbc/mysql-connector-j-8.0.31.jar y copiarlos a c:\sc\jdbc. Agregar dependencias.
- Revisar el funcionamiento de la funcionalidad productos, implementar la funcionalidd similar para clientes.
4. Seguir el siguiente ejercicio.
1.- Usar la tabla de clientes en MySql, con la siguiente estructura
CREATE TABLE `clientes` ( `id` INT NOT NULL AUTO_INCREMENT , `nombre` VARCHAR(20) NOT NULL , `apellidos` VARCHAR(40) NOT NULL , `telefono` INT NOT NULL , `domicilio` VARCHAR(60) NOT NULL , `codigo_postal` INT(5) NOT NULL , `edad` INT(2) NOT NULL , `sexo` VARCHAR(1) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
2. Crear la clase POJO (Bean) para la tabla clientes, agregar un constructor por default, constructor para todos los atributos, los métodos get/set y el método toString().
package tese.pojo; public class Cliente { int id; String nombre; String apellidos; long telefono; String domicilio; int codigo; int edad; String sexo; }
Con las teclas <alt><insertar> activar los generadores de contructores, métodos get/set y el metodo toString().
3.- Crear la clase DAO de acceso a la base de datos para la tabla clientes
Copiar el archivo ProductoDAO.java a ClienteDAO y hacer los siguientes cambios y corregir los errores que se presenten:
3.1 Actualizar el import del pojo.
import tese.pojo.Cliente;
3.2 Actualizar las consultas SQL, conforme a la estructura de la tabla MYSQL
static String sqlCrearTabla = "CREATE TABLE clientes (\n" + " id INT NOT NULL AUTO_INCREMENT ,\n" + " nombre VARCHAR(20) NOT NULL ,\n" + " apellidos VARCHAR(40) NOT NULL ,\n" + " telefono BIGINT NOT NULL ,\n" + " domicilio VARCHAR(60) NOT NULL ,\n" + " codigo_postal INT(5) NOT NULL ,\n" + " edad INT(2) NOT NULL ,\n" + " sexo VARCHAR(1) NOT NULL , \n" + " PRIMARY KEY (id)) ;"; String sqlInsert = "INSERT INTO clientes (nombre, apellidos, telefono, domicilio,codigo_postal, edad, sexo ) VALUES ( ?, ? ? , ?, ?, ?, ? )"; String sqlUpdate = "UPDATE clientes set nombre= ?, apellidos = ?, telefono=?, domicilio =? , codigo_postal = ?, edad =?, sexo=? where id = ? "; String sqlDelete = "DELETE from clientes where id = ?"; String sqlSelectById = "SELECT id, nombre, apellidos, telefono, domicilio,codigo_postal, edad, sexo from clientes where id =?"; String sqlSelectByComodin = "SELECT nombre, apellidos, telefono, domicilio,codigo_postal, edad, sexo from clientes where (nombre like ? or apellidos like ?)"; String sqlSelectAll = "select * from clientes";
3.3 Actualizar el método insert
public int insert(Cliente p) throws SQLException { Connection conn = DatabaseDAO.openConnection(); int cuantos; System.out.println("ClienteDAO.insert:" + p); PreparedStatement ps = conn.prepareStatement(sqlInsert); ps.setString(1, p.getNombre()); ps.setString(2, p.getApellidos()); ps.setLong(3, p.getTelefono()); ps.setString(4, p.getDomicilio()); ps.setInt(5, p.getCodigo()); ps.setInt(6, p.getEdad()); ps.setString(7, p.getSexo()); cuantos = ps.executeUpdate(); DatabaseDAO.closeConnection(conn); return cuantos; }
3.4 Actualizar el método update
public int update(Cliente p) throws SQLException { Connection conn = DatabaseDAO.openConnection(); int cuantos; conn = DatabaseDAO.openConnection(); PreparedStatement ps = conn.prepareStatement(sqlUpdate); ps.setString(1, p.getNombre()); ps.setString(2, p.getApellidos()); ps.setLong(3, p.getTelefono()); ps.setString(4, p.getDomicilio()); ps.setInt(5, p.getCodigo()); ps.setInt(6, p.getEdad()); ps.setString(7, p.getSexo()); ps.setInt(8, p.getId()); cuantos = ps.executeUpdate(); System.out.println("update" + cuantos + " > " + p); DatabaseDAO.closeConnection(conn); return cuantos; }
3.5 Actualizar el método delete
public int delete(int id) throws SQLException { Connection conn = DatabaseDAO.openConnection(); int cuantos; PreparedStatement ps = conn.prepareStatement(sqlDelete); ps.setInt(1, id); cuantos = ps.executeUpdate(); DatabaseDAO.closeConnection(conn); return cuantos; }
3.5 Actualizar el método select por id
public Cliente select(int id) throws SQLException { Connection conn = DatabaseDAO.openConnection(); Cliente cliente = null; PreparedStatement preparedStatement = conn.prepareStatement(sqlSelectById); preparedStatement.setInt(1, id); System.out.println(preparedStatement); ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { cliente = new Cliente(); cliente.setId(rs.getInt("id")); cliente.setNombre(rs.getString("nombre")); cliente.setApellidos(rs.getString("apellidos")); cliente.setTelefono(rs.getLong("telefono")); cliente.setDomicilio(rs.getString("domicilio")); cliente.setCodigo(rs.getInt("codigo_postal")); cliente.setEdad(rs.getInt("edad")); cliente.setSexo(rs.getString("sexo")); } DatabaseDAO.closeConnection(conn); return cliente; }
3.6 Actualizar el método select por comodín
public Cliente select(String comodin) throws SQLException { Connection conn = DatabaseDAO.openConnection(); Cliente cliente = null; PreparedStatement preparedStatement = conn.prepareStatement(sqlSelectByComodin); preparedStatement.setString(1, comodin); preparedStatement.setString(2, comodin); System.out.println(preparedStatement); ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { cliente = new Cliente(); cliente.setId(rs.getInt("id")); cliente.setNombre(rs.getString("nombre")); cliente.setApellidos(rs.getString("apellidos")); cliente.setTelefono(rs.getLong("telefono")); cliente.setDomicilio(rs.getString("domicilio")); cliente.setCodigo(rs.getInt("codigo_postal")); cliente.setEdad(rs.getInt("edad")); cliente.setSexo(rs.getString("sexo")); } DatabaseDAO.closeConnection(conn); return cliente; }
3.7 Actualizar el método select todo
public List selectAll() throws SQLException { Connection conn = DatabaseDAO.openConnection(); List clientes = new ArrayList(); PreparedStatement ps = conn.prepareStatement(sqlSelectAll); System.out.println(ps); ResultSet rs = ps.executeQuery(); while (rs.next()) { Cliente cliente = new Cliente(); cliente.setId(rs.getInt("id")); cliente.setNombre(rs.getString("nombre")); cliente.setApellidos(rs.getString("apellidos")); cliente.setTelefono(rs.getLong("telefono")); cliente.setDomicilio(rs.getString("domicilio")); cliente.setCodigo(rs.getInt("codigo_postal")); cliente.setEdad(rs.getInt("edad")); cliente.setSexo(rs.getString("sexo")); clientes.add(cliente); } DatabaseDAO.closeConnection(conn); return clientes; }
3.8 Verificar que funciona la clase ClienteDAO
Modificar el Servlet TestServlet, con el siguiente método processRequest
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { ClienteDAO dao = new ClienteDAO(); Cliente cliente = new Cliente(0, "Guadalupe", "Reyes", 5512345678L, "Conocido", 12345, 21, "M" ); List la = dao.selectAll(); out.print("Select all.."); out.println(la); dao.insert(cliente); List lb = dao.selectAll(); out.print("Select all 2.."); out.println(lb); //-- out.print("Update.."); cliente.setNombre("Lupita"); cliente.setId(1); dao.update(cliente); out.print("Delete.."); dao.delete(1); out.print("Ok"); } catch (SQLException ex) { Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex); out.print(ex); } finally { out.close(); } }
4. Crear las vistas en JSP para las operaciones CRUD de la tabla Clientes
4.1 Crear el directorio clientes en Web Pages
Copiar los archivos producto-list.jsp y producto-form.jsp a este directorio, renombrarlos para clientes
4.2 Editar clientes-list.jsp
Modificar las siguientes lineas
<c:forEach var="cliente" items="${listClientes}"> <tr> <td> <c:out value="${cliente.id}" /> </td> <td> <c:out value="${cliente.nombre}" /> </td> <td> <c:out value="${cliente.apellidos}" /> </td> <td> <c:out value="${cliente.telefono}" /> </td> <td> <c:out value="${cliente.domicilio}" /> </td> <td> <c:out value="${cliente.codigo}" /> </td> <td> <c:out value="${cliente.edad}" /> </td> <td> <c:out value="${cliente.sexo}" /> </td> <td> <a href="<%=request.getContextPath()%>/ClientesUpdate?id=<c:out value='${cliente.id}' />">Actualizar</a> <a href="<%=request.getContextPath()%>/ClientesDelete?id=<c:out value='${cliente.id}' />">Borrar</a> </tr> </c:forEach>
4.3 Editar cliente-form.jsp
Línea 57 a 71
<div class="form-group row"> <label for="nombre" class="col-sm-2 col-form-label">Nombre</label> <div class="col-sm-10"> <input type="text" id="nombre" name="nombre" value="<c:out value='${cliente.nombre}' />" class="form-control" placeholder="Nombre del cliente..."> </div> </div> <div class="form-group row"> <label for="apellidos" class="col-sm-2 col-form-label">Apellidos</label> <div class="col-sm-10"> <input type="text" id="apellidos" name="apellidos" value="<c:out value='${cliente.apellidos}' />" class="form-control" placeholder="Apellidos del cliente..."> </div> </div>
5.- Crear el Servlet para controllar los clientes
Copiar el archivo ProductosServlet.java con el nombre ClientesServlet.java
5.1 Editar ClientesServlet.java y actualizar el método para listar los clientes
import tese.dao.ClienteDAO; import tese.pojo.Cliente;
Se encuentra una sección comentada para explicar la organización de los métodos del servlet
/* SQL Form Action GET POST Create Insert /ClientesNew showNewForm actionInsert Read Select /ClientesGrid showAllGrid N/A Update Update /ClientesUpdate showUpdateForm actionUdate Delete Delete /ClientesDelete showDeleteForm actionDelete ------ ------ ---------------- -------------- ------------ 1.- Los formularios y grid, se mostraran por el Método GET y las acciones a B.D. por el método POST. */
@WebServlet(name = "ClientesServlet", urlPatterns = { "/ClientesNew", "/ClientesGrid", "/ClientesUpdate", "/ClientesDelete" })
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getServletPath(); try { if ("/ClientesNew".equals(action)) { showNewForm(request, response); } if ("/ClientesGrid".equals(action)) { showAllGrid(request, response); } if ("/ClientesUpdate".equals(action)) { showUpdateForm(request, response); } if ("/ClientesDelete".equals(action)) { showDeleteForm(request, response); } } catch (SQLException ex) { Logger.getLogger(ClientesServlet.class.getName()).log(Level.SEVERE, null, ex); } }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getServletPath(); try { if ("/ClientesNew".equals(action)) { actionInsert(request, response); } if ("/ClientesGrid".equals(action)) { showAllGrid(request, response); } if ("/ClientesUpdate".equals(action)) { actionUpdate(request, response); } if ("/ClientesDelete".equals(action)) { actionDelete(request, response); } } catch (SQLException ex) { Logger.getLogger(ClientesServlet.class.getName()).log(Level.SEVERE, null, ex); } }
5.2 Métodos para crear los clientes
//-- Create Insert /ProductosNew showNewForm actionInsert private void showNewForm(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("showNewForm"); RequestDispatcher dispatcher = request.getRequestDispatcher("/clientes/cliente-form.jsp"); dispatcher.forward(request, response); }
private void actionInsert(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { int id = 0; try { id = Integer.parseInt(request.getParameter("id")); } catch (Exception e) { System.out.println("Id tiene valor nulo"); } String nombre = request.getParameter("nombre"); String apellidos = request.getParameter("apellidos"); long telefono = Long.parseLong(request.getParameter("telefono")); String domicilio = request.getParameter("domicilio"); int codigo = Integer.parseInt(request.getParameter("edad")); int edad = Integer.parseInt(request.getParameter("edad")); String sexo = request.getParameter("sexo"); Cliente newProd = new Cliente(id, nombre, apellidos, telefono, domicilio, codigo, edad, sexo); clienteDAO.insert(newProd); response.sendRedirect(request.getContextPath() + "/ClientesGrid"); }
5.3 Métodos para crear consultar los clientes
//--Read Select /ProductosGrid showAllGrid N/A private void showAllGrid(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException, ServletException { List< Cliente> listUser = clienteDAO.selectAll(); request.setAttribute("listClientes", listUser); RequestDispatcher dispatcher = request.getRequestDispatcher("/clientes/clientes-list.jsp"); dispatcher.forward(request, response); }
5.4 Métodos para actualizar los clientes
//-- Update Update /ProductosUpdate showUpdateForm actionUdate private void showUpdateForm(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); Cliente cliente = clienteDAO.select(id); request.setAttribute("cliente", cliente); RequestDispatcher dispatcher = request.getRequestDispatcher("/clientes/cliente-form.jsp"); dispatcher.forward(request, response); }
private void actionUpdate(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { int id = -1; try { id = Integer.parseInt(request.getParameter("id")); } catch (Exception e) { System.out.println("Id tiene valor nulo"); } String nombre = request.getParameter("nombre"); String apellidos = request.getParameter("apellidos"); long telefono = Long.parseLong(request.getParameter("telefono")); String domicilio = request.getParameter("domicilio"); int codigo = Integer.parseInt(request.getParameter("edad")); int edad = Integer.parseInt(request.getParameter("edad")); String sexo = request.getParameter("sexo"); Cliente updateCliente = new Cliente(id, nombre, apellidos, telefono, domicilio, codigo, edad, sexo); System.out.println(" actionUpdate:" + updateCliente ); clienteDAO.update(updateCliente); response.sendRedirect(request.getContextPath() + "/ClientesGrid"); }
5.5 Métodos para borrar los clientes
//-- Delete Delete /ProductosDelete showDeleteForm actionDelete private void showDeleteForm(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); Cliente cliente = clienteDAO.select(id); request.setAttribute("producto", cliente); request.setAttribute("accion", "borrar"); RequestDispatcher dispatcher = request.getRequestDispatcher("/clientes/cliente-form.jsp"); dispatcher.forward(request, response); }
private void actionDelete(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { int id = -1; try { id = Integer.parseInt(request.getParameter("id")); } catch (Exception e) { System.out.println("Id tiene valor nulo"); } System.out.println(" actionDelete:" + id ); clienteDAO.delete("id"); response.sendRedirect(request.getContextPath() + "/ClientesGrid"); }
Felicidades!!!!