lunes, 6 de febrero de 2012

Javabeans


Un Javabeans es una clase plana (POJO – Plain Old Java Objects) con atributos privados, constructor y métodos get y set. En JSP se usan para pasar datos de un lado a otro y sustituye a los servlets que se han visto en entradas anteriores, para hacer más claro y eficiente el código y contribuye a la separación entre lógica de negocio y presentación.
Por ejemplo, usando el ejemplo de inicio de sesión de usuarios que se vió en la agenda personal, el equivalente simplificado sería este:

  • Se crea un clase Javabean llamada Usuario.java. En ella se definen los atributos y los métodos get y set.
package org;

public class Usuario implements java.io.Serializable {
    private int id;
    private String nombre;
    private String email;
    private String clave;
    
    public int getId()
    {
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
    
    public String getNombre()
    {
        return nombre;
    }
    public void setNombre(String nombre){
        this.nombre=nombre;
    }
    
    public String getEmail()
    {
        return email;
    }
    public void setEmail(String email){
        this.email=email;
    } 

    public String getClave()
    {
        return clave;
    }
    public void setClave(String clave){
        this.clave=clave;
    }

}
  • Después, en el index.jsp, se crea el formulario igual que en casos anterior. Los campos tienen que tener el mismo ‘name’ que el del atributo de la clase:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id="usuario" scope="session" />
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Inicio sesión</title>
</head>
<body>
  
 <div align="center" style="background-color:gainsboro">
     <form method="POST" action="IniciarSesionBeans.jsp" name="frm" id="idForm">
            <table style="background-color: gainsboro">
                <tr>
                    <td>
                        <label>Nombre:</label>
                    </td>
                    <td>
                        <input type="text" id="txtNombre" name="nombre"/>
                    </td>
                </tr>
                <tr>
                    <td>
                        <label>Password:</label>
                    </td>
                    <td>
                        <input type="password" id="txtPassword" name="clave"/>
                    </td>
                </tr>
                <tr align="right">
                    <td>
                        <input type="button" name="BtnEnviar" id="BtnEnviarId" value="ENVIAR" onclick="Validar();" />                        
                    </td>
                </tr>
            </table>
            </form>
 </div>
    </body>
</html>
  • En IniciarSesionBeans.jsp se va a usar el bean creado mediante el tag de acción: <jsp:useBean id=”usuario” scope=”session” />
    Se usa la visibilidad ‘session’ para hacer que los atributos de usuario se puedan usar en cualquier parte del proyecto.
    Mediante
    <jsp:setProperty name=”usuario” property=”*” />
    se obtiene todos los valores del formulario de index.jsp y se le asignan a los atributos de la clase usuario.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.lang.String"%>
<%@page import="java.lang.Object"%>
<!DOCTYPE html>
<jsp:useBean id="usuario" scope="session" />
<jsp:setProperty name="usuario" property="*" />

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
     
        <%
        Connection conn=null;
        Statement stm= null;
        String nombre,password;
        
        try {
            nombre=usuario.getNombre();
            password=usuario.getClave();
            
            //crear el driver
            Class.forName("com.mysql.jdbc.Driver").newInstance(); 

            //obtener el manejador
            conn=DriverManager.getConnection("jdbc:mysql://localhost/banco", "root", "forman"); 

            //obtener el statement
            stm= conn.createStatement(); 

            String sql;
            //consulta
            sql="SELECT idusuario FROM usuario WHERE nombre='"+nombre+"' AND clave='"+password+"';";
            //ejecutar la consulta
            ResultSet rst = stm.executeQuery(sql);
            if(rst.next()){
                usuario.setId(Integer.parseInt(rst.getString("idusuario")));
                usuario.setNombre(nombre);
            }else{
                usuario.setId(-1);
            }
            request.getRequestDispatcher( "/index.jsp" ).forward( request, response );
            
             stm.close(); 

        }catch(SQLException err){ 

            System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
            

        }catch(Exception e){ 

            System.out.println(e.getMessage());
            

        }finally{ 

            //cerrar la conexion
            if (conn!=null){
                try{
                        conn.close();
                }catch(Exception e){}
            }
            out.close();
        }
        %>
      
    </body>
</html>
En rojo se puede ver como se obtienen los valores que se guardaron en los atributos de usuario desde el formulario. En naranja se muestra como establecer los atributos id y nombre a usuario, de forma que, como se puso scope=”session”, pueda ser utilizado en otros jsp del proyecto, simplemente poniendo al principio del código el <jsp:useBean id=”usuario” scope=”session” /> y recogiendo las varibles con usuario.getId().
Si no se pone scope=”session” los valores de los atributos del Javabean solo se podrán manipular dentro de ese mismo jsp.
Por último, cuando sea necesario cerrar la sesión y borrar todos las variables, se hace igual que en servlets:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id="usuario" scope="session" />
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
        usuario.setId(0);
        HttpSession sesion = request.getSession(false);
        sesion.invalidate();
        request.getRequestDispatcher( "/index.jsp" ).forward( request, response );
        %>
        
    </body>
</html>

No hay comentarios:

Publicar un comentario