Download MSc. Daniel A. Yucra Sotomayor Pag. - 1
Document related concepts
no text concepts found
Transcript
Laboratorio Nro. 7 Desarrollo de una aplicación Login con JSF y Base de datos I. Competencia General: Comprender el entorno de desarrollo de desarrollo de aplicaciones con 4 capas (datos, lógica de negocio, web y cliente), utilizando el framework JSF. II. Introducción Esta aplicación proporciona autenticación para acceder a la aplicación después de iniciar sesión con éxito. Para acceder a la aplicación debería tener un identificador de usuario y una contraseña en una base de datos. III. Creación de la Base de Datos y Tablas Crear la Base de Datos “sistema” en MySql A continuación ejecutar el siguiente script SQL CREATE TABLE IF NOT EXISTS `usuarios` ( `ID` int(11) NOT NULL, `UName` varchar(50) NOT NULL, `PWord` varchar(50) NOT NULL, UNIQUE KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; --- Volcado de datos para la tabla `usuarios` -INSERT INTO `usuarios` (`ID`, `UName`, `PWord`) VALUES (1, 'daniel', 'daniel'), (2, 'carlos', 'carlitros'), (3, 'jose', 'joselito'); IV. Creación del Proyecto Logueo con JSF 4.1 Crear el Proyecto Utilizando alguna versión de Netbeans crear el proyecto “Logueo”. Una vez creado automáticamente creará un archivo de inicio, el mismo que se armará código para el formulario de logueo 4.2 Código para el formulario MSc. Daniel A. Yucra Sotomayor A continuación colocaremos el siguiente código en el archivo “welcomeJSF.jsp”: <%-Document : Login Created on : Jan 18, 2011, 7:58:03 PM Author : Daniel Yucra --%> <%@page contentType="text/html" pageEncoding="UTF8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> <title>LOGIN</title> </head> <body> <center> <f:view> <h:form id="login_frm"> <h2>Acceder:</h2> <table width="250" border="0" cellspacing="0" cellpadding="2"> <tr> <td colspan="2"> <h:message for="username" styleClass="errorMsg"/><br> <h:message for="password" styleClass="errorMsg"/> </td> </tr> <tr> <td><h:outputText value="Username: "/></td> <td><h:inputText id="username" value="#{login_bean.username}" required="true" styleClass="input_text"/></td> </tr> <tr> <td><h:outputText value="Password: "/></td> <td><h:inputSecret id="password" value="#{login_bean.password}" required="true" styleClass="input_text"/></td> </tr> <tr> <td colspan="2" align="center"> <h:commandButton action="#{login_bean.checkValidUser}" value="Login" type="submit"/></td> </tr> </table> </h:form> </f:view> </center> </body> </html> Pag. - 1 - * @author Daniel Yucra */ import java.sql.*; import java.util.*; Los objetos más importantes son: <h:inputText id="username" value="#{login_bean.username}" required="true" styleClass="input_text"/> <h:inputSecret id="password" value="#{login_bean.password}" required="true" styleClass="input_text"/> <h:commandButton action="#{login_bean.checkValidUser}" value="Login" type="submit"/> @ManagedBean(name="login_bean") @RequestScoped public class login_bean { private String username; private String password; private String dbusername; private String dbpassword; Esto implica que tendríamos que crear una clase denombre “login_bean”, con sus respectivos atributos “username” y “password”, además de un método “checkValidUser” los mismo que servirán para que el usuario pueda interactuar. public String getDbpassword() { return dbpassword; } public String getDbusername() { return dbusername; } public String getPassword() { return password; } La primera parte de la aplicación debe correr, recuerde que se ha combinado código JSF, JSP más código HTML. public void setPassword(String password) { this.password = password; } 4.3 Creación “login_bean” public String getUsername() { return username; } del JSF Managed Beans Para que el formulario pueda interactuar es necesario crear la clase “bean” y los 3 objetos puedan ser aceptados por la clase. A continuación debe asignarle nombre a la clase y nombre al nuevo paquete, donde albergará esta clase especial Nombre de la Clase: login_bean Nombre del Paquete: beans A continuación a la clase creada “login_bean”, le colocaremos el siguiente código, recuerde que esta clase algunos atributos deben contener los métodos set y get: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package beans; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; /** * MSc. Daniel A. Yucra Sotomayor public void setUsername(String username) { this.username = username; } Connection con; Statement ps; ResultSet rs; String SQL_Str; public void dbData(String UName) { try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost: 3306/sistema","root","uigv"); ps = con.createStatement(); SQL_Str="Select * from usuarios where UName like ('" + UName +"')"; rs=ps.executeQuery(SQL_Str); rs.next(); dbusername=rs.getString(2).toString(); dbpassword=rs.getString(3).toString(); } catch(Exception ex) { ex.printStackTrace(); System.out.println("Exception Occur :" + ex); Pag. - 2 - 4.5 Creación de las 2 páginas JSF } } A continuación debe crear las 2 páginas JSF: public String checkValidUser() { dbData(username); if(username.equalsIgnoreCase(dbusername)) { if(password.equals(dbpassword)) return "valid"; else { return "invalid"; } } else { return "invalid"; } } Código de la Página “success.jsp” <%-Document : success Created on : 24-oct-2011, 18:32:14 Author : Daniel Yucra --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> } El código que permite validar el nombre de usuario y contraseña es el siguiente: public String checkValidUser() { dbData(username); if(username.equalsIgnoreCase(dbusername)) { if(password.equals(dbpassword)) return "valid"; else { return "invalid"; } } else { return "invalid"; } } Figura 13: Código del método para validación 4.4 Implementación del resto de paginas JSP Para completar el proyecto se crearan dos paginas JSP a) En el caso de que el nombre y usarios sea exitoso (loginexitoso.jsp) MSc. Daniel A. Yucra Sotomayor <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <f:view> <h:form> <h2>Hola <h:outputText value="#{login_bean.username}"/>, tu login es correcto.</h2> </h:form> </f:view> </body> </html> Código de la Página “login_fail.jsp” <%-Document : login_fail Created on : 24-oct-2011, 18:33:52 Author : Daniel Yucra --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> Pag. - 3 - <!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"> <link rel="stylesheet" type="text/css" href="style.css"> <title>LOGIN</title> </head> <body> <center> <f:view> <h:form id="login_frm"> <h2>Acceder:</h2> <table width="250" border="0" cellspacing="0" cellpadding="2"> <tr> <td colspan="2"> Usuario o Password Incorrecto!!<br> <h:message for="username" styleClass="errorMsg"/><br> <h:message for="password" styleClass="errorMsg"/> </td> </tr> <tr> <td><h:outputText value="Username: "/></td> <td><h:inputText id="username" value="#{login_bean.username}" required="true" styleClass="input_text"/></td> </tr> <tr> <td><h:outputText value="Password: "/></td> <td><h:inputSecret id="password" value="#{login_bean.password}" required="true" styleClass="input_text"/></td> </tr> <tr> <td colspan="2" align="center"> <h:commandButton action="#{login_bean.checkValidUser}" value="Login" type="submit"/></td> </tr> </table> </h:form> </f:view> </center> </body> </html> MSc. Daniel A. Yucra Sotomayor 4.6 Archivo de Configuración faces-config.xml Para unir las páginas creadas, y articulas con la clase vean se debe definir las respectivas reglas de navegación y casos. El código es el que muestra a continuación: <?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ==================== --> <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> <managed-bean> <managed-bean-name>login_bean</managed-beanname> <managed-bean-class>beans.login_bean</managed-beanclass> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <navigation-rule> <description>Loging Page</description> <from-view-id>/welcomeJSF.jsp</from-view-id> <navigation-case> <from-action>#{login_bean.checkValidUser}</from-action> <from-outcome>valid</from-outcome> <to-view-id>/success.jsp</to-view-id> </navigation-case> <navigation-case> <from-action>#{login_bean.checkValidUser}</from-action> <from-outcome>invalid</from-outcome> <to-view-id>/login_fail.jsp</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <description>ReLoging Page</description> <from-view-id>/login_fail.jsp</from-view-id> <navigation-case> <from-action>#{login_bean.checkValidUser}</from-action> <from-outcome>valid</from-outcome> <to-view-id>/success.jsp</to-view-id> </navigation-case> <navigation-case> <from-action>#{login_bean.checkValidUser}</from-action> <from-outcome>invalid</from-outcome> <to-view-id>/login_fail.jsp</to-view-id> </navigation-case> </navigation-rule> <application> <message-bundle>messages.message</message-bundle> </application> </faces-config> Pag. - 4 - 4.7 Creación de la Hoja de Estilo (CSS) Para mejorar la presentación de la aplicación debe crear una hoja de estilos, a continuación el código: /* Document : style Created on : Jan 18, 2010, 8:29:32 PM Author : Daniel Yucra Description: Figura 1: Formulario de Ingreso */ /* TODO customize this sample style Syntax recommendation http://www.w3.org/TR/REC-CSS2/ */ root { display: block; } body { font-family: sans-serif; font-size: 10px; color: #000000; } h2 { font-size: 16px; color: #3d2dff; font-family:serif; } .errorMsg { font-size: 12px; font-family: serif; font-weight: bold; color: #FF0000; padding: 5px; } Figura 2: Cuando usuario y password es incorrecto Figura 3: Cuando usuario y password es correcto Docente: MSc. Daniel Alejandro Yucra Sotomayor Lima, Abril del 2011 Consultas: [email protected] .input_text{ font-family:Arial, Helvetica, sans-serif; font-size:10px; border:1px solid #FF7C08; } 4.8 Ejecutando la aplicación Solo bastará compilar y ejecutar el proyecto: MSc. Daniel A. Yucra Sotomayor Pag. - 5 -