Está en la página 1de 8

USO DE JAVABEANS EN JSP Y MANEJO DE SESIONES Vamos a crear un JSP que maneje ms de un JavaBean y que se llame a l mismo.

Adems va a utilizar el patrn MVC para separar la lgica de la presentacin. Partiendo de un prototipo inicial, tendremos una pantalla que muestre los departamentos de una empresa y a partir del departamento seleccionado, se mostrarn solamente los empleados del departamento seleccionado. El prototipo inicial ser el siguiente:

Entonces partiendo del prototipo anterior, debemos crear un JavaBean para encapsular los datos de cada departamento y otro JavaBean para encapsular los datos de cada uno de los empleados que se mostrarn en la tabla. Crearemos la clase Departamento en un archivo llamado Departamento.java. Este archivo debe guardarse en jakarta-tomcat-4.1.12\webapps\temas\WEB-INF\classes\temas\paq02 package temas.paq02; import java.io.Serializable; public class Departamento implements Serializable { private int deptId; private String deptName; public void setDeptId(int newDeptId) { deptId = newDeptId; } public int getDeptId() { return deptId; } public void setDeptName(String newDeptName) { deptName = newDeptName;

} public String getDeptName() { return deptName; } } Ahora crearemos la clase Empleado en un archivo llamado Empleado.java. Este archivo debe guardarse en jakarta-tomcat-4.1.12\webapps\temas\WEB-INF\classes\temas\paq02 package temas.paq02; import java.io.Serializable; public class Empleado implements Serializable { private int empId; private String empFname; private String empLname; public void setEmpId(int newEmpId) { empId = newEmpId; } public int getEmpId() { return empId; } public void setEmpFname(String newEmpFname) { empFname = newEmpFname; } public String getEmpFname() { return empFname; } public void setEmpLname(String newEmpLname) { empLname = newEmpLname; } public String getEmpLname() { return empLname; } } Posteriormente crearemos las clases controller de ambos JavaBeans. Este es el cdigo para el DepartamentoController.java package temas.paq02;

import java.sql.*; import java.util.ArrayList; public class DepartamentoController { public ArrayList getDepartamentos() { String query = "SELECT dept_id, dept_name FROM department"; ArrayList arrayListResultado = new ArrayList(0); Connection con = null; Statement stm = null; ResultSet rs = null; try { Class.forName ("com.sybase.jdbc2.jdbc.SybDriver"); con = DriverManager.getConnection ("jdbc:sybase:Tds:localhost:2638/asademo", "dba", "sql"); stm = con.createStatement(); rs = stm.executeQuery( query ); while( rs.next() ) { Departamento dep = new Departamento(); dep.setDeptId( rs.getInt("dept_id") ); dep.setDeptName( rs.getString("dept_name") ); arrayListResultado.add( dep ); } } catch(ClassNotFoundException e) { System.out.println("Exception con el driver"); e.printStackTrace(); } catch(SQLException e) { System.out.println("Exception SQL"); e.printStackTrace(); } finally { try { if( con != null ) con.close(); } catch(Exception e) { System.out.println("Exception al cerrar la conexion"); } finally { return arrayListResultado; } } } }

Ahora el cdigo del EmpleadoController: package temas.paq02; import java.sql.*; import java.util.ArrayList; public class EmployeeController { public ArrayList getEmpleados(int dept_id) { String query = "SELECT emp_id, emp_fname, emp_lname FROM employee where dept_id=?"; ArrayList arrayListResultado = new ArrayList(0); Connection con = null; PreparedStatement pstm = null; ResultSet rs = null; try { Class.forName ("com.sybase.jdbc2.jdbc.SybDriver"); con = DriverManager.getConnection ("jdbc:sybase:Tds:localhost:2638/asademo", "dba", "sql"); pstm = con.prepareStatement( query ); pstm.setInt(1, dept_id); rs = pstm.executeQuery(); while( rs.next() ) { Empleado emp = new Empleado(); emp.setEmpId( rs.getInt("emp_id") ); emp.setEmpFname( rs.getString("emp_fname") ); emp.setEmpLname( rs.getString("emp_lname") ); arrayListResultado.add( emp ); } } catch(ClassNotFoundException e) { System.out.println("Exception con el driver"); e.printStackTrace(); } catch(SQLException e) { System.out.println("Exception SQL"); e.printStackTrace(); } finally { try { if( con != null ) con.close(); } catch(Exception e) { System.out.println("Exception al cerrar la conexion"); }

finally { return arrayListResultado; } } } Ahora compilamos las 4 clases en una sola instruccin, usando el comodn *.java C:\jakarta-tomcat-4.1.12\webapps\temas\WEB-INF\classes> javac -d . .\temas\paq02\*.java Ahora vamos a crear el JSP llamado ConsultaDepartamento.jsp que se va a guardar en C:\jakarta-tomcat-4.1.12\webapps\temas: <html> <head><title>Consulta de empleados por departamento</title> </head> <body> <%@ page import="java.sql.*" %> <%@ page import="java.util.ArrayList" %> <%@ page import="temas.paq02.Departamento" %> <jsp:useBean id="depControlador" class="temas.paq02.DepartamentoController" /> <form name="form1" method="post" action="ConsultaDepartamento.jsp"> <font face="Arial, Helvetica, sans-serif"> <select name="deptId" size="1"> <% ArrayList arrayListDepartamento = depControlador.getDepartamentos(); for(int i=0; i<arrayListDepartamento.size(); i++) { Departamento dep = (Departamento)arrayListDepartamento.get(i); %> <option value="<%=dep.getDeptId()%>"><%=dep.getDeptName()%></option> <% } %> </select> <br> <input type="submit" name="Submit" value="Consultar empleados"> </font> </form> </body> </html> Una vez guardado el JSP y levantado el servidor Tomcat, accesamos al JSP directamente (sin pasar por un HTML) en el URL: http://localhost:8080/temas/ConsultaDepartamento.jsp }

Al seleccionar un departamento y despus seleccionar el botn Consultar empleados, el JSP se enva los datos a l mismo pero no se observa la lista de empleados porque hace falta llamar al controller del Empleado. Vamos a modificar el JSP: <html> <head><title>Consulta de empleados por departamento</title> </head> <body> <%@ page import="java.sql.*" %> <%@ page import="java.util.ArrayList" %> <%@ page import="temas.paq02.Departamento" %> <jsp:useBean id="depControlador" class="temas.paq02.DepartamentoController" /> <form name="form1" method="post" action="ConsultaDepartamento.jsp"> <font face="Arial, Helvetica, sans-serif"> <select name="deptId" size="1"> <% ArrayList arrayListDepartamento = depControlador.getDepartamentos(); for(int i=0; i<arrayListDepartamento.size(); i++) { Departamento dep = (Departamento)arrayListDepartamento.get(i); %> <option value="<%=dep.getDeptId()%>"><%=dep.getDeptName()%></option> <% } %> </select> <br> <input type="submit" name="Submit" value="Consultar empleados"> </font> </form> <p> <table border=1 width="100%"> <tr> <th>CLAVE</th> <th>NOMBRE</th> <th>APELLIDO</th> </tr>

<%@ page import="temas.paq02.Empleado" %> <jsp:useBean id="empControlador" class="temas.paq02.EmpleadoController" /> <% int deptId = 0; if( request.getParameter("deptId") != null ) deptId = Integer.parseInt( request.getParameter("deptId") ); ArrayList arrayListEmpleado = empControlador.getEmpleados(deptId); for(int i=0; i<arrayListEmpleado.size(); i++) { Empleado emp = (Empleado)arrayListEmpleado.get(i); %> <tr> <td><%=emp.getEmpId()%></td> <td><%=emp.getEmpFname()%></td> <td><%=emp.getEmpLname()%></td> </tr> <% } %> </table> </body> </html> Ahora al ejecutar el JSP desde la primera vez, ya se ejecuta el query que obtiene los empleados, pero como el deptId es cero (0), el mtodo getEmpleados(int deptId) devuelve cero empleados:

Pero al seleccionar un departamento, la lista de empleados se despliega: