Title: Servlets, JSP, JavaBEANS,JDBC
1Servlets, JSP, JavaBEANS,JDBC
- Alberto Gimeno Arnal
- alberto.gimeno_at_gmail.com
Área de Lenguajes y Sistemas Informáticos Dpto.
de Informática e Ingeniería de Sistemas Universida
d de Zaragoza
2Configuración PC
- JavaServer (TM) Web Development Kit (JSWDK) 1.0.1
- JDK Estándar Enviroment (J2SE) netBeans
- PATHD\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
3Configuración PC
- Los servlets tienen que guardarse en la ruta
- \WEB-INF\servlets y podemos acceder a ellos a
través de http//localhost8080/examples/servlet/N
ombreServlet - Las paginas JSP, jBeans en
- \jswdk-1.0.1\webpages
Alberto Gimeno Arnal
3
4SERVLET 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
5SERVLET 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
6SERVLET javax.servlet
Interfaces 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
7SERVLET javax.servlet
Clases Clases Clases
GenericServlet Define servlet genérico independiente del protocolo Define servlet genérico independiente del protocolo
ServletInputStream Canal de lectura de datos procedentes de la petición del cliente. Canal de lectura de datos procedentes de la petición del cliente.
ServletOutputStream Canal de salida para enviar datos al cliente. Canal de salida para enviar datos al cliente.
Excepciones Excepciones Excepciones
ServletException ServletException Excepción general que podrá lanzar cualquier servlets.
UnavailableException UnavailableException Excepción de disponibilidad.
Alberto Gimeno Arnal
servlets
7
8SERVLET javax.servlet.http
Interfaces 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
9SERVLET javax.servlet.http
Clases 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
10SERVLET 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
11SERVLET 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/Clas
eServlet.
Alberto Gimeno Arnal
servlets
11
12SERVLET 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
13SERVLET 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
14SERVLET 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("lthtmlgtltheadgtlttitlegtHola
Figura!lt/titlegtlt/headgt") - out.println("ltbodygt")
- out.println("ltmarqueegtlth1gtHola
Figura!lt/h1gtlt/marqueegt") - out.println("lt/bodygtlt/htmlgt")
-
- public void doPost(HttpServletRequest rq,
HttpServletResponse rp) - throws IOException, ServletException
doGet(rq,rp)
Alberto Gimeno Arnal
servlets
14
15SERVLET 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("lthtmlgtltheadgtlttitlegtListado
de Ficheroslt/titlegtlt/headgt") - out.println("ltbodygtlttable border1
aligncentergt") - for(int i0iltcontenido.lengthi)
out.println("lttrgtlttdgt contenidoi
"lt/tdgtlt/trgt") - out.println(lt/tablegtlt/bodygtlt/htmlgt")
-
- public void doPost(HttpServletRequest rq,
HttpServletResponse rp) - throws IOException, ServletException
doGet(rq,rp)
Alberto Gimeno Arnal
servlets
15
16SERVLET Ejemplo 3 (formulario.html)
- ltbody align"center" width"700"gt
- ltfieldsetgtltlegendgtltfont size3gtINFORMACION
PERSONALlt/fontgtlt/legendgt - ltform action"http//localhost8080/examples/serv
let/datos" method"POST" enctype"application/x-ww
w-form-urlencoded" gt - ltfieldsetgtltlegendgtltBgtDATOS PERSONALESlt/Bgtlt/lege
ndgt - ltlabelgtNOMBRE lt/labelgtltinput name"nombre"
maxlength20 size20gt - ltlabelgtAPELLIDOS lt/labelgtltinput name"apell"
maxlength32 size32gtltbrgt - ltlabelgtDIRECCIÓN lt/labelgtltinput
name"direccion" maxlength70 size70gtltbrgt - ltlabelgtC.P. lt/labelgtltinput name"cp" size5
maxlength5gt - ltlabelgt LOCALIDAD lt/labelgtltinput
name"localidad" maxlength17 size17gt - ltlabelgt PROVINCIA lt/labelgtltinput
name"provincia" maxlength17 size17gt - lt/fieldsetgt
- ltinput typereset value"BORRAR"gtltinput
typesubmit value"VALIDAR"gt - lt/formgt
- lt/fieldsetgt
- lt/bodygt
Alberto Gimeno Arnal
servlets
16
17SERVLET 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("lthtmlgtltheadgtlttitlegtDatos
Personaleslt/titlegtlt/headgt") - out.println("ltbodygtlttable border1
aligncenter") - out.println("lttrgtlttd rowspan2gtlth3gtDATOS
PERSONALESlt/h3gtlt/tdgtlt/trgt") - out.println("lttrgtlttdgtNOMBRElt/tdgtlttdgt
rq.getParameter("nombre")) - out.println("lt/tdgtlt/trgtlttrgtlttdgtAPELLIDOSlt/tdgtlttd
gt rq.getParameter(apell")) - out.println("lt/tdgtlt/trgtlttrgtlttdgtDIRECCIONlt/tdgtlttd
gt") - out.println(rq.getParameter("cp") " "
rq.getParameter("localidad") " ("
rq.getParameter("provincia") ")") - out.println(lt/tablegtlt/bodygtlt/htmlgt")
-
- public void doPost(HttpServletRequest rq,
HttpServletResponse rp) - throws IOException, ServletException
doGet(rq,rp)
Alberto Gimeno Arnal
servlets
17
18SERVLET Ejemplo 4 (chat)
chat.html
chatEnvia.html
chatVer.html
ChatInserta
ChatConv
ChatConversacion
Alberto Gimeno Arnal
servlets
18
19SERVLET Ejemplo 4 (chat.html)
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Frameset//EN"gt - lthtmlgt
- ltheadgt
- lttitlegtCHATlt/titlegt
- lt/headgt
- ltframeset rows",100"gt
- ltframe src"chatVer.html NORESIZEgt
- ltframe src"chatEnvia.htmlNORESIZE gt
- lt/framesetgt
- lt/htmlgt
Alberto Gimeno Arnal
servlets
19
20SERVLET Ejemplo 4 (chatEnvia.html)
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"gt - lthtmlgt
- ltheadgt
- lttitlegtlt/titlegt
- lt/headgt
- ltbodygt
- ltform action"http//localhost8080/examples
/servlet/ChatInserta" method"post"gt - ltinput type"text" name"nick"
size"10"gt - ltinput type"text" name"mensaje"
size"70"gt - ltinput type"submit" value"ENVIAR"gt
- lt/formgt
- lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
servlets
20
21SERVLET Ejemplo 4 (chatVer.html)
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"gt - lthtmlgt
- ltheadgtlttitlegtlt/titlegt
- ltmeta http-equiv"refresh" content"5urlhttp
//localhost8080/examples/servlet/ChatConv"gt - lt/headgt
- ltbodygt
- lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
servlets
21
22SERVLET Ejemplo 4 (ChatInserta.class)
- public class ChatInserta extends HttpServlet
-
- public synchronized void doGet(HttpServletRequ
est rq HttpServletResponse rp) - throws ServletException, IOException
- ChatConversacion.InsertaMensaje(rq.getParam
eter("nick") " " rq.getParameter("mensaje"))
- rp.setContentType("text/html")
- PrintWriter out rp.getWriter()
- out.println("lthtmlgtltbodygtltform
action'http//localhost8080/examples/servlet/Cha
tInserta' method'post'gtlt/headgtltbodygt") - out.println("ltlabelgtNICK lt/labelgtltinput
type'text' name'nick' size10gt") - out.println("ltlabelgtMENSAJE
lt/labelgtltinput type'text' name'mensaje'
size70gt") - out.println("ltinput type'submit'
value'ENVIAR'gtlt/formgtlt/bodygtlt/htmlgt") - public synchronized void doPost(HttpServletReq
uest rq HttpServletResponse rp) - throws ServletException, IOException
doGet(rq,rp)
Alberto Gimeno Arnal
servlets
22
23SERVLET Ejemplo 4 (ChatConversacion.class)
- public class ChatConversacion
-
- private static final int NUM_LINEAS10
- private static String Conv new
StringNUM_LINEAS -
- public synchronized static void
InsertaMensaje(String mensaje) - for(int iNUM_LINEAS-2igt0i--)
Convi1 Convi - Conv0mensaje
- public synchronized static String
DameConv() - return Conv
Alberto Gimeno Arnal
servlets
23
24SERVLET 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("lthtmlgtltheadgtlttitlegtGalleta
calientelt/titlegtlt/headgtltbodygtlth2gtGALLETA
CREADAlt/H2gtlt/bodygtlt/htmlgt") -
Alberto Gimeno Arnal
servlets
24
25SERVLET 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 lt galleta.length i)
- Cookie c galletai
- String name c.getName()
- String value c.getValue()
- out.println(name " " value)
-
Alberto Gimeno Arnal
servlets
25
26SERVLET 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("lthtmlgtltheadgtlttitlegtSesionlt/titlegtlt/h
eadgtltbodygt lth2gtServlet que crea una
sesiónlt/H2gtlt/bodygtlt/htmlgt") -
Alberto Gimeno Arnal
servlets
26
27SERVLET 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("/example
s/servlet/eSesion") - rp.setContentType("text/html")
- PrintWriter out rp.getWriter()
- out.println("lthtmlgtltheadgtlttitlegtSesionlt/ti
tlegtlt/headgt ltbodygtlth2gtVisor de la Sesión lt/H2gt") - out.println("lttable border1
align'center'gtlttrgt ltthgtAtributolt/thgtltthgtValorlt/th
gtlt/trgt") - Enumeration att sess.getAttributeNames()
- while (att.hasMoreElements())
- String nAtt (String)
att.nextElement() - out.println("lttrgtlttdgt" nAtt
"lt/tdgtlttdgt" sess.getAttribute(nAtt)
"lt/tdgtlt/trgt") - out.println("lt/bodygtlt/htmlgt")
-
Alberto Gimeno Arnal
servlets
27
28SERVLET 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("lthtmlgtltheadgtlttitlegtAplicacion
lt/titlegtlt/headgtltbodygt") - synchronized(app)
- String nApp (String)app.getAttribute
("nombreAplicacion") - Integer visitas (Integer)app.getAttr
ibute("accesos") - if(nApp!null)
- out.println("El objeto aplicación
ya existe y su valor es ltbgt" nApp
"lt/bgtltbr/gt") - 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 ltbgt"
app.getAttribute("accesos") "lt/bgt") - out.println("lt/bodygtlt/htmlgt")
Alberto Gimeno Arnal
servlets
28
29JSP Elementos
- Directivas
- lt_at_nombreDirectiva atributo1valor1 ..........
atributonvalorn gt - Page ? info, language, import, extends,
contentType, session, buffer, autoFlush,
errorPage, isErrorPage - Include ? file
- Elementos scripting declaraciones lt! gt,
scriptlets lt gt, expresiones lt gt,
comentarios lt-- --gt, - Acciones ltjspacciongt
- Objetos implícitos o integrados (similares a los
servlets)
Alberto Gimeno Arnal
JSP
29
30JSP Estructura
- lt_at_page contentType"text/html"gt
- lt_at_page pageEncoding"UTF-8"gt
- lt_at_page language"Java"gt
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" - "http//www.w3.org/TR/html4/loose.dtd"gt
- lthtmlgt
- ltheadgt
- ltmeta http-equiv"Content-Type"
content"text/html charsetUTF-8"gt - lttitlegtJSP Pagelt/titlegt
- lt/headgt
- ltbody gt
- lt--Esto es un comentario --gt
- ltdiv aligncentergt
- ltbgtlt out.println("HOLA FIGURA!")gt
- lt/divgt
- lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
30
31JSP javax.servlet.jsp
Interfaces 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 de HttpJspPage. Métodos ? jspInit(), jspDestroy()
Clases 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
32JSP javax.servlet.jsp
Excepciones 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
33JSP Objetos integrados
Objeto 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
34JSP request
- lt_at_page import"java.util."gt
- lt_at_page language"Java"gt
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" - "http//www.w3.org/TR/html4/loose.dtd"gt
- lthtmlgt
- ltheadgt
- ltmeta http-equiv"Content-Type"
content"text/html charsetUTF-8"gt - lttitlegtORIGENlt/titlegt
- lt/headgt
- ltbody gt
- ltdiv aligncentergt
- ltbgtlt
- request.setAttribute("fecha",new
Date()) - ResquestDispatcher rd
application.getRequestDispatcher
("http//localhost8084/jspTomcat/RequestDestin
o.jsp") - rd.forward(request,response) gt
- lt/divgt
- lt/bodygtlt/htmlgt
Alberto Gimeno Arnal
JSP
34
35JSP request
- lt_at_page import"java.util."gt
- lt_at_page language"Java"gt
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" - "http//www.w3.org/TR/html4/loose.dtd"gt
- lthtmlgt
- ltheadgt
- ltmeta http-equiv"Content-Type"
content"text/html charsetUTF-8"gt - lttitlegtDESTINOlt/titlegt
- lt/headgt
- ltbody gt
- ltbgtltDate fecha (Date)request.getAttribu
te("fecha") - out.println("lth3 style'font-familyComic Sans
MS text-aligncenter'gtAtributo de la peticion"
fecha "lt/h3gt")gt - lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
35
36JSP response
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http//www.w3.org/TR/html4/loos
e.dtd"gt - lthtmlgt
- ltheadgt
- ltmeta http-equiv"Content-Type"
content"text/html charsetUTF-8"gt - lttitlegtRedirección con RESPONSElt/titlegt
- lt/headgt
- ltbodygt
- ltresponse.sendRedirect("/jspTomcat/errorResp.
jsp")gt - lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
36
37JSP response
- lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http//www.w3.org/TR/html4/loos
e.dtd"gt - lthtmlgt
- ltheadgt
- ltmeta http-equiv"Content-Type"
content"text/html charsetUTF-8"gt - lttitlegtRedirección con RESPONSElt/titlegt
- lt/headgt
- ltbodygt
- ltresponse.sendError(354, "Hemos redirigido
la salida a través del objeto RESPONSE")gt - lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
37
38JSP out ? buffer
- lt_at_ page buffer"10kb"gt
- .
- ltbody style"font-familyComic Sans MS
aligncentergt - ltout.println("lth3gt Pagina que muestra
información sobre el buferlt/h3gt") - out.newLine()
- int totalout.getBufferSize()
- int dispout.getRemaining()
- int usadototal-disp
- out.println(Estado del bufer ltbrgt")gt
- ltusadogtbytes/lttotalgtbyteslt(100.0u
sado)/totalgtltbrgt - AutoFlushltout.isAutoFlush()gt
- lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
38
39JSP exception
- lt_at_ page isErrorPage"true" import"java.io."gt
-
- ltbody style"font-familyComic Sans MS"
align"justify"gt - lth1gtSe ha producido una excepciónlt/h1gt
- ltb gtERRORlt/bgtltexception.toString()gtltbr
gt - ltb gtMENSAJElt/bgtltexception.getMessage()
gtltbrgt - ltb gtVOLCADO DE PILAlt/bgt
- ltStringWriter sSalida new
StringWriter() - PrintWriter salida new
PrintWriter(sSalida) - exception.printStackTrace(salida)gtltsal
idagtlt/pgtltbrgt - lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
39
40JSP exception
- lt_at_ page errorPage"paginaError.jsp"gt
- ..
- ltbodygt
- lt--Creamos un error --gt
- ltint i1/0gt
- lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JSP
40
41JSP pageContext ? Redirección
- .
- ltpageContext.forward("HolaFigura.jsp")gt
- ..
JSP pageContext ? Inclusión
. ltpageContext.include("HolaFigura.jsp")gt ..
Alberto Gimeno Arnal
JSP
41
42JSP Acciones
- ltjspforward page/gt
- ltjspinclude page flush /gt
- ltjspplugin type code codebase att1gt
- ltjspparamsgtlt/jspparamsgt
- ltjspparam name value/gt
- ltjspfallbackgt
- ltjspuseBean id class /gt
- ltjspsetProperty name property /gt
- ltjspgetProperty name property /gt
Alberto Gimeno Arnal
JSP
42
43JSP ltjspforwardgt
- ltbody style"font-familyComic Sans MS"gt
- ltjspforward page"destino.jsp"gt
- ltjspparam name"ciudad" value"CALATAYUD"
/gt - ltjspparam name"provincia"
value"ZARAGOZA" /gt - lt/jspforwardgt
- lt/bodygt
Alberto Gimeno Arnal
JSP
43
44JavaBean Fundamentos
- Contenedor aplicación, entorno o lenguaje.
Existen características (atributos o propiedades)
y comportamientos (métodos) ? ltjspuseBeangt,
ltjspsetPropertygt, ltjspgetPropertygt - 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
45JavaBean ltjspuseBeangt
- ltbody style"font-familyComic Sans MS"gt
- ltjspuseBean id"fecha" scope"page"
class"java.util.Date" /gt - ltfechagt
- lt/bodygt
Alberto Gimeno Arnal
JavaBean
45
46JavaBean 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.movil0 / Declaramos los constructores/ public String getnombre() return nombre public void setnombre(String nombre) this.nombrenombre public String getapellidos() return apellidos public void setapellidos(String apell) this.apellidosapell ..
Alberto Gimeno Arnal
JavaBean
46
47JavaBean Ejemplo (Bean.jsp)
- lt_at_ page import"java.mBean.alumnoBean" gt
- ..
- ltbody style"font-familyComic Sans MS
text-alignjustify" gt - ltjspuseBean id"miBean" scope"page"
class"java.mBean.alumnoBean"gt - ltjspsetProperty name"miBean"
property"" /gt - ltjspsetProperty name"miBean"
property"nombre" value"ALBERTO" /gt - ltjspsetProperty name"miBean"
property"apellidos" value"GIMENO ARNAL" /gt - ltjspsetProperty name"miBean"
property"correo" value"alberto.gimeno_at_gmail.com"
/gt - ltmiBean.setaficion("Cine",0)
miBean.setaficion("Musica",1)
miBean.setaficion("Viajar",2)gt - lt/jspuseBeangt
- Soy ltjspgetProperty name"miBean"
property"nombre"/gt - ltjspgetProperty name"miBean"
property"apellidos"/gt, para cualquier consulta,
duda o ruego mandame un correo a
ltjspgetProperty name"miBean" property"correo"/gt
- Mis aficiones son
- ltulgt ltString aficionmiBean.getaficion(
) - for(int i0ilt3i)gtltligtlt
aficionigtlt/ligt - ltgt lt/ulgt
- lt/bodygt
- lt/htmlgt
Alberto Gimeno Arnal
JavaBean
47
48JDBC 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
49JDBC 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
50JDBC conex.jsp (Connection)
- lt_at_ page import"java.sql."gt
-
- lttry
- //Registramos el Driver de MySQL
- Class.forName("com.mysql.jdbc.Driver")
- //Realizamos la conexión al servidor
MySQL - Connection connDriverManager.getConne
ction("jdbcmysql//localhost3306/criogenia","roo
t","mysql") - //Mensaje de exito
- out.println("Conexion realizada con
exito a " conn.getCatalog()) - conn.close()
- catch(SQLException ex)gt
- lt"Se produjo un error durante la
conexión "exgt - lt catch(Exception ex)gt
- lt"Se produjo una excepción "exgt
- ltgt
Alberto Gimeno Arnal
JDBC
50
51JDBC Interfaz de consultas
Statement
PreparedStatement
CallableStatement
Alberto Gimeno Arnal
JDBC
51
52JDBC 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
53JDBC conexión.jsp (consulta)
- lt_at_ page import"java.sql."gt
-
- lttry
- ..
- Statement st conn.createStatement()
- String sql "SELECT FROM "
request.getParameter("tabla").toString() - ResultSet rs st.executeQuery(sql)
- rs.beforeFirst()gt //afterLast()
- lttable border"1" align"center"gt
- ltwhile(rs.next())gt //previous()
- lttrgtlttdgtltrs.getString(1)gtlt/tdgtlttdgtlt
rs.getString(2)gtlt/tdgt lttdgtltrs.getString(3)gtlt/t
dgtlt/trgt - ltgt
- lt/tablegt
Alberto Gimeno Arnal
JDBC
53
54JDBC 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
55JDBC 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
56JDBC conex2.jsp (modificar)
- lttry
- ..
- Statement st conn.createStatement(ResultSe
t.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATA
BLE) - String sqlselect from "request.getParamet
er("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(nom
b).toString()) - rs.updateInt (3,request.getParameter(edad)
.toInt()) - .
- rs.updateRow() //Deshacer la
actualización ? cancelRowUpdates()
Alberto Gimeno Arnal
JDBC
56
57JDBC conex3.jsp (insertar)
- lttry
- ..
- Statement st conn.createStatement(ResultSe
t.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATA
BLE) - String sqlselect 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(nom
b).toString()) - rs.updateInt (3,request.getParameter(edad)
.toInt()) - .
- rs.insertRow()
Alberto Gimeno Arnal
JDBC
57
58JDBC conex4.jsp (borrar)
- lttry
- ..
- Statement st conn.createStatement(ResultSe
t.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATA
BLE) - String sqlselect from"request.getParame
ter("tabla").toString() - ResultSet rs st.executeQuery(sql)
- // nos movemos al registro a borrar, absolute()
- rs.absolute(request.getParameter(fila).toI
nteger()) - //borramos
- rs.deleteRow()
Alberto Gimeno Arnal
JDBC
58
59JDBC conex5.jsp (PreparedStatement)
- ltif(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
60JDBC conex6.jsp (CallableStatement)
- ltif(request.getParameter(buscar)!null)
- try
- ..
- String palmcall 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
61JDBC DatabaseMetaData
- Proporciona información de la bd a la que nos
hemos conectado. - //conexión
- Connection conn DriverManager.getConnection(bd,u
ser,clave) - //creamos la instancia a la bd
- DatabaseMetaData bdmd conn.getMetaData()
Alberto Gimeno Arnal
JDBC
61
62JDBC ResultSetMetaData
- Proporciona información sobre las columnas que
contiene el ResultSet. -
- //ejecutamos la consulta
- ResultSet rs st.executeQuery(sql)
- ResultSetMetaData rsmdrs.getMetaData()
- rs.beforeFirst()gt
- lttable border"1" align"center"gt
lttrgtltthgtltrsmd.getColumnName(1)gtlt/thgt. - ltwhile(rs.next())gt
- lttrgtlttdgtltrs.getString(1)gtlt/tdgt..
- ltgt
Alberto Gimeno Arnal
JDBC
62
63Componentes 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
64Componentes 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
65Componentes JavaBeans y JDBC
- public void setCodigo(int codigo)
- try
- sql sql codigo
- Class.forName("com.mysql.jdbc.Driver").newIns
tance() - connDriverManager.getConnection("jdbcmysql
//localhost3306/criogenia", "root","mysql") - st conn.createStatement()
- rs st.executeQuery(sql)
- if(rs!null)
- nombre rs.getString("nombre")
- edad rs.getInt("edad")
- codigocodigo
- rs.close()
- catch(Exception ex)
- System.out.println("Error al establecer la
propiedad codigo " ex)
Alberto Gimeno Arnal
JDBC
65
66Componentes JavaBeans y JDBC
- public String getNombre()
- return nombre
-
-
- public int getEdad()
- return edad
-
Alberto Gimeno Arnal
JDBC
66
67Componentes JavaBeans y JDBC
- lt_at_ page import"com.bean." gt
- ltjspuseBean id"paciente" class"com.bean.userBea
n" scope"session"gt - lt/jspuseBeangt
- ..
- ltform action"index.jsp"gt
- Código del Paciente ltinput type"text"
name"codigo" value"" size"3" /gt - ltinput type"submit" value"CONSULTA"
name"enviar"/gt - lt/formgt
- ltif(request.getParameter("enviar")!null)gt
- Los datos del código de paciente
ltrequest.getParameter("codigo")gt son
ltjspsetProperty name"paciente" property"" /gt
- ltulgt
- ltligtNombre ltbgtltjspgetProperty
name"paciente" property"nombre" /gtlt/bgtlt/ligt - ltligtEdad ltbgtltjspgetProperty name"paciente"
property"edad" /gtlt/bgtlt/ligt - lt/ulgt
- ltgt
Alberto Gimeno Arnal
JDBC
67
68BIBLIOGRAFIA
- Curso de JAVA Ed. ANAYA Multimedia OREILLY
- Bases de datos con JAVA Ed. Ra-Ma
- MySQL 5.0 Reference Manual (http//dev.mysql.com/d
oc/refman/5.0/es/index.html) - Manual oficial de JAVA (http//www.java.com/es/dow
nload/manual.jsp) - http//java.sun.com
Alberto Gimeno Arnal
68