Servlets, JSP, JavaBEANS,JDBC

Slides:



Advertisements
Presentaciones similares
Java Enterprise Edition (Java EE)
Advertisements

Curso de Java “Java para Web” Rogelio Ferreira Escutia.
Internet y tecnologías web
Fernando Alonso Blázquez Sesiones 06 de Mayo de 2004.
Características Generales y Entornos de Desarrollo
Fernando Alonso Blázquez Servlets con acceso a Bases de Datos 29 de Abril de 2004.
Servlets 22 de Abril de 2004 Fernando Alonso Blázquez.
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN
Arquitectura Web en Aplicaciones Empresariales Java/J2EE
Aplicaciones J2EE.
JSP Java Server Pages.
CGI I La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con él. Dicho.
Indice Programacion cliente servidor Arquitectura Cliente-servidor
"java del lado del servidor" Servlet y JSP Java Server Pages.
Servlets.
OBJETO REQUEST. El objeto Request Por qué el objeto request Funcionamiento Colecciones: – Transferencia de variables por URL –Transferencia de variables.
Introducción a la arquitectura Web
Servlets.
Servlets Servlets.
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
JEE – Java Enterprise Edition
Curso de Java y Aplicaciones Web
Java 2 Platform Enterprise Edition
Sesión en Servlets 31 de Marzo de Índice ¿Por qué seguir la trayectoria de usuarios? Formas de seguir la trayectoria de usuarios –Cookies –Reescritura.
Aplicaciones web. … HTTP Aplicaciones con páginas estáticas Subdirectorio especial: \WEB-INF Fichero de configuración (opcional): \WEB-INF\web.xml Ficheros.
M.I. María Luisa González Ramírez Servlets y JSP.
JSP COOKIES. cookies  Las cookies son datos guardados por los navegadores a instancias del servidor.  Los sitios Web las utilizan con propósitos diversos:
Borland User Group - Guatemala Desarrollo de Servlets con Borland JBuilder 2006 Mario Enríquez Open Consult Diciembre 2006.
JAVA. Introducción Que es java?  Código reusable  Multiplataforma.
Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.
Tecnologías para el desarrollo de aplicaciones Web
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Servlets y JSP Temas Selectos de Cómputo Cibernética 912 Agosto-Diciembre 2005.
HTTP, CGI, Applets, Servlets y SOAP
SPRING MVC.
OBJETOS DISTRIBUIDOS E INVOCACIÓN REMOTA ING. MARISCAL.
ASIGNACION DE LAS PARTES DE LA APLICACION DISTRIBUIDA EN JAVA PESENTA: LEVI MONROY MARTINEZ.
Servlets 18 de Marzo de Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Estructura básica de un HttpServlet Servlet simple que genera.
JAVA: Servlets Diseño de aplicaciones web
TEMA 6. Applets y servlets
“SERVLETS”. Paola Rojas Contreras Juan Villarroel Leiva José Miguel Perez V. Departamento de Electrónica.
Fernando Alonso Blázquez Nicolás Serrano Bárcena Servlets 8 de Abril de 2008.
Fernando Alonso Nicolás Serrano Servlets con acceso a Bases de Datos 21 de Abril de 2008.
Aplicaciones Web M.C. Jorge Eduardo Ibarra Esquer
Java Applets David Gil
Confidential // Neoris 1 Confidential // Do Not Reproduce without prior written permission from Neoris JavaServer Pages JSP.
Desarrollo con Servlets. Servlets: Introducción  Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java.
IS2Objetos Distribuidos - J2EE,RMI1 Ingeniería del software II Ingeniería Web.
Mario Osvaldo Bressano Servlets. Mario Osvaldo Bressano Arquitectura de 2 Capas.
JAVA: Servlets Diseño de servicios web © María de los Santos Pérez Hernández
Servlets Servlets son módulos que extienden a servidores “java- enabled” orientados a request/response, como por ejemplo Servidores Web Un servlet puede.
Servlets Servlets son módulos que extienden a servidores “java-enabled” orientados a request/response, como por ejemplo Servidores Web Un servlet puede.
Servlets Servlets son módulos que extienden a servidores orientados a request/response, como por ejemplo Servidores Web “java-enabled”. Un servlet puede.
Aplicaciones Web de Servidor
Servlets 10 de Mayo de 2006.
IS2Objetos Distribuidos - J2EE,RMI1 Ingeniería del software II Ingeniería Web.
Sun Microsystems. Los servlets son objetos que corren dentro del contexto de un contenedor de servlets y extienden su funcionalidad. También podrían correr.
Confidential // Neoris 1 Confidential // Do Not Reproduce without prior written permission from Neoris Servlets.
Servlets Servlets son módulos que extienden a servidores “java- enabled” orientados a request/response, como por ejemplo Servidores Web Un servlet puede.
 Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java a los CGIs (Common Gateway Interface) para construir.
Autentificación y Seguridad en Aplicaciones Web.  Delegadas en el cliente y el servidor ◦ Basados en estándares de Internet  Autentificación Básica.
Temario Java 2 Enterprise Edition Arquitectura Especificación Servlets Contenedores Cookies Sesiones.
Notario electrónico Consejería de Justicia y Administración Pública Dirección General de Organización, Inspección y Calidad de los Servicios Antonio Pedro.
Trabajar con SERVLETS. Índice Qué son los Servlets Para qué sirven Cómo se utilizan Ejemplo Cómo probar un Servlet.
Filtros HTTP.  Características de las aplicaciones web: TODOS los recursos están expuestos al exterior.  Problema: Estamos repitiendo código en todos.
Servlets Servlets Son modulos que extienden las funcionalidades de un servidor “java-enabled” Normalmente generan código HTML dinámicamente, el cual se.
INTRODUCCIÓN A LAS APLICACIONES WEB Y TECNOLOGÍA JAVA Jaime Fernández Mayo 2006.
Servlets Servlets son módulos que extienden a servidores “java-enabled” orientados a request/response, como por ejemplo Servidores Web Un servlet puede.
Transcripción de la presentación:

Servlets, JSP, JavaBEANS,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 JavaServer (TM) Web Development Kit (JSWDK) 1.0.1 JDK Estándar Enviroment (J2SE) + netBeans PATH=D:\Univ\JAVA\jswdk-1.0.1\; D:\Univ\JAVA\jdk1.6.0\ CLASSPATH=.; D:\Univ\JAVA\jdk1.6.0\lib\tools.jar; D:\Univ\JAVA\jswdk-1.0.1\lib\servlet.jar Ejemplo Hola Figura: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HolaFigura extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>!Hola Figura!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>!Hola Figura!</h1>"); out.println("</body>"); out.println("</html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request,response);} Alberto Gimeno Arnal 2

Configuración PC Los servlets tienen que guardarse en la ruta: ~~ \WEB-INF\servlets y podemos acceder a ellos a través de http://localhost:8080/examples/servlet/NombreServlet Las paginas JSP, jBeans en ~~ \jswdk-1.0.1\webpages Ejemplo Hola Figura: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HolaFigura extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>!Hola Figura!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>!Hola Figura!</h1>"); out.println("</body>"); out.println("</html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request,response);} Alberto Gimeno Arnal 3

SERVLET: ¿Qué se puede hacer?. LEER información enviada por el usuario: formularios HTML o applets. BUSCAR información en el cliente: navegador, cookies, sesiones. GENERAR resultados, a través de bbdd, JavaBeans. FORMATEAR los resultados de un documento: pagina HTML. ASIGNAR parámetros a la respuesta al cliente: navegador, cookies , sesiones,…. 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.*; import javax.servlet.http.*; public class ServletHolaFigura extends HttpServlet{ public void doGet (HttpServletRequest request, ServletResponse response) throws IOException, ServletException{ } public void doPost (HttpServletRequest request, ServletResponse response) throws IOException, ServletException{ } } Alberto Gimeno Arnal servlets 5

SERVLET: javax.servlet Interfaces RequestDispacher 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 ServletConfig Objeto de configuración usado por el motor de servlets ServletContext Define una serie de métodos para la comunicación entre servlets. ServletRequest Objeto que ofrece información de la petición del cliente al servlet. ServletResponse Objeto que permite al servlet enviar información al cliente. SingleThreadModel Nos asegura que los servlets tratan una sola petición al mismo tiempo. Alberto Gimeno Arnal servlets 6

SERVLET: javax.servlet Clases GenericServlet Define servlet genérico independiente del protocolo ServletInputStream Canal de lectura de datos procedentes de la petici´ón del cliente. ServletOutputStream Canal de salida para enviar datos al cliente. Excepciones ServletException Excepción general que podrá lanzar cualquier servlets. UnavailableException Excepción de disponibilidad. Alberto Gimeno Arnal servlets 7

SERVLET: javax.servlet.http Interfaces HttpServletRequest Hereda del interfaz ServletRequest, especificar peticiones realizadas a selvlet y recupera el contenido de los formularios HTML. HttpServletResponse Hereda del interfaz ServletReponse, establece funcionalidad al envio respuestas al cliente HttpSession Identificación y almacenamiento de información de cada usuario concreto. HttpSessionBinding Listener Notificación de creación y destrucción de la sesión. Alberto Gimeno Arnal 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. HttpServlet Clase abstracta de un servlet. HttpSessionBinding Event Evento que se envia para notificar la creación o destrucción de una sesión. HttpUtils 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.*; import javax.servlet.http.*; public class ServletHolaFigura extends HttpServlet{ public void doGet (HttpServletRequest request, ServletResponse response) throws IOException, ServletException{ } public void doPost (HttpServletRequest request, ServletResponse response) throws IOException, ServletException{ } } Ejemplo Hola Figura: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HolaFigura extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>!Hola Figura!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>!Hola Figura!</h1>"); out.println("</body>"); out.println("</html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request,response);} Alberto Gimeno Arnal servlets 10

SERVLET: Conceptos básicos Importar los paquetes javax.servlet, javax.servlet.http, java.io Heredar la clase abstracta HttpServlet. Implementar los métodos doGet() y doPost() La clase se debe situar en un directorio especifico del servidor Web Tomcat. Invocarlo: http://servidor/aplicacion/servlet/ClaseServlet. Alberto Gimeno Arnal servlets 11

SERVLET: métodos HttpServlet void doDelete (HttpServletResquest req, HttpServletResponse res) void doGet (HttpServletResquest req, HttpServletResponse res) void doOptions (HttpServletResquest req, HttpServletResponse res) void doPost (HttpServletResquest req, HttpServletResponse res) void doPut (HttpServletResquest req, HttpServletResponse res) void doTrace (HttpServletResquest req, HttpServletResponse res) void getLastModified (HttpServletResquest req) void service (HttpServletResquest req, HttpServletResponse res) Alberto Gimeno Arnal servlets 12

SERVLET: clase GenericServlet void destroy() String getInitParameter(String nombre) Enumeration getInitParameterNames() ServletConfig getServletConfig() ServletContext getServletContext() String getServletInfo() String getServletName() void init() void long(String mensaje) void service (HttpServletResquest req, HttpServletResponse res) Alberto Gimeno Arnal servlets 13

SERVLET: Ejemplo 1 (HolaFigura.class) public class HolaFigura extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws IOException, ServletException { rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); out.println("<html><head><title>¡Hola Figura!</title></head>"); out.println("<body>"); out.println("<marquee><h1>¡Hola Figura!</h1></marquee>"); out.println("</body></html>"); } public void doPost(HttpServletRequest rq, HttpServletResponse rp) throws IOException, ServletException {doGet(rq,rp);} Alberto Gimeno Arnal servlets 14

SERVLET: Ejemplo 2 (FolderRoot.class) public class FolderRoot extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws IOException, ServletException { rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); 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 doPost(HttpServletRequest rq, HttpServletResponse rp) throws IOException, ServletException {doGet(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><br> <label>DIRECCIÓN: </label><input name="direccion" maxlength=70 size=70><br> <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> </body> Alberto Gimeno Arnal servlets 16

SERVLET: Ejemplo 3 (datos.class) public class datos extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws IOException, ServletException { rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); out.println("<html><head><title>Datos Personales</title></head>"); out.println("<body><table border=1 align=‘center’"); out.println("<tr><td rowspan=2><h3>DATOS PERSONALES</h3></td></tr>"); out.println("<tr><td>NOMBRE:</td><td>“ + rq.getParameter("nombre")); out.println("</td></tr><tr><td>APELLIDOS:</td><td>“ + rq.getParameter(“apell")); out.println("</td></tr><tr><td>DIRECCION:</td><td>"); out.println(rq.getParameter("cp") + " " + rq.getParameter("localidad") + " (" + rq.getParameter("provincia") + ")"); out.println(“</table></body></html>"); } public void doPost(HttpServletRequest rq, HttpServletResponse rp) throws IOException, ServletException {doGet(rq,rp);} Alberto Gimeno Arnal servlets 17

SERVLET: Ejemplo 4 (chat) chat.html chatEnvia.html chatVer.html ChatInserta ChatConv ChatConversacion Alberto Gimeno Arnal servlets 18

SERVLET: Ejemplo 4 (chat.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <title>CHAT</title> </head> <frameset rows="*,100"> <frame src="chatVer.html“ NORESIZE> <frame src="chatEnvia.html“NORESIZE > </frameset> </html> Alberto Gimeno Arnal servlets 19

SERVLET: Ejemplo 4 (chatEnvia.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> </head> <body> <form action="http://localhost:8080/examples/servlet/ChatInserta" 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 (chatVer.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title></title> <meta http-equiv="refresh" content="5;url=http://localhost:8080/examples/servlet/ChatConv"> </head> <body> </body> </html> Alberto Gimeno Arnal servlets 21

SERVLET: Ejemplo 4 (ChatInserta.class) public class ChatInserta extends HttpServlet { public synchronized void doGet(HttpServletRequest rq HttpServletResponse rp) throws ServletException, IOException { ChatConversacion.InsertaMensaje(rq.getParameter("nick") + ": " + rq.getParameter("mensaje")); rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); out.println("<html><body><form action='http://localhost:8080/examples/servlet/ChatInserta' 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 doPost(HttpServletRequest rq HttpServletResponse rp) throws ServletException, IOException {doGet(rq,rp);} } Alberto Gimeno Arnal servlets 22

SERVLET: Ejemplo 4 (ChatConversacion.class) public class ChatConversacion { private static final int NUM_LINEAS=10; private static String[] Conv = new String[NUM_LINEAS]; public synchronized static void InsertaMensaje(String mensaje) { for(int i=NUM_LINEAS-2;i>=0;i--) Conv[i+1]= Conv[i]; Conv[0]=mensaje;} public synchronized static String[] DameConv() { return Conv; } } Alberto Gimeno Arnal servlets 23

SERVLET: Ejemplo 5 (CreaCookie.class) public class CreaCookie extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws ServletException, IOException { Cookie galleta = new Cookie("nick","alb"); galleta.setMaxAge(600); galleta.setComment("Galleta de prueba"); galleta.setSecure(false); rp.addCookie(galleta); rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); out.println("<html><head><title>Galleta caliente</title></head><body><h2>GALLETA CREADA</H2></body></html>"); } Alberto Gimeno Arnal servlets 24

SERVLET: Ejemplo 5 (VerCookie.class) public class VerCookie extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws ServletException, IOException { rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); // Mostramos galletas Cookie[] galleta = rq.getCookies(); for (int i = 0; i < galleta.length; i++) { Cookie c = galleta[i]; String name = c.getName(); String value = c.getValue(); out.println(name + " = " + value);} } Alberto Gimeno Arnal servlets 25

SERVLET: Ejemplo 6 (eSesion.class) public class eSesion extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws ServletException, IOException { HttpSession sess = rq.getSession(true); sess.setAttribute("nick",new String("alumno")); sess.setAttribute("code",new String("123456")); sess.setAttribute("fecha",new Date()); rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); out.println("<html><head><title>Sesion</title></head><body> <h2>Servlet que crea una sesión</H2></body></html>"); } Alberto Gimeno Arnal servlets 26

SERVLET: Ejemplo 6 (eSesion1.class) public class eSesion1 extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws ServletException, IOException { HttpSession sess = rq.getSession(true); if(sess.isNew()) rp.sendRedirect("/examples/servlet/eSesion"); rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); out.println("<html><head><title>Sesion</title></head> <body><h2>Visor de la Sesión </H2>"); out.println("<table border=1 align='center'><tr> <th>Atributo</th><th>Valor</th></tr>"); Enumeration att = sess.getAttributeNames(); while (att.hasMoreElements()){ String nAtt = (String) att.nextElement(); out.println("<tr><td>" + nAtt + "</td><td>" + sess.getAttribute(nAtt) + "</td></tr>"); } out.println("</body></html>"); } Alberto Gimeno Arnal servlets 27

SERVLET: Ejemplo 7 (eApp.class) public class eApp extends HttpServlet { public void doGet(HttpServletRequest rq, HttpServletResponse rp) throws ServletException, IOException { rp.setContentType("text/html"); PrintWriter out = rp.getWriter(); ServletContext app = getServletContext(); out.println("<html><head><title>Aplicacion</title></head><body>"); synchronized(app){ String nApp = (String)app.getAttribute("nombreAplicacion"); Integer visitas = (Integer)app.getAttribute("accesos"); if(nApp!=null){ out.println("El objeto aplicación ya existe y su valor es: <b>" + nApp + "</b><br/>"); app.setAttribute("accesos",new Integer(visitas.intValue()+1)); }else{ app.setAttribute("nombreAplicacion",new String("AppServlet")); app.setAttribute("accesos",new Integer(1)); out.println("Se ha creado el objeto aplicación"); } } out.println("Nº de visitas: <b>" + app.getAttribute("accesos") + "</b>"); out.println("</body></html>"); } Alberto Gimeno Arnal servlets 28

JSP: Elementos Directivas: <%@nombreDirectiva atributo1=“valor1” .......... atributon=“valorn” %> Page  info, language, import, extends, contentType, session, buffer, autoFlush, errorPage, isErrorPage 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 contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@page language="Java"%> <!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"> <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 Clases HttpJspPage JspPage Interfaz de una clase generada por el procesador de páginas JSP, usando el protocolo http. Método  _jspService() (auto) JspPage Interfaz padre de HttpJspPage. Métodos  jspInit(), jspDestroy() Clases JspEngineInfo Clase abstracta que ofrece información relativa al contenedor de páginas JSP. JspFactory Define, en tiempo de ejecución, una serie de métodos para crear instancias de varios interfaces. JspWriter Nos permite enviar contenido a la respuesta del cliente PageContext Ofrece acceso a todos los contenidos asociados con una página JSP.. Alberto Gimeno Arnal JSP 31

JSP: javax.servlet.jsp Excepciones JspException JspTagException Excepción genérica que será lanzada por el contenedor de páginas JSP. JspTagException Excepción lanzada por el gestor de etiquetas personalizadas. Alberto Gimeno Arnal JSP 32

JSP: Objetos integrados Clase o interfaz page java.lang.Object config javax.servlet.ServletConfig request javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpResponse out javax.servlet.jsp.JspWriter application javax.servlet.ServletContext pageContext javax.servlet.jsp.PageContext exception java.lang.Throwable session javax.servlet.http.HttpSession Alberto Gimeno Arnal JSP 33

JSP: request <%@page import="java.util.*"%> <%@page language="Java"%> <!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"> <title>ORIGEN</title> </head> <body > <div align=center> <b><% request.setAttribute("fecha",new Date()); ResquestDispatcher rd = application.getRequestDispatcher ("http://localhost:8084/jspTomcat/RequestDestino.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 "-//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"> <title>DESTINO</title> </head> <body > <b><%Date fecha = (Date)request.getAttribute("fecha"); out.println("<h3 style='font-family:Comic Sans MS text-align:center'>Atributo de la peticion" + fecha + "</h3>");%> </body> </html> Alberto Gimeno Arnal JSP 35

JSP: response <!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"> <title>Redirección con RESPONSE</title> </head> <body> <%response.sendRedirect("/jspTomcat/errorResp.jsp");%> </body> </html> Alberto Gimeno Arnal JSP 36

JSP: response <!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"> <title>Redirección con RESPONSE</title> </head> <body> <%response.sendError(354, "Hemos redirigido la salida a través del objeto RESPONSE");%> </body> </html> Alberto Gimeno Arnal JSP 37

JSP: out  buffer <%@ page buffer="10kb"%> …. <body style="font-family:Comic Sans MS“ align=“center”> <%out.println("<h3> Pagina que muestra información sobre el bufer</h3>"); out.newLine(); int total=out.getBufferSize(); int disp=out.getRemaining(); int usado=total-disp; out.println(“Estado del bufer: <br>");%> <%=usado%>bytes/<%=total%>bytes=<%=(100.0*usado)/total%>%<br> AutoFlush=<%=out.isAutoFlush()%> </body> </html> Alberto Gimeno Arnal JSP 38

JSP: exception <%@ page isErrorPage="true" import="java.io.*"%> …… <body style="font-family:Comic Sans MS" align="justify"> <h1>Se ha producido una excepción</h1> <b >ERROR:</b><%=exception.toString()%><br> <b >MENSAJE:</b><%=exception.getMessage()%><br> <b >VOLCADO DE PILA:</b> <%StringWriter sSalida = new StringWriter(); PrintWriter salida= new PrintWriter(sSalida); exception.printStackTrace(salida);%><%=salida%></p><br> </body> </html> Alberto Gimeno Arnal JSP 39

JSP: exception <%@ page errorPage="paginaError.jsp"%> ….. <body> <%--Creamos un error --%> <%int i=1/0;%> </body> </html> Alberto Gimeno Arnal JSP 40

JSP: pageContext  Redirección …. <%pageContext.forward("HolaFigura.jsp");%> ….. JSP: pageContext  Inclusión …. <%pageContext.include("HolaFigura.jsp");%> ….. Alberto Gimeno Arnal JSP 41

JSP: Acciones <jsp:forward page=“…”/> <jsp:include page=“” flush=“” /> <jsp:plugin type=“” code=“” codebase=“” att1=“”…> <jsp:params>…</jsp:params> <jsp:param name=“” value=“”/> <jsp:fallback> <jsp:useBean id=“” class=“” /> <jsp:setProperty name=“” property=“” /> <jsp:getProperty 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

JavaBean: Fundamentos Contenedor: aplicación, entorno o lenguaje. Existen características (atributos o propiedades) y comportamientos (métodos)  <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> Propiedad, atributo de un componente JavaBean que tiene como función mantener su estado y controlar el comportamiento del Bean. Clase: constructores, propiedades, propiedades indexadas Alberto Gimeno Arnal JavaBean 44

JavaBean: <jsp:useBean> <body style="font-family:Comic Sans MS"> <jsp:useBean id="fecha" scope="page" class="java.util.Date" /> <%=fecha%> </body> Alberto Gimeno Arnal JavaBean 45

JavaBean: Ejemplo (mBean.jar) Definimos la clase que vamos a usar: public class alumnoBean { /** Declaracion variables */ String nombre; String apellidos; String direccion; String correo; int movil; public alumnoBean() { /** Inicializamos las variables*/ this.nombre=""; this.apellidos=""; this.direccion=""; this.correo=""; this.movil=0; } /** 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; } ………….. Alberto Gimeno Arnal JavaBean 46

JavaBean: Ejemplo (Bean.jsp) <%@ page import="java.mBean.alumnoBean" %> ….. <body style="font-family:Comic Sans MS text-align:justify" > <jsp:useBean id="miBean" scope="page" class="java.mBean.alumnoBean"> <jsp:setProperty name="miBean" property="*" /> <jsp:setProperty name="miBean" property="nombre" value="ALBERTO" /> <jsp:setProperty name="miBean" property="apellidos" value="GIMENO ARNAL" /> <jsp:setProperty name="miBean" property="correo" value="alberto.gimeno@gmail.com" /> <%miBean.setaficion("Cine",0); miBean.setaficion("Musica",1); miBean.setaficion("Viajar",2);%> </jsp:useBean> Soy <jsp:getProperty name="miBean" property="nombre"/> <jsp:getProperty name="miBean" property="apellidos"/>, para cualquier consulta, duda o ruego mandame un correo a: <jsp:getProperty name="miBean" property="correo"/> Mis aficiones son: <ul> <%String[] aficion=miBean.getaficion(); for(int i=0;i<3;i++){%><li><%=aficion[i]%></li> <%}%> </ul> </body> </html> Alberto Gimeno Arnal JavaBean 47

JDBC: Bases de datos (java.sql) Interfaces: CallableStatement, Blob, Ref Connection, DatabaseMetaData, Driver, PreparedStatement, ResultSet, Clob, ResultSetMetaData, Statement, Array, SQLData, SQLInput, SQLOutput, Struct. Clases: Date, DriverManager, Time, DriverPropertyInfo, Timestamp, Types, SQLPermisson. Excepciones: DataTruncation, SQLWarning, SQLException, BacthUpdateException. Alberto Gimeno Arnal JDBC 48

Connection con= DriverManager.getConnection(url); JDBC: Conexión a bbdd Connection con= DriverManager.getConnection(url); Para cargar un driver de forma inmediata bastará incluirlo a través de la clase: Class.forName(); 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 MySQL Class.forName("com.mysql.jdbc.Driver"); //Realizamos la conexión al servidor MySQL Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/criogenia","root","mysql"); //Mensaje de exito out.println("Conexion realizada con exito a: " + conn.getCatalog()); 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 PreparedStatement CallableStatement 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.createStatement(); //Cadena de consulta String sql = "SELECT * FROM " + request.getParameter("tabla").toString(); //Contenedor de datos: ResultSet ResultSet rs = st.executeQuery(sql); Alberto Gimeno Arnal JDBC 52

JDBC: conexión.jsp (consulta) <%@ page import="java.sql.*"%> …………… <%try{ ………….. Statement st = conn.createStatement(); String sql = "SELECT * FROM " + request.getParameter("tabla").toString(); ResultSet rs = st.executeQuery(sql); rs.beforeFirst();%> //afterLast(); <table border="1" align="center"> <%while(rs.next()){%> //previous() <tr><td><%=rs.getString(1)%></td><td><%=rs.getString(2)%></td> <td><%=rs.getString(3)%></td></tr> <%}%> </table> Alberto Gimeno Arnal JDBC 53

JDBC: Tipos de ResultSet (createStatement) 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 ResultSet executeQuery()  select  ResultSet executeUpdate()  insert, delete, update, create table  int execute()  otros  true/false absolute(), afterLast(), beforeFirst(), first(), last(), moveToCurrentRow(), previous(), relative(), isAfterLast(), isBeforeFirst(), isFirst(), isLast(), getRow() close() Alberto Gimeno Arnal JDBC 55

JDBC: conex2.jsp (modificar) <%try{ ………….. Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql=“select * from "+request.getParameter("tabla").toString(); ResultSet rs = st.executeQuery(sql); // buscamos el registro a modificar, el actual getRow() rs.getRow(); //Modificamos todos los campos rs.updateString (2,request.getParameter(“nomb”).toString()); rs.updateInt (3,request.getParameter(“edad”).toInt()); …………. rs.updateRow(); //Deshacer la actualización  cancelRowUpdates() Alberto Gimeno Arnal JDBC 56

JDBC: conex3.jsp (insertar) <%try{ ………….. Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql=“select * from "+request.getParameter("tabla").toString(); ResultSet rs = st.executeQuery(sql); // nos movemos al registro a insertar, moveToInsertRow() rs.moveToInsertRow(); //Insertamos los datos nuevos rs.updateString (2,request.getParameter(“nomb”).toString()); rs.updateInt (3,request.getParameter(“edad”).toInt()); …………. rs.insertRow(); Alberto Gimeno Arnal JDBC 57

JDBC: conex4.jsp (borrar) <%try{ ………….. Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql=“select * from"+request.getParameter("tabla").toString(); ResultSet rs = st.executeQuery(sql); // nos movemos al registro a borrar, absolute() rs.absolute(request.getParameter(“fila”).toInteger()); //borramos rs.deleteRow(); Alberto Gimeno Arnal JDBC 58

JDBC: conex5.jsp (PreparedStatement) <%if(request.getParameter(“insertar”)!=null){ try{ ………….. String sql =“INSERT INTO paciente (nombre, edad, sala) VALUES (?,?,?)”; //Enviamos a BD la consulta para que la compile PreparedStatement pst = conn.preparedStatement(sql); //Pasamos los parámetros de entrada pst.setString(1,request.getParameter(“nomb”)); pst.setInt(2,Integer.parseInt(request.getParameter(“edad”))); pst.setInt(3,Integer.parseInt(request.getParameter(“sala”))); //actualizamos pst.executeUpdate(); //cerramos todo Alberto Gimeno Arnal JDBC 59

JDBC: conex6.jsp (CallableStatement) <%if(request.getParameter(“buscar”)!=null){ try{ ………….. String palm=“{call dameSala(?,?)}”; //Enviamos a BD la consulta para que la compile CallableStatement cst = conn.prepareCall(palm); //Pasamos los parámetros de entrada al procedimiento almacenado cst.setString(1,request.getParameter(“nomb”)); //registramos el parámetro de salida cst.registerOutParameter(2,Types.INT); //ejecutamos la sentencia cst.execute(); //comprobemos que nos a devuelto If (cst.getUpdateCount()==1){ out.println(cst.getString(2)); Else out.println(“El paciente no existe”); //cerramos todo Alberto Gimeno Arnal JDBC 60

JDBC: DatabaseMetaData Proporciona información de la bd a la que nos hemos conectado. //conexión Connection conn = DriverManager.getConnection(bd,user,clave); //creamos la instancia a la bd DatabaseMetaData bdmd= conn.getMetaData(); Alberto Gimeno Arnal JDBC 61

JDBC: ResultSetMetaData Proporciona información sobre las columnas que contiene el ResultSet. ………… //ejecutamos la consulta ResultSet rs = st.executeQuery(sql); ResultSetMetaData rsmd=rs.getMetaData(); rs.beforeFirst();%> <table border="1" align="center"> <tr><th><%=rsmd.getColumnName(1)%></th>…. <%while(rs.next()){%> <tr><td><%=rs.getString(1)%></td>….. <%}%> Alberto Gimeno Arnal JDBC 62

Componentes JavaBeans y JDBC: Vamos a usar un Bean de sesión, HttpSessionBindingListener, la desconexión se producira cuando se destruya el componente valueUnbound. Para ello creamos una clase (con sus constructores) que nos devuelva el nombre y edad de un determinado paciente dandole un identificador  userBean.class public class userBean implements HttpSessionBindingListener { ………….. public void valueBound(HttpSessionBindingEvent event) {} public void valueUnbound(HttpSessionBindingEvent event) { try{ conn.close(); }catch(Exception ex){ System.out.println("Error al cerrar la conexión: " + ex); } }} Alberto Gimeno Arnal JDBC 63

Componentes JavaBeans y JDBC: public class userBean implements HttpSessionBindingListener { private int codigo, edad; private Statement st; private ResultSet rs; private String nombre; private Connection conn; private String sql="Select nombre,edad from paciente where id_paciente="; /** Creacion instancia userBean */ public userBean() { setCodigo(0); } Alberto Gimeno Arnal JDBC 64

Componentes JavaBeans y JDBC: public void setCodigo(int codigo){ try{ sql = sql + codigo; Class.forName("com.mysql.jdbc.Driver").newInstance(); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/criogenia", "root","mysql"); st =conn.createStatement(); rs = st.executeQuery(sql); if(rs!=null){ nombre = rs.getString("nombre"); edad= rs.getInt("edad"); codigo=codigo; } rs.close(); }catch(Exception ex){ System.out.println("Error al establecer la propiedad codigo: " + ex);}} Alberto Gimeno Arnal JDBC 65

Componentes JavaBeans y JDBC: public String getNombre(){ return nombre; } public int getEdad(){ return edad; Alberto Gimeno Arnal JDBC 66

Componentes JavaBeans y JDBC: <%@ page import="com.bean.*" %> <jsp:useBean id="paciente" class="com.bean.userBean" scope="session"> </jsp:useBean> ………….. <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.getParameter("enviar")!=null){%> Los datos del código de paciente <%=request.getParameter("codigo")%> son : <jsp:setProperty name="paciente" property="*" /> <ul> <li>Nombre: <b><jsp:getProperty name="paciente" property="nombre" /></b></li> <li>Edad: <b><jsp:getProperty 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 MySQL 5.0 Reference Manual (http://dev.mysql.com/doc/refman/5.0/es/index.html) Manual oficial de JAVA (http://www.java.com/es/download/manual.jsp) http://java.sun.com Alberto Gimeno Arnal 68