Servlets JSP Java BEANS JDBC Alberto Gimeno Arnal
Servlets, JSP, Java. BEANS, JDBC Alberto Gimeno Arnal alberto. gimeno@gmail. com Área de Lenguajes y Sistemas Informáticos Dpto. de Informática e Ingeniería de Sistemas Universidad de Zaragoza
Configuración PC • • Java. Server (TM) Web Development Kit (JSWDK) 1. 0. 1 JDK Estándar Enviroment (J 2 SE) + net. Beans PATH=D: UnivJAVAjswdk-1. 0. 1; D: UnivJAVAjdk 1. 6. 0 CLASSPATH=. ; D: UnivJAVAjdk 1. 6. 0libtools. jar; D: UnivJAVAjswdk-1. 0. 1libservlet. jar Alberto Gimeno Arnal 2
Configuración PC • • Los servlets tienen que guardarse en la ruta: ~~ WEB-INFservlets y podemos acceder a ellos a través de http: //localhost: 8080/examples/servlet/No mbre. Servlet Las paginas JSP, j. Beans en ~~ jswdk-1. 0. 1webpages Alberto Gimeno Arnal 3
SERVLET: ¿Qué se puede hacer? . 1. LEER información enviada por el usuario: formularios HTML o applets. 2. BUSCAR información en el cliente: navegador, cookies, sesiones. 3. GENERAR resultados, a través de bbdd, Java. Beans. 4. FORMATEAR los resultados de un documento: pagina HTML. 5. ASIGNAR parámetros a la respuesta al cliente: navegador, cookies , sesiones, …. 6. ENVIAR información al cliente: formato HTML, ZIP o GIF. Alberto Gimeno Arnal servlets 4
SERVLET: Estructura básica import java. io. *; import javax. servlet. http. *; public class Servlet. Hola. Figura extends Http. Servlet{ public void do. Get (Http. Servlet. Request request, Servlet. Response response) throws IOException, Servlet. Exception{ } public void do. Post (Http. Servlet. Request request, Servlet. Response response) throws IOException, Servlet. Exception{ } } Alberto Gimeno Arnal servlets 5
SERVLET: javax. servlet Interfaces Request. Dispacher Define un objeto que recibe peticiones desde un cliente y se las envia a otro (servlet, pagina HTML, jsp) Servlet Define una serie de métodos que todos los servlets deben implementar Servlet. Config Objeto de configuración usado por el motor de servlets Servlet. Context Define una serie de métodos para la comunicación entre servlets. Servlet. Request Objeto que ofrece información de la petición del cliente al servlet. Servlet. Response Objeto que permite al servlet enviar información al cliente. Single. Thread. Model Nos asegura que los servlets tratan una sola petición al mismo tiempo. Alberto Gimeno Arnal servlets 6
SERVLET: javax. servlet Clases Generic. Servlet Define servlet genérico independiente del protocolo Servlet. Input. Stream Canal de lectura de datos procedentes de la petici´ón del cliente. Servlet. Output. Stream Canal de salida para enviar datos al cliente. Excepciones Servlet. Exception Excepción general que podrá lanzar cualquier servlets. Unavailable. Exception Excepción de disponibilidad. Alberto Gimeno Arnal servlets 7
SERVLET: javax. servlet. http Interfaces Http. Servlet. Request Hereda del interfaz Servlet. Request, especificar peticiones realizadas a selvlet y recupera el contenido de los formularios HTML. Http. Servlet. Response Hereda del interfaz Servlet. Reponse, funcionalidad al envio respuestas al cliente Http. Session. Binding Listener Alberto Gimeno Arnal establece Identificación y almacenamiento de información de cada usuario concreto. Notificación de creación y destrucción de la sesión. servlets 8
SERVLET: javax. servlet. http Clases Cookie Información del cliente enviada por un servlet al navegador, almacenada por el navegador y que posteriormente el navegador enviara al servidor Web. Http. Servlet Clase abstracta de un servlet. Http. Session. Binding Evento que se envia para notificar la creación o destrucción de una sesión. Http. Utils Colección de métodos con utilidades para los servlets. Alberto Gimeno Arnal servlets 9
SERVLET: Estructura básica import java. io. *; import javax. servlet. http. *; public class Servlet. Hola. Figura extends Http. Servlet{ public void do. Get (Http. Servlet. Request request, Servlet. Response response) throws IOException, Servlet. Exception{ } public void do. Post (Http. Servlet. Request request, Servlet. Response response) throws IOException, Servlet. Exception{ } } Alberto Gimeno Arnal servlets 10
SERVLET: Conceptos básicos • • • Importar los paquetes javax. servlet, javax. servlet. http, java. io Heredar la clase abstracta Http. Servlet. Implementar los métodos do. Get() y do. Post() La clase se debe situar en un directorio especifico del servidor Web Tomcat. Invocarlo: http: //servidor/aplicacion/servlet/Clase. Servlet. Alberto Gimeno Arnal servlets 11
SERVLET: métodos Http. Servlet • void do. Delete (Http. Servlet. Resquest req, Http. Servlet. Response res) • void do. Get (Http. Servlet. Resquest req, Http. Servlet. Response res) • void do. Options (Http. Servlet. Resquest req, Http. Servlet. Response res) • void do. Post (Http. Servlet. Resquest req, Http. Servlet. Response res) • void do. Put (Http. Servlet. Resquest req, Http. Servlet. Response res) • void do. Trace (Http. Servlet. Resquest req, Http. Servlet. Response res) • void get. Last. Modified (Http. Servlet. Resquest req) • void service (Http. Servlet. Resquest req, Http. Servlet. Response res) Alberto Gimeno Arnal servlets 12
SERVLET: clase Generic. Servlet • • • void destroy() String get. Init. Parameter(String nombre) Enumeration get. Init. Parameter. Names() Servlet. Config get. Servlet. Config() Servlet. Context get. Servlet. Context() String get. Servlet. Info() String get. Servlet. Name() void init() void long(String mensaje) void service (Http. Servlet. Resquest req, Http. Servlet. Response res) Alberto Gimeno Arnal servlets 13
SERVLET: Ejemplo 1 (Hola. Figura. class) public class Hola. Figura extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws IOException, Servlet. Exception { rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); out. println("<html><head><title>¡Hola Figura!</title></head>"); out. println("<body>"); out. println("<marquee><h 1>¡Hola Figura!</h 1></marquee>"); out. println("</body></html>"); } public void do. Post(Http. Servlet. Request rq, Http. Servlet. Response rp) throws IOException, Servlet. Exception {do. Get(rq, rp); } } Alberto Gimeno Arnal servlets 14
SERVLET: Ejemplo 2 (Folder. Root. class) public class Folder. Root extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws IOException, Servlet. Exception { rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); File fichero = new File("D: /"); String[] contenido = fichero. list(); out. println("<html><head><title>Listado de Ficheros</title></head>"); out. println("<body><table border=1 align=‘center’>"); for(int i=0; i<contenido. length; i++) out. println("<tr><td>“ + contenido[i] + "</td></tr>"); out. println(“</table></body></html>"); } public void do. Post(Http. Servlet. Request rq, Http. Servlet. Response rp) throws IOException, Servlet. Exception {do. Get(rq, rp); } } Alberto Gimeno Arnal servlets 15
SERVLET: Ejemplo 3 (formulario. html) <body align="center" width="700"> <fieldset><legend><font size=+3>INFORMACION PERSONAL</font></legend> <form action="http: //localhost: 8080/examples/servlet/datos" method="POST" enctype="application/x-www-form-urlencoded" > <fieldset><legend><B>DATOS PERSONALES: </B></legend> <label>NOMBRE: </label><input name="nombre" maxlength=20 size=20> <label>APELLIDOS: </label><input name="apell" maxlength=32 size=32> <label>DIRECCIÓN: </label><input name="direccion" maxlength=70 size=70> <label>C. P. : </label><input name="cp" size=5 maxlength=5> <label> LOCALIDAD: </label><input name="localidad" maxlength=17 size=17> <label> PROVINCIA: </label><input name="provincia" maxlength=17 size=17> </fieldset> <input type=reset value="BORRAR"><input type=submit value="VALIDAR"> </form> </fieldset> </body> Alberto Gimeno Arnal servlets 16
SERVLET: Ejemplo 3 (datos. class) public class datos extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws IOException, Servlet. Exception { rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); out. println("<html><head><title>Datos Personales</title></head>"); out. println("<body><table border=1 align=‘center’"); out. println("<tr><td rowspan=2><h 3>DATOS PERSONALES</h 3></td></tr>"); out. println("<tr><td>NOMBRE: </td><td>“ + rq. get. Parameter("nombre")); out. println("</td></tr><td>APELLIDOS: </td><td>“ + rq. get. Parameter(“apell")); out. println("</td></tr><td>DIRECCION: </td><td>"); out. println(rq. get. Parameter("cp") + " " + rq. get. Parameter("localidad") + " (" + rq. get. Parameter("provincia") + ")"); out. println(“</table></body></html>"); } public void do. Post(Http. Servlet. Request rq, Http. Servlet. Response rp) throws IOException, Servlet. Exception {do. Get(rq, rp); } } Alberto Gimeno Arnal servlets 17
SERVLET: Ejemplo 4 (chat) chat. html chat. Envia. html chat. Ver. html Chat. Inserta Chat. Conversacion Alberto Gimeno Arnal servlets 18
SERVLET: Ejemplo 4 (chat. html) <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Frameset//EN"> <html> <head> <title>CHAT</title> </head> <frameset rows="*, 100"> <frame src="chat. Ver. html“ NORESIZE> <frame src="chat. Envia. html“NORESIZE > </frameset> </html> Alberto Gimeno Arnal servlets 19
SERVLET: Ejemplo 4 (chat. Envia. html) <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN"> <html> <head> <title></title> </head> <body> <form action="http: //localhost: 8080/examples/servlet/Chat. Inserta" method="post"> <input type="text" name="nick" size="10"> <input type="text" name="mensaje" size="70"> <input type="submit" value="ENVIAR"> </form> </body> </html> Alberto Gimeno Arnal servlets 20
SERVLET: Ejemplo 4 (chat. Ver. html) <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN"> <html> <head><title></title> <meta http-equiv="refresh" content="5; url=http: //localhost: 8080/exampl es/servlet/Chat. Conv"> </head> <body> </html> Alberto Gimeno Arnal servlets 21
SERVLET: Ejemplo 4 (Chat. Inserta. class) public class Chat. Inserta extends Http. Servlet { public synchronized void do. Get(Http. Servlet. Request rq Http. Servlet. Response rp) throws Servlet. Exception, IOException { Chat. Conversacion. Inserta. Mensaje(rq. get. Parameter("nick") + ": " + rq. get. Parameter("mensaje")); rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); out. println("<html><body><form action='http: //localhost: 8080/examples/servlet/Chat. Inserta' method='post'></head><body>"); out. println("<label>NICK: </label><input type='text' name='nick' size=10>"); out. println("<label>MENSAJE: </label><input type='text' name='mensaje' size=70>"); out. println("<input type='submit' value='ENVIAR'></form></body></html>"); } public synchronized void do. Post(Http. Servlet. Request rq Http. Servlet. Response rp) throws Servlet. Exception, IOException {do. Get(rq, rp); } } Alberto Gimeno Arnal servlets 22
SERVLET: Ejemplo 4 (Chat. Conversacion. class) public class Chat. Conversacion { private static final int NUM_LINEAS=10; private static String[] Conv = new String[NUM_LINEAS]; public synchronized static void Inserta. Mensaje(String mensaje) { for(int i=NUM_LINEAS-2; i>=0; i--) Conv[i+1]= Conv[i]; Conv[0]=mensaje; } public synchronized static String[] Dame. Conv() { return Conv; } } Alberto Gimeno Arnal servlets 23
SERVLET: Ejemplo 5 (Crea. Cookie. class) public class Crea. Cookie extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws Servlet. Exception, IOException { Cookie galleta = new Cookie("nick", "alb"); galleta. set. Max. Age(600); galleta. set. Comment("Galleta de prueba"); galleta. set. Secure(false); rp. add. Cookie(galleta); rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); out. println("<html><head><title>Galleta caliente</title></head><body><h 2>GALLETA CREADA</H 2></body></html>"); } Alberto Gimeno Arnal servlets 24
SERVLET: Ejemplo 5 (Ver. Cookie. class) public class Ver. Cookie extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws Servlet. Exception, IOException { rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); // Mostramos galletas Cookie[] galleta = rq. get. Cookies(); for (int i = 0; i < galleta. length; i++) { Cookie c = galleta[i]; String name = c. get. Name(); String value = c. get. Value(); out. println(name + " = " + value); } } } Alberto Gimeno Arnal servlets 25
SERVLET: Ejemplo 6 (e. Sesion. class) public class e. Sesion extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws Servlet. Exception, IOException { Http. Session sess = rq. get. Session(true); sess. set. Attribute("nick", new String("alumno")); sess. set. Attribute("code", new String("123456")); sess. set. Attribute("fecha", new Date()); rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); out. println("<html><head><title>Sesion</title></head><body> <h 2>Servlet que crea una sesión</H 2></body></html>"); } Alberto Gimeno Arnal servlets 26
SERVLET: Ejemplo 6 (e. Sesion 1. class) public class e. Sesion 1 extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws Servlet. Exception, IOException { Http. Session sess = rq. get. Session(true); if(sess. is. New()) rp. send. Redirect("/examples/servlet/e. Sesion"); rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); out. println("<html><head><title>Sesion</title></head> <body><h 2>Visor de la Sesión </H 2>"); out. println("<table border=1 align='center'><tr> <th>Atributo</th><th>Valor</th></tr>"); Enumeration att = sess. get. Attribute. Names(); while (att. has. More. Elements()){ String n. Att = (String) att. next. Element(); out. println("<tr><td>" + n. Att + "</td><td>" + sess. get. Attribute(n. Att) + "</td></tr>"); } out. println("</body></html>"); } Alberto Gimeno Arnal servlets 27
SERVLET: Ejemplo 7 (e. App. class) public class e. App extends Http. Servlet { public void do. Get(Http. Servlet. Request rq, Http. Servlet. Response rp) throws Servlet. Exception, IOException { rp. set. Content. Type("text/html"); Print. Writer out = rp. get. Writer(); Servlet. Context app = get. Servlet. Context(); out. println("<html><head><title>Aplicacion</title></head><body>"); synchronized(app){ String n. App = (String)app. get. Attribute("nombre. Aplicacion"); Integer visitas = (Integer)app. get. Attribute("accesos"); if(n. App!=null){ out. println("El objeto aplicación ya existe y su valor es: <b>" + n. App + "</b><br/>"); app. set. Attribute("accesos", new Integer(visitas. int. Value()+1)); }else{ app. set. Attribute("nombre. Aplicacion", new String("App. Servlet")); app. set. Attribute("accesos", new Integer(1)); out. println("Se ha creado el objeto aplicación"); } } out. println("Nº de visitas: <b>" + app. get. Attribute("accesos") + "</b>"); out. println("</body></html>"); } Alberto Gimeno Arnal servlets 28
JSP: Elementos • Directivas: <%@nombre. Directiva atributo 1=“valor 1”. . atributon=“valorn” %> Page info, language, import, extends, content. Type, session, buffer, auto. Flush, error. Page, is. Error. Page Include file • • • Elementos scripting: declaraciones [<%! %>], scriptlets [<% %>], expresiones [<%= %>], comentarios [<%-- --%>], … Acciones: <jsp: accion> Objetos implícitos o integrados (similares a los servlets) Alberto Gimeno Arnal JSP 29
JSP: Estructura <%@page content. Type="text/html"%> <%@page. Encoding="UTF-8"%> <%@page language="Java"%> <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN" "http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body > <%--Esto es un comentario --%> <div align=center> <b><% out. println("¡HOLA FIGURA!"); %> </div> </body> </html> Alberto Gimeno Arnal JSP 30
JSP: javax. servlet. jsp Interfaces Http. Jsp. Page Interfaz de una clase generada por el procesador de páginas JSP, usando el protocolo http. Método _jsp. Service() (auto) Jsp. Page Interfaz padre jsp. Destroy() de Http. Jsp. Page. Métodos jsp. Init(), Clases Jsp. Engine. Info Clase abstracta que ofrece información relativa al contenedor de páginas JSP. Jsp. Factory Define, en tiempo de ejecución, una serie de métodos para crear instancias de varios interfaces. Jsp. Writer Nos permite enviar contenido a la respuesta del cliente Page. Context Ofrece acceso a todos los contenidos asociados con una página JSP. . Alberto Gimeno Arnal JSP 31
JSP: javax. servlet. jsp Excepciones Jsp. Exception Excepción genérica que será lanzada por el contenedor de páginas JSP. Jsp. Tag. Exception Excepción lanzada por el gestor de etiquetas personalizadas. Alberto Gimeno Arnal JSP 32
JSP: Objetos integrados Objeto Clase o interfaz page config request response out application page. Context exception session java. lang. Object javax. servlet. Servlet. Config javax. servlet. http. Http. Servlet. Request javax. servlet. http. Http. Response javax. servlet. jsp. Jsp. Writer javax. servlet. Servlet. Context javax. servlet. jsp. Page. Context java. lang. Throwable javax. servlet. http. Http. Session Alberto Gimeno Arnal JSP 33
JSP: request <%@page import="java. util. *"%> <%@page language="Java"%> <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN" "http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ORIGEN</title> </head> <body > <div align=center> <b><% request. set. Attribute("fecha", new Date()); Resquest. Dispatcher rd = application. get. Request. Dispatcher ("http: //localhost: 8084/jsp. Tomcat/Request. Destino. jsp"); rd. forward(request, response); %> </div> </body></html> Alberto Gimeno Arnal JSP 34
JSP: request <%@page import="java. util. *"%> <%@page language="Java"%> <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN" "http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF 8"> <title>DESTINO</title> </head> <body > <b><%Date fecha = (Date)request. get. Attribute("fecha"); out. println("<h 3 style='font-family: Comic Sans MS textalign: center'>Atributo de la peticion" + fecha + "</h 3>"); %> </body> </html> Alberto Gimeno Arnal JSP 35
JSP: response <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN" "http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Redirección con RESPONSE</title> </head> <body> <%response. send. Redirect("/jsp. Tomcat/error. Resp. jsp"); %> </body> </html> Alberto Gimeno Arnal JSP 36
JSP: response <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN" "http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Redirección con RESPONSE</title> </head> <body> <%response. send. Error(354, "Hemos redirigido la salida a través del objeto RESPONSE"); %> </body> </html> Alberto Gimeno Arnal JSP 37
JSP: out buffer <%@ page buffer="10 kb"%> …. <body style="font-family: Comic Sans MS“ align=“center”> <%out. println("<h 3> Pagina que muestra información sobre el bufer</h 3>"); out. new. Line(); int total=out. get. Buffer. Size(); int disp=out. get. Remaining(); int usado=total-disp; out. println(“Estado del bufer: "); %> <%=usado%>bytes/<%=total%>bytes=<%=(100. 0*usado)/total%>% Auto. Flush=<%=out. is. Auto. Flush()%> </body> </html> Alberto Gimeno Arnal JSP 38
JSP: exception <%@ page is. Error. Page="true" import="java. io. *"%> …… <body style="font-family: Comic Sans MS" align="justify"> <h 1>Se ha producido una excepción</h 1> <b >ERROR: </b><%=exception. to. String()%> <b >MENSAJE: </b><%=exception. get. Message()%> <b >VOLCADO DE PILA: </b> <%String. Writer s. Salida = new String. Writer(); Print. Writer salida= new Print. Writer(s. Salida); exception. print. Stack. Trace(salida); %><%=salida%></p> </body> </html> Alberto Gimeno Arnal JSP 39
JSP: exception <%@ page error. Page="pagina. Error. jsp"%> …. . <body> <%--Creamos un error --%> <%int i=1/0; %> </body> </html> Alberto Gimeno Arnal JSP 40
JSP: page. Context Redirección …. <%page. Context. forward("Hola. Figura. jsp"); %> …. . JSP: page. Context Inclusión …. <%page. Context. include("Hola. Figura. jsp"); %> …. . Alberto Gimeno Arnal JSP 41
JSP: Acciones • • • <jsp: forward page=“…”/> <jsp: include page=“” flush=“” /> <jsp: plugin type=“” codebase=“” att 1=“”…> – <jsp: params>…</jsp: params> • • • <jsp: param name=“” value=“”/> <jsp: fallback> <jsp: use. Bean id=“” class=“” /> <jsp: set. Property name=“” property=“” /> <jsp: get. Property name=“” property=“” /> Alberto Gimeno Arnal JSP 42
JSP: <jsp: forward> <body style="font-family: Comic Sans MS"> <jsp: forward page="destino. jsp"> <jsp: param name="ciudad" value="CALATAYUD" /> <jsp: param name="provincia" value="ZARAGOZA" /> </jsp: forward> </body> Alberto Gimeno Arnal JSP 43
Java. Bean: Fundamentos • Contenedor: aplicación, entorno o lenguaje. Existen características (atributos o propiedades) y comportamientos (métodos) <jsp: use. Bean>, <jsp: set. Property>, <jsp: get. Property> • Propiedad, atributo de un componente Java. Bean que tiene como función mantener su estado y controlar el comportamiento del Bean. • Clase: constructores, propiedades indexadas Alberto Gimeno Arnal Java. Bean 44
Java. Bean: <jsp: use. Bean> <body style="font-family: Comic Sans MS"> <jsp: use. Bean id="fecha" scope="page" class="java. util. Date" /> <%=fecha%> </body> Alberto Gimeno Arnal Java. Bean 45
Java. Bean: Ejemplo (m. Bean. jar) Definimos la clase que vamos a usar: public class alumno. Bean { /** Declaracion variables */ String nombre; String apellidos; String direccion; String correo; int movil; public alumno. Bean() { /** Inicializamos las variables*/ this. nombre=""; this. apellidos=""; this. direccion=""; this. correo=""; this. movil=0; } Alberto Gimeno Arnal /** Declaramos los constructores*/ public String getnombre(){ return nombre; } public void setnombre(String nombre) { this. nombre=nombre; } public String getapellidos(){ return apellidos; } public void setapellidos(String apell){ this. apellidos=apell; } …………. . Java. Bean 46
Java. Bean: Ejemplo (Bean. jsp) <%@ page import="java. m. Bean. alumno. Bean" %> …. . <body style="font-family: Comic Sans MS text-align: justify" > <jsp: use. Bean id="mi. Bean" scope="page" class="java. m. Bean. alumno. Bean"> <jsp: set. Property name="mi. Bean" property="*" /> <jsp: set. Property name="mi. Bean" property="nombre" value="ALBERTO" /> <jsp: set. Property name="mi. Bean" property="apellidos" value="GIMENO ARNAL" /> <jsp: set. Property name="mi. Bean" property="correo" value="alberto. gimeno@gmail. com" /> <%mi. Bean. setaficion("Cine", 0); mi. Bean. setaficion("Musica", 1); mi. Bean. setaficion("Viajar", 2); %> </jsp: use. Bean> Soy <jsp: get. Property name="mi. Bean" property="nombre"/> <jsp: get. Property name="mi. Bean" property="apellidos"/>, para cualquier consulta, duda o ruego mandame un correo a: <jsp: get. Property name="mi. Bean" property="correo"/> Mis aficiones son: <ul> <%String[] aficion=mi. Bean. getaficion(); for(int i=0; i<3; i++){%><li><%=aficion[i]%></li> <%}%> </ul> </body> </html> Alberto Gimeno Arnal Java. Bean 47
JDBC: Bases de datos (java. sql) • • • Interfaces: Callable. Statement, Blob, Ref Connection, Database. Meta. Data, Driver, Prepared. Statement, Result. Set, Clob, Result. Set. Meta. Data, Statement, Array, SQLData, SQLInput, SQLOutput, Struct. Clases: Date, Driver. Manager, Time, Driver. Property. Info, Timestamp, Types, SQLPermisson. Excepciones: Data. Truncation, SQLWarning, SQLException, Bacth. Update. Exception. Alberto Gimeno Arnal JDBC 48
JDBC: Conexión a bbdd Connection con= Driver. Manager. get. Connection(url); Para cargar un driver de forma inmediata bastará incluirlo a través de la clase: Class. for. Name(); Estructura que se usa cuando se trabaja con bbdd es: Try{…. } catch (SQLException ex){…. . } catch (Exception ex){…} Alberto Gimeno Arnal JDBC 49
JDBC: conex. jsp (Connection) <%@ page import="java. sql. *"%> …………… <%try{ //Registramos el Driver de My. SQL Class. for. Name("com. mysql. jdbc. Driver"); //Realizamos la conexión al servidor My. SQL Connection conn=Driver. Manager. get. Connection("jdbc: mysql: //localhost: 3306/criogenia ", "root", "mysql"); //Mensaje de exito out. println("Conexion realizada con exito a: " + conn. get. Catalog()); conn. close(); }catch(SQLException ex){%> <%="Se produjo un error durante la conexión: "+ex%> <% }catch(Exception ex){%> <%="Se produjo una excepción: "+ex%> <%}%> Alberto Gimeno Arnal JDBC 50
JDBC: Interfaz de consultas Statement Prepared. Statement Callable. Statement Alberto Gimeno Arnal JDBC 51
JDBC: Consultas de datos //Creamos el interfaz st en el servidor de datos, y lo asociamos al objeto conexión conn Statement st = conn. create. Statement(); //Cadena de consulta String sql = "SELECT * FROM " + request. get. Parameter("tabla"). to. String(); //Contenedor de datos: Result. Set rs = st. execute. Query(sql); Alberto Gimeno Arnal JDBC 52
JDBC: conexión. jsp (consulta) <%@ page import="java. sql. *"%> …………… <%try{ …………. . Statement st = conn. create. Statement(); String sql = "SELECT * FROM " + request. get. Parameter("tabla"). to. String(); Result. Set rs = st. execute. Query(sql); rs. before. First(); %> //after. Last(); <table border="1" align="center"> <%while(rs. next()){%> //previous() <tr><td><%=rs. get. String(1)%></td><%=rs. get. String(2)%></td> <td><%=rs. get. String(3)%></td></tr> <%}%> </table> Alberto Gimeno Arnal JDBC 53
JDBC: Tipos de Result. Set (create. Statement) TYPE_FORWARD_ONLY: por defecto. TYPE_SCROLL_INSENSITIVE: todo tipo de movimiento, pero mientras esta abierto no se entera de los cambios. TYPE_SCROLL_SENSITIVE: todo tipo de movimiento y control sobre los cambios. CONCUR_READ_ONLY: solo lectura. CONCUR_UPDATABLE: permite modificaciones. Alberto Gimeno Arnal JDBC 54
JDBC: Métodos de Result. Set • execute. Query() select Result. Set • execute. Update() insert, delete, update, create table int • execute() otros true/false Øabsolute(), after. Last(), before. First(), first(), last(), move. To. Current. Row(), previous(), relative(), is. After. Last(), is. Before. First(), is. Last(), get. Row() Øclose() Alberto Gimeno Arnal JDBC 55
JDBC: conex 2. jsp (modificar) <%try{ …………. . Statement st = conn. create. Statement(Result. Set. TYPE_SCROLL_INSENSITIV E, Result. Set. CONCUR_UPDATABLE); String sql=“select * from "+request. get. Parameter("tabla"). to. String(); Result. Set rs = st. execute. Query(sql); // buscamos el registro a modificar, el actual get. Row() rs. get. Row(); //Modificamos todos los campos rs. update. String (2, request. get. Parameter(“nomb”). to. String()); rs. update. Int (3, request. get. Parameter(“edad”). to. Int()); …………. rs. update. Row(); //Deshacer la actualización cancel. Row. Updates() Alberto Gimeno Arnal JDBC 56
JDBC: conex 3. jsp (insertar) <%try{ …………. . Statement st = conn. create. Statement(Result. Set. TYPE_SCROLL_INSENSITIV E, Result. Set. CONCUR_UPDATABLE); String sql=“select * from "+request. get. Parameter("tabla"). to. String(); Result. Set rs = st. execute. Query(sql); // nos movemos al registro a insertar, move. To. Insert. Row() rs. move. To. Insert. Row(); //Insertamos los datos nuevos rs. update. String (2, request. get. Parameter(“nomb”). to. String()); rs. update. Int (3, request. get. Parameter(“edad”). to. Int()); …………. rs. insert. Row(); Alberto Gimeno Arnal JDBC 57
JDBC: conex 4. jsp (borrar) <%try{ …………. . Statement st = conn. create. Statement(Result. Set. TYPE_SCROLL_INSENSITIV E, Result. Set. CONCUR_UPDATABLE); String sql=“select * from"+request. get. Parameter("tabla"). to. String(); Result. Set rs = st. execute. Query(sql); // nos movemos al registro a borrar, absolute() rs. absolute(request. get. Parameter(“fila”). to. Integer()); //borramos rs. delete. Row(); Alberto Gimeno Arnal JDBC 58
JDBC: conex 5. jsp (Prepared. Statement) <%if(request. get. Parameter(“insertar”)!=null){ try{ …………. . String sql =“INSERT INTO paciente (nombre, edad, sala) VALUES (? , ? )”; //Enviamos a BD la consulta para que la compile Prepared. Statement pst = conn. prepared. Statement(sql); //Pasamos los parámetros de entrada pst. set. String(1, request. get. Parameter(“nomb”)); pst. set. Int(2, Integer. parse. Int(request. get. Parameter(“edad”))); pst. set. Int(3, Integer. parse. Int(request. get. Parameter(“sala”))); //actualizamos pst. execute. Update(); //cerramos todo Alberto Gimeno Arnal JDBC 59
JDBC: conex 6. jsp (Callable. Statement) <%if(request. get. Parameter(“buscar”)!=null){ try{ …………. . String palm=“{call dame. Sala(? , ? )}”; //Enviamos a BD la consulta para que la compile Callable. Statement cst = conn. prepare. Call(palm); //Pasamos los parámetros de entrada al procedimiento almacenado cst. set. String(1, request. get. Parameter(“nomb”)); //registramos el parámetro de salida cst. register. Out. Parameter(2, Types. INT); //ejecutamos la sentencia cst. execute(); //comprobemos que nos a devuelto If (cst. get. Update. Count()==1){ out. println(cst. get. String(2)); Else out. println(“El paciente no existe”); //cerramos todo Alberto Gimeno Arnal JDBC 60
JDBC: Database. Meta. Data Proporciona información de la bd a la que nos hemos conectado. //conexión Connection conn = Driver. Manager. get. Connection(bd, user, clave); //creamos la instancia a la bd Database. Meta. Data bdmd= conn. get. Meta. Data(); Alberto Gimeno Arnal JDBC 61
JDBC: Result. Set. Meta. Data Proporciona información sobre las columnas que contiene el Result. Set. ………… //ejecutamos la consulta Result. Set rs = st. execute. Query(sql); Result. Set. Meta. Data rsmd=rs. get. Meta. Data(); rs. before. First(); %> <table border="1" align="center"> <tr><th><%=rsmd. get. Column. Name(1)%></th>…. <%while(rs. next()){%> <tr><td><%=rs. get. String(1)%></td>…. . <%}%> Alberto Gimeno Arnal JDBC 62
Componentes Java. Beans y JDBC: Vamos a usar un Bean de sesión, Http. Session. Binding. Listener, la desconexión se producira cuando se destruya el componente value. Unbound. Para ello creamos una clase (con sus constructores) que nos devuelva el nombre y edad de un determinado paciente dandole un identificador user. Bean. class public class user. Bean implements Http. Session. Binding. Listener { …………. . public void value. Bound(Http. Session. Binding. Event event) {} public void value. Unbound(Http. Session. Binding. Event event) { try{ conn. close(); }catch(Exception ex){ System. out. println("Error al cerrar la conexión: " + ex); } }} Alberto Gimeno Arnal JDBC 63
Componentes Java. Beans y JDBC: public class user. Bean implements Http. Session. Binding. Listener { private int codigo, edad; private Statement st; private Result. Set rs; private String nombre; private Connection conn; private String sql="Select nombre, edad from paciente where id_paciente="; /** Creacion instancia user. Bean */ public user. Bean() { set. Codigo(0); } Alberto Gimeno Arnal JDBC 64
Componentes Java. Beans y JDBC: public void set. Codigo(int codigo){ try{ sql = sql + codigo; Class. for. Name("com. mysql. jdbc. Driver"). new. Instance(); conn=Driver. Manager. get. Connection("jdbc: mysql: //localhost: 3306/criogenia", "root", "mysql"); st =conn. create. Statement(); rs = st. execute. Query(sql); if(rs!=null){ nombre = rs. get. String("nombre"); edad= rs. get. Int("edad"); codigo=codigo; } rs. close(); }catch(Exception ex){ System. out. println("Error al establecer la propiedad codigo: " + ex); }} Alberto Gimeno Arnal JDBC 65
Componentes Java. Beans y JDBC: public String get. Nombre(){ return nombre; } public int get. Edad(){ return edad; } Alberto Gimeno Arnal JDBC 66
Componentes Java. Beans y JDBC: <%@ page import="com. bean. *" %> <jsp: use. Bean id="paciente" class="com. bean. user. Bean" scope="session"> </jsp: use. Bean> …………. . <form action="index. jsp"> Código del Paciente <input type="text" name="codigo" value="" size="3" /> <input type="submit" value="CONSULTA" name="enviar"/> </form> <%if(request. get. Parameter("enviar")!=null){%> Los datos del código de paciente <%=request. get. Parameter("codigo")%> son : <jsp: set. Property name="paciente" property="*" /> <ul> <li>Nombre: <b><jsp: get. Property name="paciente" property="nombre" /></b></li> <li>Edad: <b><jsp: get. Property name="paciente" property="edad" /></b></li> </ul> <%}%> Alberto Gimeno Arnal JDBC 67
BIBLIOGRAFIA: • Curso de JAVA Ed. : ANAYA Multimedia O’REILLY • Bases de datos con JAVA Ed. : Ra-Ma • My. SQL 5. 0 Reference Manual (http: //dev. mysql. com/doc/refman/5. 0/es/index. ht ml) • Manual oficial de JAVA (http: //www. java. com/es/download/manual. jsp) • http: //java. sun. com Alberto Gimeno Arnal 68
- Slides: 68