Download MSc. Daniel Alejandro Yucra Sotomayor Pag. - 1
Document related concepts
no text concepts found
Transcript
Ingeniería de Software II Laboratório 4 Aplicaciones Complementarias con JSP 1. Creación de un buscador de Registros En el proyecto Gestión de Estudiantes, vamos a adicionar otros módulos para darle más funcionalidad a esta aplicación. Crear en el proyecto del laboratorio 2 (Proyecto Gestión de Estudiante), el archivo JSP “busquedasimple.jsp”. El siguiente script permite buscar registros de una base de datos, a continuación el código fuente: <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/estudiante?user=root&password=uigv"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; // preparando condicion de busqueda int clave = Integer.parseInt(request.getParameter("CLAVEB")); // construyendo select con condicion String q="select * from persona where clave="+clave; // mandando el sql a la base de datos try { tabla = instruccion.executeQuery(q); // mandando resultset a tabla html out.println("<H3>Consulta de la Tabla Persona</H3>"); out.println("<TABLE Border=10 CellPadding=5><TR>"); out.println("<TH bgcolor=#525666><FONT COLOR=WHITE>CÓDIGO<font></TH><TH bgcolor=#525666><FONT COLOR=WHITE>NOMBRE Y APELLIDO</FONT></TH><TH bgcolor=#525666><FONT COLOR=WHITE>EDAD</FONT></TH><TH bgcolor=#525666><FONT COLOR=WHITE>ESTATURA</FONT></TH</TR>"); while(tabla.next()) { out.println("<TR>"); out.println("<TD>"+tabla.getString(1)+"</TD>"); out.println("<TD>"+tabla.getString(2)+"</TD>"); MSc. Daniel Alejandro Yucra Sotomayor Pag. - 1 - Ingeniería de Software II out.println("<TD>"+tabla.getString(3)+"</TD>"); out.println("<TD>"+tabla.getString(4)+"</TD>"); out.println("</TR>"); }; // fin while out.println("</TABLE></CENTER></DIV></HTML>"); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {}; }; // construyendo forma dinamica out.println("<FORM ACTION=busquedasimple.jsp METHOD=post>"); out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=BUSCAR><BR>"); out.println("</FORM>"); %> El resultado de esta solución es la muestra en la figura 01 Figura 01: Ingresando clave A continuación muestra el detalle de uno de los registros buscados: MSc. Daniel Alejandro Yucra Sotomayor Pag. - 2 - Ingeniería de Software II Figura 02: Resultado de la Búsqueda 2. Búsqueda con Filtro A continuación vamos a crear un script que permite realizar búsquedas más personalizadas, de acuerdo algún criterio de búsqueda por ejemplo edades menores a 20 años o estaturas menos de 180 cm. Crear el archivo JSP “busquedafiltro.jsp”. El siguiente script permite buscar registros de una base de datos de acuerdo a un criterio, a continuación el código fuente: <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/estudiante?user=root&password=uigv"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); MSc. Daniel Alejandro Yucra Sotomayor Pag. - 3 - Ingeniería de Software II instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; // preparando condicion de busqueda int edad = Integer.parseInt(request.getParameter("EDAD")); String q="select * from persona where edad >="+edad; // mandando el sql a la base de datos try { tabla = instruccion.executeQuery(q); // mandando resultset a tabla html out.println("<H3>Resultados de la Busqueda </H3>"); out.println("<TABLE Border=10 CellPadding=5><TR>"); out.println("<TH bgcolor=#525666><FONT COLOR=WHITE>CÓDIGO<font></TH><TH bgcolor=#525666><FONT COLOR=WHITE>NOMBRE Y APELLIDO</FONT></TH><TH bgcolor=#525666><FONT COLOR=WHITE>EDAD</FONT></TH><TH bgcolor=#525666><FONT COLOR=WHITE>ESTATURA</FONT></TH</TR>"); while(tabla.next()) { out.println("<TR>"); out.println("<TD>"+tabla.getString(1)+"</TD>"); out.println("<TD>"+tabla.getString(2)+"</TD>"); out.println("<TD>"+tabla.getString(3)+"</TD>"); out.println("<TD>"+tabla.getString(4)+"</TD>"); out.println("</TR>"); }; // fin while out.println("</TABLE></CENTER></DIV></HTML>"); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {}; }; MSc. Daniel Alejandro Yucra Sotomayor Pag. - 4 - Ingeniería de Software II // construyendo forma dinamica out.println("<FORM ACTION=busquedafiltro.jsp METHOD=post>"); out.println("EDAD > =<INPUT TYPE=text NAME=EDAD><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=FILTRAR><BR>"); out.println("</FORM>"); %> El resultado de esta solución es la muestra en la figura 03 Figura 03: Ingresando edad A continuación los detalles del resultado: Figura 04: Resultado de la consulta MSc. Daniel Alejandro Yucra Sotomayor Pag. - 5 - Ingeniería de Software II 3. Creación del Módulo Login El proyecto de Gestión de Mantenimiento debe tener por lo menos un acceso autorizado para poder adicionar, eliminar o modificar registros. Este módulo esta implementado con sesiones, el cual se debe cerrar una vez que deje de gestionar el módulo. Para desarrollar este módulo es necesario crear un Menú Principal en caso que el logueo sea exitoso, el script también analizar casos cuando no llenen datos y en situaciones en donde el nombre de usuario y password sean incorrectos. Además vamos a implementar el script para cerrar la sesión. a) Primero debe crear el archivo “login.jsp” <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-88591"%> <% // Leemos la variable de sessión 'validado' Boolean validado = (Boolean) session.getAttribute( "validado" ); // Si la variable de session 'valiadado' ya // ha sido creada o el valor es 'true' if( validado!=null && validado.booleanValue()) // Redireccionamos a la página bienvenido.jsp response.sendRedirect( "principal.jsp" ); %> <!DOCTYPE html PUBLIC "http://www.w3.org/TR/html4/loose.dtd" > "-//W3C//DTD HTML 4.01 Transitional//EN" <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link rel="stylesheet" href="style.css" type="text/css" /> <title>Login</title> </head> MSc. Daniel Alejandro Yucra Sotomayor Pag. - 6 - Ingeniería de Software II <body> <% // Leemos la variable de sesión 'usuario' String usuario = (String) session.getAttribute( "usuario" ); // Si las variable de sesión 'validado' // y 'usuario' ya habia sido creadadas if(validado!=null && usuario!=null) // Mostramos mensaje de advertencia out.println("<p>Usuario o contraseña incorrectos</p>"); // Si la variable de sesión usuario // no ha sido creada if(usuario==null) // Instanciamos la variable local 'usuario' usuario = ""; // Borramos la variable de sesión 'usuario' session.setAttribute( "usuario", null); %> <h1>Sistema Gestión de Mantenimiento de Estudiantes</h1> <h2>Login del Sistema</h2> <form method="post" action="principal.jsp" name="formLogin"> <input type="text" name="usuario" value="<%=usuario%>"><br> <input type="password" name="contrasena"><br> <input type="submit" name="enviar" value="enviar"> </form> </body> MSc. Daniel Alejandro Yucra Sotomayor Pag. - 7 - Ingeniería de Software II </html> b) A continuación creamos el script “principal.jsp”, en caso que el logueo sea exitoso. <%@ page import="java.sql.*" %> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-88591"%> <% // Leemos la variable de sesión 'validado' Boolean validado = (Boolean) session.getAttribute( "validado" ); // Si la variable de sesión 'validado' no ha // sido creada o contiene un valor 'false' if( validado==null || !validado.booleanValue() ) { // Leemos la variable POST 'usuario' String usuario= request.getParameter( "usuario" ); // Leemos la variable POST 'contrasena' String contrasena = request.getParameter( "contrasena" ); // Si las variables POST 'usuario' y 'contrasena' // existen y 'usuario' contiene texto if(usuario!=null && contrasena!=null && !usuario.equals("") ) { // Establecemos la variable de sessión 'usuario' session.setAttribute( "usuario", usuario); // Cargamos el Driver de MySQL MSc. Daniel Alejandro Yucra Sotomayor Pag. - 8 - Ingeniería de Software II Class.forName( "com.mysql.jdbc.Driver" ); // Creamos una conección a MySQL, Sintaxis: // jdbc:mysql://[servidor]:[puerto]/[base de datos], usuario, contraseña Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost/estudiante" , "root", "uigv" ); // Creamos un Statement Statement stmt = conn.createStatement(); // Cramos un Resultado de Consulta SQL ResultSet rs = stmt.executeQuery( "SELECT usuario FROM usuarios " + "WHERE usuario='" + usuario + "' " + "AND contrasena='" + contrasena + "'" ); // Si el resultado contiene filas if( rs.next() ) // Establecemos la variable local // 'validado' a true validado = new Boolean(true); // Cerramos el Statment stmt.close(); // Cerramos la conexión conn.close(); } } // Si la variable de sesión // 'validado' no ha sido creada if(validado==null) MSc. Daniel Alejandro Yucra Sotomayor Pag. - 9 - Ingeniería de Software II // Establecemos la variable local // 'validado' a true validado = new Boolean(false); // Añadimos la variable de sesión 'validado' // con el contenido de la variable local session.setAttribute( "validado", validado); // Si la variable local 'validado' es false if( !validado.booleanValue() ) // Redireccionamos a la página login.jsp response.sendRedirect( "login.jsp" ); %> <!DOCTYPE html PUBLIC "http://www.w3.org/TR/html4/loose.dtd"> "-//W3C//DTD HTML 4.01 Transitional//EN" <html> <head><title>Bienvenido</title> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body>Bienvenido al Módulo de Gestión de Estudiante</body><p> <% HttpSession sesion=request.getSession(); String nombre=(String)sesion.getAttribute("usuario"); out.println("Usuario Activo:" +nombre); %> <a href="salir.jsp"><img src="/GestionEstudiantes/imagenes/cerrar.png" width="20" border="0"> Cerrar Sesión</a> MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 10 Ingeniería de Software II <jsp:include page="consultasimple.jsp" /> <table border="0"> <tr> <td> <a href="adicion.jsp"><img src="/GestionEstudiantes/imagenes/adicion.png" border="0"> <br>Adición</a> </td> <td> <a border="0"> href="busquedasimple.jsp"><img src="/GestionEstudiantes/imagenes/buscar.png" <br>Buscar</a> </td> <td> <a href="modifica.jsp"><img src="/GestionEstudiantes/imagenes/editar.png" border="0"> <br>Editar</a> </td> <td> <a href="eliminar.jsp"><img src="/GestionEstudiantes/imagenes/elimina.png" border="0"> <br>Eliminar</a> </tr> </table> </html> c) Para cerrar la sesión creada, crearemos el script “salir.jsp”. <%@ page session="true" %> <% HttpSession sesionOk = request.getSession(); sesionOk.invalidate(); %> MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 11 Ingeniería de Software II <jsp:forward page="login.jsp"/> d) Además deberá crear la carpeta “imagenes” para alojar los iconos. Figura 05: Estructura del proyecto e) A continuación la ejecución del módulo Figura 06: Ingreso de Usuario y Password Cuando ingresan el usuario o password errado. MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 12 Ingeniería de Software II Figura 07: Cuando el usuario y password son incorrectos Cuando el nombre de usuario y password es correcto: Figura 08: Menú de mantenimiento Cuando cierra la sesión debe volver nuevamente al script “login.jsp” 4. Mejorando el diseño de los módulos Para mejorar la presentación es necesario crear un hoja de estilo (CSS) a) Para crear la Hoja de Estilo desde Netbeans debe hacer click derecho en el proyecto y seleccionar, categoría “Web” y Files Types “Cascading Style Sheet”. MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 13 Ingeniería de Software II Figura 09: Seleccionando la opción CSS Nuestro archivo CSS se llamará “style.css” Figura 10: Creando el archivo CSS A continuación copiar el siguiente código para la hoja de estilo: /* Document : style Created on : 16-ago-2011, 0:10:38 Author : Daniel Yucra Sotomayor Description: MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 14 Ingeniería de Software II Purpose of the stylesheet follows. */ /* TODO customize this sample style Syntax recommendation http://www.w3.org/TR/REC-CSS2/ */ root { display: block; } *{ font-family:sans-serif; font-size:18px; } body{ background-color:#fbfbfb; } h1, h2, h3, h4, h5, h6{ text-align:center; } p.alerta{ MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 15 Ingeniería de Software II text-align:center; color:#F00; position:relative; } form{ position:relative; width:510px; min-width:510px; margin-left:-255px; left:50%; margin-top:1%; top:25%; } form fieldset{ -moz-border-radius:10px; border-style:solid; border-width:1px; border-color:#868686; } form input{ -moz-border-radius:5px; height:30px; border:1px solid #868686; MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 16 Ingeniería de Software II padding-left:5px; padding-right:5px; } form button{ -moz-border-radius:5px; border:1px solid #868686; background-color:#d6d6d6; margin:10px 0; } div#contenedor{ margin:5em auto 0 auto; width:510px; border:1px solid #868686; -moz-border-radius:10px; padding:10px; } Para adicionar el archivo de referencia de la hoja de estilo solo debe copiar esta línea. <link rel="stylesheet" href="style.css" type="text/css" /> Por ejemplo debe estar antes de definir el título de una página <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link rel="stylesheet" href="style.css" type="text/css" /> <title>Login</title> MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 17 Ingeniería de Software II </head> <body> El resultado es el que debe mostrar a continuación: Figura 11: Módulo de Logueo mejorado en su presentación 5. Creando la cabecera y pie de página para el proyecto a) Creación del encabezado Para poder colocar un encabezado solo debe crear el archivo “header.jsp” <center> <img src="/GestionEstudiantes/imagenes/banner.png"></img> </center> Figura 12: Cabecera con imagen b) Creación del Pie de Página Para poder colocar un encabezado solo debe crear el archivo “footer.jsp” <table border="0" cellspacing="5" cellpadding="0"> <tr> MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 18 Ingeniería de Software II <td colspan="2" align="center">Universidad Inca Garcilaso de la Vega<br> Oficina de Informática y Telecomunicaciones<br> Todos los derechos reservados Copyright © 2011</br> </td> </tr> </table> c) Adicionar el header.jsp y footer.jsp al módulo de gestión de estudiantes En el script “login.jsp”, debe adicionar solo 2 líneas <jsp:include page="header.jsp" /> y <jsp:include page="footer.jsp" /> Donde corresponda. Finalmente el código del script “login.jsp” debe quedar de esta manera: Figura 13: Módulo de Logueo con header y footer Para el Menu principal, debería de quedar de la siguiente manera: MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 19 Ingeniería de Software II Figura 14: Módulo de Gestión de Estudiante con header y footer Actividades: a) Aplicar sesiones al resto de los script creados b) Adicionar la hoja de estilo al resto de los script creados c) Adicionar el header.php y footer.php a todo el proyecto Importante: Por 2 puntos a la práctica Calificada (a los 2 primeros que presenten al final del laboratorio) MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 20 Ingeniería de Software II FACULTAD DE INGENIERÍA DE COMPUTO Y SISTEMAS Docente: MSc. Daniel Alejandro Yucra Sotomayor Lima, Agosto, del 2011 Consultas: dyucra@gmail.com MSc. Daniel Alejandro Yucra Sotomayor - Pag. - 21