¡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.
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
4. Actualizamos el servicio MantenerClienteService.java agregando los métodos para eliminar y modificar cliente.
Código
5. Actualizamos el servlet MantenerClienteServlet.java agregando los métodos para eliminar y modificar cliente.
Código
6. Creamos la página nuevoCliente.jsp
Código
7. Creamos la página modificaCliente.jsp
Codigo
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
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
2. Registrar los recursos properties en el archivo descriptor web.xml
Código
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
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
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
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" ?> xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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!