04 mayo, 2017

8. Crear una aplicación Web Java en Eclipse con Servlets y JSPs (Parte 8 - CRUD y properties)

¡Bienvenidos a todos! Esta publicación formará parte de una serie de 13 publicaciones que estaré desarrollando para aprender a desarrollar una aplicación web pura en Java bajo la plataforma JEE usando Servlets y JSPs. Este será un curso en forma de guía para aquellas personas que recién estén empezando en el mundo de la programación web y que todavía no hacen uso de ningún framework.

Haciendo uso de JSPs y Servlets construiremos nuestras aplicaciones webs los cuales se ejecutarán en Apahe Tomcat (Contenedor de Servlets), el cual lo usaremos como servidor de aplicaciones para ejecutar nuestro proyecto. Asimismo, usaremos Eclipse como herramienta IDE (Entorno de Desarrollo Integrado) para la edición y compilación de nuestro código.


Bienvenidos, el día de hoy vamos a terminar de implementar los métodos del mantenimiento de la tabla cliente del proyecto que venimos trabajando y aprenderemos también a crear recursos properties y como recuperar los datos usando la librería fmt de JSTL

Recordando la sesión anterior...

Hemos modificado la estructura del proyecto de la sesión 6 (Parte 6) de tal manera que de ahora en adelante trabajemos con el patrón de diseño MVC, DAO y DTO.

1) Completar el Mantenimiento para Clientes

1. Importamos el proyecto de la clase anterior y lo ejecutamos para ver que no haya ningún error, clic aquí para descargar.


2. Actualizamos la interface ClienteDAO.java agregando el método para actualizar los datos del cliente.

Código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package aprendamos.java.interfaces;
 
import java.util.List;
 
import bean.ClienteDTO;
 
/*
 Una interfaz es una clase completamente abstracta, es decir es una clase sin implementación
 No es necesario ponerle abstract ya que lo son implicitamente
 Si adicionalmente tiene miembros datos, estos seran constantes static y final
 */
 
public interface ClienteDAO {
 
 // METODO QUE ELIMINA UN CLIENTE POR EMAIL
 public abstract void eliminaClientePorId(String email);
 
 // MÉTODO QUE REGISTRA UN NUEVO CLIENTE
 public void registraNuevoCliente(ClienteDTO objCli);
 
 // MÉTODO QUE MODIFICA UN CLIENTE
 public void modificaCliente(ClienteDTO objCli);
 
 // METODO QUE BUSCA CLIENTES POR SU ID
 public ClienteDTO buscaUsuarioPorId(String email);
 
 // METODO PARA LISTAR CLIENTES POR UN DETERMINADO NOMBRE O LETRA
 public List<clientedto> listadoDeClientesPorNombre(String nombre);
 
}


Si guardamos los cambios veremos que Eclipse nos marcará un error en las clases MySqlClienteDAO.java, OracleClienteDAO.java y XMLClienteDAO.java, pues estas clases implementan los métodos de la interface ClienteDAO.java. Solucionamos agregando el método que acabamos de crear a las clases.

3. Actualizamos la clase MySqlClienteDAO.java implementando los métodos para eliminar y modificar cliente.

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package aprendamos.java.dao;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
import aprendamos.java.interfaces.ClienteDAO;
import aprendamos.java.util.MySqlConexion;
import bean.ClienteDTO;
 
/*Por cada entidad de nuestro modelo de datos normalmente tendremos un DAO
 
 Un DAO define todas las operaciones que necesitemos realizar sobre una entidad
 
 Un DAO expone sus métodos al mundo a través de su interface
 
 La clase nos dice "cómo" vamos a hacerlo :)*/
 
public class MySqlClienteDAO implements ClienteDAO {
 
 // METODO QUE ELIMINAR UN CLIENTE POR EMAIL
 @Override
 public void eliminaClientePorId(String email) {
  // Obtenemos la conexión
  Connection cn = MySqlConexion.obtenerConexion();
  try {
   // Definimos la sentencia a ejecutar
   String sql = "delete from tb_cliente where mail = ?";
   // La preparamos
   PreparedStatement st = cn.prepareStatement(sql);
   // Asignamos valores a las interrogantes
   st.setString(1, email);
   // Ejecutamos la sentencia
   st.executeUpdate();
   // Cerrar la conexión
   cn.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 // MÉTODO QUE REGISTRA UN NUEVO CLIENTE
 @Override
 public void registraNuevoCliente(ClienteDTO objCli) {
  Connection cn = MySqlConexion.obtenerConexion();
  try {
   // Definimos la sentecia
   String sentencia = "insert into tb_cliente(mail,clave,"
     + "nombre,direccion,fecnac,telefono ) "
     + " values (?,?,?,?,?,?) ";
   PreparedStatement pst = cn.prepareStatement(sentencia);
   // Asignamos valores a las interrogantes
   pst.setString(1, objCli.getEmail());
   pst.setString(2, objCli.getClave());
   pst.setString(3, objCli.getNombre());
   pst.setString(4, objCli.getDireccion());
   java.sql.Date laFecha = new java.sql.Date(objCli.getFecnac().getTime());
   pst.setDate(5, laFecha);
   pst.setLong(6, objCli.getTelefono());
   // Ejecutamos
   pst.executeUpdate();
   cn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 
 // MÉTODO QUE MODIFICA UN CLIENTE
 @Override
 public void modificaCliente(ClienteDTO objCli) {
  Connection cn = MySqlConexion.obtenerConexion();
  try {
   // Definimos la sentencia
   String sentencia = "update tb_cliente set clave=?, nombre=?, "
     + "direccion=?, fecnac=?, telefono=? where mail=?";
   // La preparamos
   PreparedStatement pst = cn.prepareStatement(sentencia);
   // Asignamos valores a las interrogantes
   pst.setString(1, objCli.getClave());
   pst.setString(2, objCli.getNombre());
   pst.setString(3, objCli.getDireccion());
   java.sql.Date laFecha = new java.sql.Date(objCli.getFecnac().getTime());
   pst.setDate(4, laFecha);
   pst.setLong(5, objCli.getTelefono());
   pst.setString(6, objCli.getEmail());
   // Ejecutamos
   pst.executeUpdate();
   cn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
  
 // METODO QUE BUSCA CLIENTES POR SU ID
 @Override
 public ClienteDTO buscaUsuarioPorId(String email) {
  ClienteDTO objCli = null;
  Connection cn = MySqlConexion.obtenerConexion();
  try {
   // Definimos la sentencia
   String sentencia = "select mail,clave,nombre,"
     + "direccion,fecnac,telefono "
     + "from tb_cliente where mail = ? ";
   // La preparamos
   PreparedStatement pst = cn.prepareStatement(sentencia);
   // Asignamos valores a las interrogantes
   pst.setString(1, email);
   // Ejecutamos
   ResultSet rs = pst.executeQuery();
   if (rs.next()) {
    // caso de exito, si existe el email
    objCli = new ClienteDTO(rs.getString(1), rs.getString(2),
      rs.getString(3), rs.getString(4), rs.getDate(5),
      rs.getLong(6));
   }
   cn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return objCli;
 }
 
 // METODO PARA LISTAR CLIENTES POR UN DETERMINADO NOMBRE O LETRA
 @Override
 public List<clientedto> listadoDeClientesPorNombre(String nombre) {
  Connection cn = MySqlConexion.obtenerConexion();
  List<clientedto> clientes = new ArrayList<clientedto>();
  try {
   // Definimos la sentencia
   String sentencia = "select mail,clave,nombre,"
     + "direccion,fecnac,telefono "
     + "from tb_cliente where nombre like ? ";
   // La preparamos
   PreparedStatement pst = cn.prepareStatement(sentencia);
   // Asignamos valores a las interrogantes
   pst.setString(1, "%" + nombre + "%");
   // Ejecutamos
   ResultSet rs = pst.executeQuery();
   while (rs.next()) {
    // Caso de exito, si existe el email
    ClienteDTO objCli = new ClienteDTO(rs.getString(1),
      rs.getString(2), rs.getString(3), rs.getString(4),
      rs.getDate(5), rs.getLong(6));
    clientes.add(objCli);
   }
   cn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return clientes;
 }
 
  
}

4. Actualizamos el servicio MantenerClienteService.java agregando los métodos para eliminar y modificar cliente.

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package aprendamos.java.service;
 
import aprendamos.java.dao.DAOFactory;
import aprendamos.java.interfaces.ClienteDAO;
import aprendamos.java.util.Constantes;
import bean.ClienteDTO;
import java.util.ArrayList;
import java.util.List;
 
/* Por cada caso de uso de sistema podremos tener un componente service
 La funcionalidad del caso de uso será implementada por el servicio
 Un servicio puede llamar a uno o más daos (los que necesite)
 */
 
public class MantenerClienteService {
 
 DAOFactory fabrica = DAOFactory.getDAOFactory(Constantes.ORIGENDATOS);
 ClienteDAO objClienteDAO = fabrica.getClienteDAO();
  
 public ClienteDTO buscaUsuarioPorId(String email) {
  ClienteDTO objCli = null;
  objCli = objClienteDAO.buscaUsuarioPorId(email);
  System.out.println("Buscamos usando DAO");
  return objCli;
 }
 
 public List<clientedto> listadoDeClientesPorNombre(String nombre) {
  List<clientedto> clientes = new ArrayList<clientedto>();
  clientes = objClienteDAO.listadoDeClientesPorNombre(nombre);
  System.out.println("Listamos usando DAO");
  return clientes;
 }
  
 public void registraNuevoCliente(ClienteDTO objCli) {
  objClienteDAO.registraNuevoCliente(objCli);
  System.out.println("Registramos usando DAO");
 }
  
 public void modificaCliente(ClienteDTO objCli) {
  objClienteDAO.modificaCliente(objCli);
  System.out.println("Modificamos usando DAO");
 }
  
 public void eliminaCliente(String email) {
  objClienteDAO.eliminaClientePorId(email);
  System.out.println("Eliminamos usando DAO");
 }
 
}

5. Actualizamos el servlet MantenerClienteServlet.java agregando los métodos para eliminar y modificar cliente.

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package aprendamos.servlets;
 
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import bean.ClienteDTO;
 
import aprendamos.java.service.MantenerClienteService;
 
/**
 * Servlet implementation class GestionaMantenimientosServlet
 */
 
public class MantenerClienteServlet extends HttpServlet {
  
 private static final long serialVersionUID = 1L;
  
 // Instanciamos los servicios utilizados por este servlet (por ahora solo uno)
 MantenerClienteService servicio = new MantenerClienteService();
 
 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // Asumimos que llega un parámetro oculto llamado operacion
  String voperacion = request.getParameter("operacion");
  if (voperacion.equals("listaClientes")) {
   this.listarClientes(request, response);
  }
  if (voperacion.equals("registraProductos")) {
 
  }
  if (voperacion.equals("registraCliente")) {
   this.registrarCliente(request, response);
  }
  if (voperacion.equals("cargaCliente")) {
   this.cargarCliente(request, response);
  }
  if (voperacion.equals("modificaCliente")) {
   this.modificarCliente(request, response);
  }
  if (voperacion.equals("eliminaCliente")) {
   this.eliminarCliente(request, response);
  }
 }
 
 private void listarClientes(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // Recuperamos el nombre ingresado en el jsp
  String vnombre = request.getParameter("nombre");
  // invocamos al servicio para ejecutar nuestra lógica
  List<clientedto> listado = servicio.listadoDeClientesPorNombre(vnombre);
  // Cargamos al request el listado de clientes
  request.setAttribute("listadito", listado);
  // invocamos a la página listado.jsp para visualizar los datos obtenidos
  request.getRequestDispatcher("/listado.jsp").forward(request, response);
 }
 
 private void registrarCliente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // Recuperamos los parámetros que llegan desde nuevoCliente.jsp
  String vfecha = request.getParameter("fecnac");
  SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
  Date laFecha = null;
  try {
   laFecha = formateador.parse(vfecha);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  ClienteDTO objCliente = null;
  objCliente = new ClienteDTO(request.getParameter("email"),
    request.getParameter("clave"), request.getParameter("nombre"),
    request.getParameter("direccion"), laFecha,
    Long.parseLong(request.getParameter("telefono")));
  // Registramos un nuevo cliente
  servicio.registraNuevoCliente(objCliente);
  // Listamos clientes
  List<clientedto> listado = servicio.listadoDeClientesPorNombre("");
  request.setAttribute("listadito", listado);
  // Invocamos a un componente de la capa view
  request.getRequestDispatcher("/listado.jsp").forward(request, response);
 }
 
 private void modificarCliente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // Recuperamos los parámetros que llegan desde modificaCliente.jsp
  SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
  Date laFecha = null;
  try {
   laFecha = f.parse(request.getParameter("fecnac"));
  } catch (ParseException e) {
   e.printStackTrace();
  }
  ClienteDTO objCli = new ClienteDTO(request.getParameter("email"),
    request.getParameter("clave"), request.getParameter("nombre"),
    request.getParameter("direccion"), laFecha,
    Integer.parseInt(request.getParameter("telefono")));
  // Actualiza el cliente
  servicio.modificaCliente(objCli);
  // Invocamos a un componente de la capa view
  List<clientedto> ggg = servicio.listadoDeClientesPorNombre("");
  // Invocamos a un componente de la capa view
  request.setAttribute("listadito", ggg);
  request.getRequestDispatcher("/listado.jsp").forward(request, response);
 }
 
 private void cargarCliente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // Recupera el parámetro (email)
  String vemail = request.getParameter("email");
  // Buscar el email en la BD y retorna el objeto encontrado
  ClienteDTO objCli = servicio.buscaUsuarioPorId(vemail);
  // Carga el cliente encontrado al request
  request.setAttribute("clie", objCli);
  // Invocamos a un componente de la capa view
  RequestDispatcher rd = request.getRequestDispatcher("/modificaCliente.jsp");
  rd.forward(request, response);
 }
  
 private void eliminarCliente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // Recupera el parámetro (email)
  String vemail = request.getParameter("email");
  // Buscar el email en la BD y retorna el objeto encontrado
  servicio.eliminaCliente(vemail);
  // Listamos clientes
  List<clientedto> listado = servicio.listadoDeClientesPorNombre("");
  request.setAttribute("listadito", listado);
  // Invocamos a un componente de la capa view
  request.getRequestDispatcher("/listado.jsp").forward(request, response);
 }
 
}

6. Creamos la página nuevoCliente.jsp

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link href="estilos/facilito.css" rel="stylesheet" type="text/css">
</head>
<body>
 <table>
  <tr>
   <!--  Aquí va la cabecera -->
   <td colspan="2" align="center"><jsp:include page="cabecera.jsp" />
   </td>
  </tr>
  <tr>
   <!--  Aquí va el menu -->
   <td><jsp:include page="menu.jsp" /></td>
   <!--  Aquí va el cuerpo -->
   <td class="control">
    <form action="mantenimiento" method="post">
     <input type="hidden" name="operacion" value="registraCliente" />
     <table>
      <tr class="titulo">
       <td colspan="2" align="center">Registro de Clientes</td>
      </tr>
      <tr class="control">
       <td>Nombre:</td>
       <td><input type="text" name="nombre" size="25">
       </td>
      </tr>
      <tr class="control">
       <td>Dirección:</td>
       <td><input type="text" name="direccion" size="10">
       </td>
      </tr>
     <tr class="control">
       <td>Sexo:</td>
       <td><select name="sexo">
         <option value="M">Masculino</option>
         <option value="F">Femenino</option>
       </select></td>
      </tr>
      <tr class="control">
       <td>Fecha de Nacimiento:</td>
       <td><input type="text" name="fecnac" size="15">
       </td>
       <td>dd/MM/yyyy</td>
      </tr>
      <tr class="control">
       <td>Teléfono:</td>
       <td><input type="text" name="telefono" size="8">
       </td>
      </tr>
      <tr class="control">
       <td>Email:</td>
       <td><input type="text" name="email" size="8">
       </td>
      </tr>
      <tr class="control">
       <td>Clave:</td>
       <td><input type="text" name="clave" size="8">
       </td>
      </tr>
      <tr class="control">
       <td colspan="2" align="right"><input type="submit"
        name="boton01" value="Registrar"></td>
      </tr>
     </table>
    </form>
   </td>
  </tr>
  <tr>
   <!--  Aquí va el pie -->
   <td colspan="2" align="center"><jsp:include page="pie.jsp" /></td>
  </tr>
</table>
</body>
</html>

7. Creamos la página modificaCliente.jsp

Codigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!-- Referenciamos a la librería core de JSTL -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link href="estilos/facilito.css" rel="stylesheet" type="text/css">
</head>
<body>
 <table>
  <tr>
   <!--  Aquí va la cabecera -->
   <td colspan="2" align="center"><jsp:include page="cabecera.jsp" />
   </td>
  </tr>
  <tr>
   <!--  Aquí va el menu -->
   <td><jsp:include page="menu.jsp" /></td>
   <!--  Aquí va el cuerpo -->
   <td class="control">
    <form action="mantenimiento" method="post">
     <input type="hidden" name="operacion" value="modificaCliente" />
     <table>
      <tr class="titulo">
       <td colspan="2" align="center">Actualizar Cliente</td>
      </tr>
      <tr class="control">
       <td>Nombre</td>
       <td><input type="text" name="nombre" size="25"
        value="${requestScope.clie.nombre}"></td>
      </tr>
      <tr class="control">
       <td>Dirección</td>
       <td><input type="text" name="direccion" size="25"
        value="${requestScope.clie.direccion}"></td>
      </tr>
      <tr class="control">
       <td>Sexo</td>
       <td><c:if test="${requestScope.clie.nombre=='Rosa'}">
         <select name="sexo">
          <option value="M">Masculino</option>
          <option value="F" selected>Femenino</option>
         </select>
        </c:if> <c:if test="${requestScope.clie.nombre!='Rosa'}">
         <select name="sexo">
          <option value="M">Masculino</option>
          <option value="F">Femenino</option>
         </select>
        </c:if></td>
      </tr>
      <tr class="control">
       <td>Teléfono</td>
       <td><input type="text" name="telefono" size="25"
        value="${requestScope.clie.telefono}"></td>
      </tr>
      <tr class="control">
       <td>Email</td>
       <td><input type="text" name="email" size="25"
        value="${requestScope.clie.email}"></td>
      </tr>
      <tr class="control">
       <td>Fecha Nac.</td>
       <td><input type="text" name="fecnac" size="25"
        value="${requestScope.clie.fecnac}"></td>
       <td>dd/MM/yyyy</td>
      </tr>
      <tr class="control">
       <td>Clave</td>
       <td><input type="text" name="clave" size="25"
        value="${requestScope.clie.clave}"></td>
      </tr>
      <tr class="control">
       <td colspan="2" align="right"><input type="submit"
        name="boton01" value="Modificar">
       </td>
      </tr>
     </table>
    </form>
   </td>
  </tr>
  <tr>
   <!--  Aquí va el pie -->
   <td colspan="2" align="center"><jsp:include page="pie.jsp" /></td>
  </tr>
</table>
</body>
</html>

8. Actualizamos la página listado.jsp para invocar a nuevoCliente.jsp y a modificaCliente.jsp mediante un enlace, cargando en éste último los datos del cliente seleccionado y mediante otro enlace invocar al método eliminar cliente.

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<!-- Dentro de un jsp, en vez de usar scriptlets  y expression también podemos
     utilizar un lenguaje denominado EL: Expression Language.
     Las más básicas son conocidas como JSTL -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!-- Referenciamos a la librería core de JSTL -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- Referenciamos a la librería fmt de JSTL -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%--
<%@page import="aprendamos.java.bean.ClienteDTO"%>
--%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link href="estilos/facilito.css" rel="stylesheet" type="text/css">
</head>
<body>
 <table>
  <tr>
   <!-- Aqui va la cabecera -->
   <td colspan="2" align="center"><jsp:include page="cabecera.jsp" /></td>
  </tr>
  <tr>
   <!-- Aqui va el menu -->
   <td><jsp:include page="menu.jsp" /></td>
   <!-- Aqui va el cuerpo -->
   <td>
    <form method="post" action="mantenimiento">
     <input type="hidden" name="operacion" value="listaClientes">
     <table class="control">
      <tr>
       <td colspan="2" class="titulo"><fmt:message
         key="listado.titulo"></fmt:message></td>
      </tr>
      <tr>
       <td>Nombre:</td>
       <td><input type="text" name="nombre"></td>
       <td><input type="submit" name="boton" value="Listar"></td>
      </tr>
      <!-- Aquí visualizamos el listado, para ello
        usaremos la etiqueta JSTL foreach.
        En el atributo items referenciamos el collection a iterar
        En el atributo var, colocamos el nombre de una variable
        que representará el contenido del collection
        por cada iteración
      -->
      <tr class="grilla_cabecera">
       <td>Nombre</td>
       <td>Direccion</td>
       <td>Fecha</td>
       <td>Telefono</td>
       <td>Eliminar</td>
       <td>Modificar</td>
      </tr>
      <c:forEach var="jaja" items="${requestScope.listadito}">
      <tr>
        <td>${jaja.nombre}</td>
        <td>${jaja.direccion}</td>
        <td><fmt:formatDate value="${jaja.fecnac}" type="date" dateStyle="full" /></td>
        <td>${jaja.telefono}</td>
        <td align="center"><a href="mantenimiento?operacion=eliminaCliente$email=${jaja.email}">E</a></td>
        <td align="center"><a href="mantenimiento?operacion=cargaCliente&email=${jaja.email}">M</a></td>
      </tr>
      </c:forEach>
      <tr class="control">
       <td colspan="6" align="right"><a href="nuevoCliente.jsp">Nuevo Cliente</a></td>
      </tr>
     </table>
    </form>
   </td>
  </tr>
  <tr>
   <!-- Aqui va el pie -->
   <td colspan="2" align="center"><jsp:include page="pie.jsp" /></td>
  </tr>
</table>
</body>
</html>

9. Ejecutamos el proyecto clic derecho Run As>Run On Server



2) Usar recursos properties

1. Creamos el paquete recursos y dentro creamos el archivo NoMeRindo.properties, para ello, hacemos clic derecho en el paquete New>Other>General>File y escribirnos el nombre de nuestro recurso con la extensión .properties

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Este es un archivo properties que permite definir keys con su respectivo valor asociado.
# Usamos este recurso por ejemplo:
# Definir una base de datos, un servidor por defecto, variables o parámetros universales.
 
#key de bienvenida
primerKey=Bienvenidos al Sistema (**Estoy usando propertie**)
segundoKey=Aprender Como Jugando (**Estoy usando propertie**)
abc=xyz (**Estoy usando propertie**)
 
#Key de modificaCliente.jsp
modifica.titulo=Actualiza Cliente (**Estoy usando propertie**)
 
#Key de listadoCliente.jsp
listado.titulo=Lista Datos (**Estoy usando propertie**)

2. Registrar los recursos properties en el archivo descriptor web.xml

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?xml version="1.0" encoding="UTF-8"?>
 id="WebApp_ID" version="2.5">
 <display-name>LP2-semana05b</display-name>
 <!-- Establecer el archivo de bienvenida, tenemos varias opciones -->
 <welcome-file-list>
  <welcome-file>logueo.jsp</welcome-file>
  <welcome-file>index.htm</welcome-file>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>default.html</welcome-file>
  <welcome-file>default.htm</welcome-file>
  <welcome-file>default.jsp</welcome-file>
 </welcome-file-list>
 
 <!-- Registrar el servlet LogueoServlet -->
 <servlet>
  <description></description>
  <display-name>LogueoServlet</display-name>
  <servlet-name>LogueoServlet</servlet-name>
  <servlet-class>aprendamos.servlets.LogueoServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>LogueoServlet</servlet-name>
  <url-pattern>/logueo</url-pattern>
  <url-pattern>/sisepuede</url-pattern>
 </servlet-mapping>
 
 <!-- Configurar el tiempo de inactividad de la sesión -->
 <session-config>
  <session-timeout>30</session-timeout>
 </session-config>
 
 <!-- Registrar el servlet MantenerClienteServlet -->
 <servlet>
  <description></description>
  <display-name>MantenerClienteServlet</display-name>
  <servlet-name>MantenerClienteServlet</servlet-name>
  <servlet-class>aprendamos.servlets.MantenerClienteServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>MantenerClienteServlet</servlet-name>
  <url-pattern>/mantenimiento</url-pattern>
 </servlet-mapping>
 
 <!-- Registrar los recursos properties -->
 <context-param>
  <description>Ruta del recurso properties</description>
  <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
  <param-value>recursos.NoMeRindo</param-value>
 </context-param>
</web-app>

3. Empezamos a reemplazar los texto de las páginas por los properties, para ello, debemos importar la librería fmt de JSTL

Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!-- Referenciamos a la librería fmt de JSTL -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link href="estilos/facilito.css" rel="stylesheet" type="text/css">
</head>
<body>
 <table>
  <tr>
   <!-- Aqui va la cabecera -->
   <td colspan="2" align="center"><jsp:include page="cabecera.jsp" /></td>
  </tr>
  <tr>
   <!-- Aqui va el menu -->
   <td><jsp:include page="menu.jsp" /></td>
   <!-- Aqui va el cuerpo -->
   <td>
    <table class="control">
     <tr>
      <td colspan="2" align="center">
       <fmt:message key="primerKey"></fmt:message>
       <fmt:message key="segundoKey"></fmt:message>
      </td>
     </tr>
     <!-- Usando "EL" recuperamos los datos de la sesión y del request.
          En "EL" existe objetos predefinidos:
          param , representa los parámetros que llegan en el request
          requestScope, permite acceder a los atributos  en el request
          sessionScope, permite accedder a los atributos en la  sesion web
     -->
     <tr>
      <td>Usuario:</td>
      <td>${sessionScope.usuario.email}</td>
     </tr>
     <tr>
      <td>Fecha Nac.:</td>
      <td>${sessionScope.usuario.fecnac}</td>
     </tr>
     <tr>
      <td>Nombre:</td>
      <td>${sessionScope.usuario.nombre}</td>
     </tr>
  </table>
  </td>
  </tr>
  <tr>
   <!--  Aqui va el pie -->
   <td colspan="2" align="center"><jsp:include page="pie.jsp" /></td>
  </tr>
</table>
</body>
</html>


El uri es el nombre lógico de la librería de etiquetas que queremos referenciar y prefix es el prefijo corto del uri.

4. Ejecutamos nuevamente el proyecto y tendremos el siguiente cambio, esta vez estamos mostrando los textos traídos del recurso propertie



Descargar ejercicio
Descargar archivo

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!