Download public - Eolo Home Page

Document related concepts
no text concepts found
Transcript
Servlets, JSP,
JavaBEANS,JDBC
Alberto Gimeno Arnal
[email protected]
Á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
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/No
mbreServlet
Las paginas JSP, jBeans en
~~ \jswdk-1.0.1\webpages
Alberto Gimeno Arnal
3
SERVLET: ¿Qué se puede hacer?.
1.
2.
3.
4.
5.
6.
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,
funcionalidad al envio respuestas al cliente
HttpSession
HttpSessionBinding
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.
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{
}
}
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>
</fieldset>
</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/exampl
es/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
HttpJspPage
Interfaz de una clase generada por el procesador de páginas
JSP, usando el protocolo http. Método  _jspService() (auto)
JspPage
Interfaz padre
jspDestroy()
de
HttpJspPage.
Métodos

jspInit(),
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
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
Objeto
Clase o interfaz
page
config
request
response
out
application
pageContext
exception
session
java.lang.Object
javax.servlet.ServletConfig
javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpResponse
javax.servlet.jsp.JspWriter
javax.servlet.ServletContext
javax.servlet.jsp.PageContext
java.lang.Throwable
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=UTF8">
<title>DESTINO</title>
</head>
<body >
<b><%Date fecha = (Date)request.getAttribute("fecha");
out.println("<h3 style='font-family:Comic Sans MS textalign: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; }
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; }
…………..
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="[email protected]" />
<%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
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_INSENSITIV
E, 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_INSENSITIV
E, 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_INSENSITIV
E, 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.ht
ml)
• Manual oficial de JAVA
(http://www.java.com/es/download/manual.jsp)
• http://java.sun.com
Alberto Gimeno Arnal
68