Está en la página 1de 46

<JSP>

Reproduccinprohibida

Versin2.3

CopyrightCdricSimon,20052011

SolucionJava.com

Manual del alumno

Ing.CedricSimonTel:22680974Cel:88882387Email: c e d r i c @ s o l u c i o n j a v a . c o m Web:www.solucionjava.com

Curso de
Java Server Pages
Nivel bsico

CursodeJavaServerPagesNivelbsico

Pagina2/46

ndice
ndice..............................................................................................................................................................................................................2
1Introduccin al curso...................................................................................................................................................................................5
1.1Objetivo de este curso..........................................................................................................................................................................5
1.2Manual del alumno..............................................................................................................................................................................5
1.3Ejercicios prcticos..............................................................................................................................................................................5
1.4Requisitos para atender a este curso..................................................................................................................................................5
1.5Soporte despus del curso....................................................................................................................................................................5
2Introduccin al JSP.....................................................................................................................................................................................6
2.1Que es el JSP?.....................................................................................................................................................................................6
2.2Por qu utilizaramos el JSP?...........................................................................................................................................................6
2.3Navegadores web..................................................................................................................................................................................6
3Arquitectura J2EE.......................................................................................................................................................................................7
3.1Introduccin a la Tecnologa y Conceptos J2EE...............................................................................................................................7
3.2Componentes J2EE..............................................................................................................................................................................7
3.3La Arquitectura Java Naming Directory Interface (JNDI).............................................................................................................8
3.3.1Ejemplo de JNDI.............................................................................................................................................................................8
4El protocolo HTTP.......................................................................................................................................................................................9
4.1Modelo de consulta / respuesta HTTP...............................................................................................................................................9
4.2Detalles de una consulta......................................................................................................................................................................9
4.3Detalles de respuesta..........................................................................................................................................................................10
4.4Parmetros de consulta.....................................................................................................................................................................11
4.5Mtodos de consulta...........................................................................................................................................................................11
5Instalacin del servidor JSP......................................................................................................................................................................13
5.1Jakarta Tomcat..................................................................................................................................................................................13
5.2Instalacin...........................................................................................................................................................................................13
5.3Configuracin de Eclipse...................................................................................................................................................................13
5.4Verificacin de la instalacin............................................................................................................................................................14
6Uso de herramienta y entorno...................................................................................................................................................................15
6.1Eclipse.................................................................................................................................................................................................15
6.1.1Creacin del servidor....................................................................................................................................................................15
6.1.2Creacin de un nuevo proyecto web..............................................................................................................................................16
6.1.3Creacin de la pgina de ndice.....................................................................................................................................................17
7Utilizacin de los scriptlets........................................................................................................................................................................20
7.1Qu son los scriptlets?......................................................................................................................................................................20
7.2Los scriptlet de declaracin de variables.........................................................................................................................................20
7.3Los scriptlet de utilizacin de variables...........................................................................................................................................20
7.4Los scriptlets de cdigo......................................................................................................................................................................20

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina3/46

7.5Agregar comentarios..........................................................................................................................................................................21
8Utilizacin de directivas.............................................................................................................................................................................22
8.1Directiva de pgina............................................................................................................................................................................22
8.1.1Lista de parmetros para directiva de Pgina................................................................................................................................22
8.2Directiva de inclusin.........................................................................................................................................................................23
8.3Directiva taglib...................................................................................................................................................................................23
9Utilizacin de variables de sesin..............................................................................................................................................................24
9.1Declaracin de variable de sesin.....................................................................................................................................................24
9.2Recuperar el valor de un variable de sesin....................................................................................................................................24
9.3Invalidar una sesin...........................................................................................................................................................................24
9.4Otros mtodos.....................................................................................................................................................................................24
10Objetos implcitos.....................................................................................................................................................................................25
10.1request...............................................................................................................................................................................................25
10.2response.............................................................................................................................................................................................25
10.3session................................................................................................................................................................................................25
10.4application.........................................................................................................................................................................................25
10.5out......................................................................................................................................................................................................25
10.6exception...........................................................................................................................................................................................25
11Los formularios........................................................................................................................................................................................26
11.1Creacin del formulario..................................................................................................................................................................26
11.2Tratamiento del formulario............................................................................................................................................................26
12Elementos de acciones estndar..............................................................................................................................................................29
12.1<jsp:forward />.................................................................................................................................................................................29
12.2<jsp:include />..................................................................................................................................................................................29
12.3<jsp:param>.....................................................................................................................................................................................29
12.4<jsp:plugin>......................................................................................................................................................................................29
12.5<jsp:params>....................................................................................................................................................................................30
12.6<jsp:fallback>...................................................................................................................................................................................30
12.7<jsp:useBean>..................................................................................................................................................................................30
12.8<jsp:getProperty>............................................................................................................................................................................30
12.9<jsp:setProperty>.............................................................................................................................................................................30
13Gestin de errores....................................................................................................................................................................................31
13.1Errores de compilacin....................................................................................................................................................................31
13.2Errores de lgica..............................................................................................................................................................................31
13.3Errores de ejecucin........................................................................................................................................................................31
13.3.1Pgina de error personalizada.....................................................................................................................................................31
14Utilizacin de JavaBean..........................................................................................................................................................................33
14.1Qu es un JavaBean?.....................................................................................................................................................................33
14.2Declaracin de un JavaBean...........................................................................................................................................................33
14.2.1<jsp:useBean>.............................................................................................................................................................................33
CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina4/46

14.2.2<jsp:getProperty>........................................................................................................................................................................34
14.2.3<jsp:setProperty>........................................................................................................................................................................35
14.3Scope de un JavaBean......................................................................................................................................................................35
15Utilizacin de servlets..............................................................................................................................................................................36
15.1Qu es un servlet?..........................................................................................................................................................................36
15.2Para que sirve un servlet?.............................................................................................................................................................36
15.3Anatoma de un servlet....................................................................................................................................................................36
15.4Ciclo de vida de un servlet...............................................................................................................................................................37
15.5Creacin de un servlet simple.........................................................................................................................................................37
15.6Uso de servlet para mostrar imgenes o archivos binarios..........................................................................................................38
16El modelo MVC........................................................................................................................................................................................43
16.1Qu es el modelo MVC?................................................................................................................................................................43
16.2MVC con JSP y JavaBeans.............................................................................................................................................................43
16.3MVC con JSP, JavaBeans y servlet................................................................................................................................................43
16.4MVC con JSP, servlet, JavaBeans y EJB......................................................................................................................................44
17Ejercicios..................................................................................................................................................................................................45
18 Esquema de la base de datos..................................................................................................................................................................46

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina5/46

1 Introduccinalcurso
1.1 Objetivodeestecurso
EnestecursovamosaaprenderellenguajeJSPquenospermitircrearpginaswebdinmicas.

1.2 Manualdelalumno
Estemanualdelalumnoesunaayudaparaelalumno,paratengaunrecuerdodelcurso.Estemanualcontieneun
resumendelasmateriasquesevanaestudiarduranteelcurso,peroelalumnodeberadetomarnotaspersonales
paracompletasestemanual.

1.3 Ejerciciosprcticos
Paracaptarmejorlateora,seharnmuchosejerciciosconlosalumnos,paraprobarlateorayverificarla
integracindelamateria.

Tambin,elalumnopodrcopiarsuscdigosenundisquetealfindelcursoparallevarse,confindeseguirlaprctica
ensuhogar.

1.4 Requisitosparaatenderaestecurso
UnainiciacinallenguajeJavaesrequeridaparaseguirestecurso.LacreacinyelmanejodeobjetosJavaest
consideradacmoasimiladoantesdeempezarestecurso.
ElconocimientodellenguajeHTMLyJavaScriptsontambinrequeridosparapoderatenderaestecurso.
Sielalumnotienedificultadesenunuotrocapitulo,eldebesentirselibredepedirexplicacionesadicionalesal
profesor.
Perosiaparecequeelalumnonoposeelosrequisitosmnimosparaestecurso,porrespetoalosotrosalumnosqueya
poseenestamateria,elalumnopodrasertrasladoparaotrocursoenelfuturo,cuandoelcumplirconlosrequisitos.

1.5 Soportedespusdelcurso
Sitienespreguntassobrelamateriadelcursoentusejerciciosprcticos,puedesescribirtus
preguntasacedric@solucionjava.com.
Parainformacionessobreotroscursos,visitaelsitiowebwww.solucionjava.com.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina6/46

2 IntroduccinalJSP
2.1 QueeselJSP?
ElJSPesunaextensindellenguajedeprogramacinJava,utilizadoparacrearpginaswebdinmicas.
ElJSPnecesitaqueunservidorwebconcapacidadJSPseainstaladoyfuncionandoparapoderejecutarlaspginas
JSP.
ElservidorvaacompilarelcdigoJSPytratarloentiemporeal,conlainformacinviniendodelclienteweb,para
regresarleunapaginawebadaptada,entiemporeal.
Elservidortienetambincapacidaddeseguirelcaminodeunusuario,ascmodeidentificarlo.

2.2 PorquutilizaramoselJSP?
ElJSPsenecesitacuandolapaginawebtienequeadaptarseenfuncindelusuario,ycuandosenecesitaguardar
valoresdesesindelusuario.
Existenotroslenguajequepermiteneso,comoelASPoelPHP,peroelJSPtienecomoaventajequeestabasadoenel
lenguajeJava,yletienelaherenciadesupoderydesuportabilidad.LosservidoresJSPexistenparavariossistemas
operativos,entreotrosWindows,Linux,yUnix.
ElJSPesttambinutilizadoenpaquetesempresarialesmuygrandecomoelservidordeIBMWebsphere,oel
servidordeaplicacindeOracle.
ElJSPesunestndardeprogramacinInternet.

2.3 Navegadoresweb
SilosnavegadorespruebantodosdepoderaplicaralmximolasrecomendacionesdelHTML4.0existenciertas
opciones,adentrooafueradelHMLestndarqueslociertosnavegadoressoportan.Tambin,unmismocdigono
aparecersiempreigualenunnavegadoreenotro.
ElJSPnoestligadodirectamenteconlosnavegadores,peroelHTMLquegeneraransi.Asqueuncdigogenerado
podrafuncionarbienenunnavegador,ydarunresultadodiferenteenotro.Veremosdiferenteejemploseneste
curso.
Enestecurso,utilizaremosdosnavegadoresdiferentes:elInternetExplorerdeMicrosoft,yelFirefoxdeMozilla.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina7/46

3 ArquitecturaJ2EE
3.1 IntroduccinalaTecnologayConceptosJ2EE
Java2EnterpriseEdition(J2EE)esunaarquitecturamulticapaparaimplementaraplicacionesdetipoempresarialy
aplicacionesbasadasenlaWeb.Estatecnologasoportaunagranvariedaddetiposdeaplicacionesdesdeaplicaciones
Webdegranescalaapequeasaplicacionesclienteservidor.ElobjetivoprincipaldelatecnologaJ2EEescrearun
simplemodelodedesarrolloparaaplicacionesempresarialesutilizandocomponentesbasadosenelmodelode
aplicacin.Enestemodelodichoscomponentesutilizanserviciosproporcionadosporelcontenedor,quedeotromodo
tendranqueestarincorporadosenelcdigodelaaplicacin.Observaqueestopodranoserloidealparatodoslos
escenarios:porejemplo,unapequeaaplicacinsecubriramejorutilizandounasolucindelatecnologaJavade
pesoligero(porejemploServlets,JSPs,etc.).

3.2 ComponentesJ2EE
LasaplicacionesJ2EEestncompuestasdediferentescomponentes.UncomponenteJ2EEesunaunidaddesoftware
funcionalautocontenidoqueseensambladentrodeunaaplicacinJ2EEconsusclasesdeayudayficherosyquese
comunicaconotroscomponentesdelaaplicacin.LaespecificiacinJ2EEdefinelossiguientescomponentesJ2EE:
1. LasAplicacionesClientesylosAppletssoncomponentesqueseejecutanenelladodelcliente.
2. LoscomponentesJavaServletlatecnologaJavaServerPagessoncomponentesWebqueseejecutan
enelladodelservidor.
3. LosEnterpriseJavaBeans(beansenterprise)soncomponentesdenegocioqueseejecutanenelservidor
deaplicacion.

TodosesoscomponentesseensamblanenunaaplicacinJ2EE,severificaqueestnbienformadosyquecumplenla
especificacinJ2EE,ysedesplieganenelentornodeproduccin,dondeseejecutanysoncontroladosporelservidor
deaplicacionesJ2EE.
Ademsdeestoscomponentesprincipales,J2EEincluyeserviciosestndarytecnologasdesoportecomo:
JavaDatabaseConnectivity(JDBC)tecnologaqueproporcionaaccesoasistemasdebasesdedatos
relacionales.
JavaTransactionAPI(JTA)oJavaTransactionService(JTS)proporcionasoporteparatransacionesa
loscomponentesJ2EE.
JavaMessagingService(JMS)paracomunicacinasncronaentrecomponentesJ2EE.
JavaNamingyDirectoryInterface(JNDI)proporcionanaccesosanombresydirectorios.
Nota:TodosloscomponentesJ2EEestnescritosenlenguajeJava

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina8/46

3.3 LaArquitecturaJavaNamingDirectoryInterface(JNDI)
J2EEutilizaelAPIJNDIparaaccedergenricamenteaserviciosdenombradoydirectorioutilizandolatecnologa
Java.ElAPIJNDIresideentrelaaplicacinyelserviciodenombresyhacequeelserviciodenombressubyacentesea
transparenteparaloscomponentesdelaaplicacin:

UnclientepuedebuscarreferenciasacomponentesEJBuotrosrecursosenunserviciodenombrescomoel
mencionadoarriba.Elcdigodelclientenosemodifica,sinimportarelserviciodenombresqueseestutilizandooen
qutecnologaestbasado,yestonocreaningunadiferencaenelmodoenquelosclienteslocalizanlosobjetos
remotosmedianteelAPIJNDI.
Paraqueunaaplicacinpuedainteractuarconunserviciodenombre,estedebeconocerlaspropiedadesdelservicio
JNDIalcualelquiereconectarse.EstaspropiedadessonentreotraseltipodeservicioJNDI(facory),eldomicilioIPy
elPuertodelservicio.
3.3.1
...

...

EjemplodeJNDI
DataSource ds=null;
InitialContext ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/"+datasourceName);
con = ds.getConnection();

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina9/46

4 ElprotocoloHTTP
ElprotocoloHTTP(HyperTextTransportProtocol)esunprotocoloquedefineendetallecmounclienteyunservidor
debencomunicarentreellos.ElmodelodecomunicacinHTTPesalabasedelweb.Elprotocoloseaplicaacualquier
servidoryclienteweb.VamosaexaminarlosdetallesmsimportantedelprotocoloHTTP.

4.1 Modelodeconsulta/respuestaHTTP
ElHTTPylosprotocolosextendidosbasadossobreelutilizanunmodelodecomunicacinsimple,peropoderoso.
Demaneratpica,unclienteenvaunaconsultaparaunrecursoaunservidor,yelservidorcontestaunarespuesta
quecorrespondealrecursopreguntado(ocontestaconunmensajedeerror).ElrecursopuedeserunapginaHTML,
ounaaplicacinquecontestaconuncontenidodinmico.

EstemodelosimpleimplicatrescosasqueUstedtienequeserconciente:
1. ElprotocoloHTTPesunprotocolosinestado.Esdecirqueelservidornoguardaningninformacinacerca
delclientedepusedehaberlecontestado,yporesonopuedereconocerquevariasconsultasdeunmismo
clientepuedenserrelacionadas.
2. Laaplicacinwebnopuedeentregarunarespuestainmediato,comoenaplicacioneslocales.Lavelocidad
dependedelanchodebandadisponibleydelacargadelservidor.
3. Nohaynadaenelprotocoloqueindicaalservidorcomolaconsultalehallegado,asqueelservidornopuede
distinguirdiferentemtodosdeconsulta.Porejemplo,enservidornopuededistinguirunaconsultagenerada
porunclicenunenlacedelusodelbotn'atrs'delnavegador.Tambin,comoelHTTPessinestado,nose
puedeadentrodelHTTPllamaralapginaanterior.

4.2 Detallesdeunaconsulta
Existendosmtodosdeconsulta:GETyPOST.GETeslamsutilizada,ylaqueseusopordefecto.
Ejemplodeunaconsulta:

GET /index.html HTTP/1.0


Host: www.gefionsoftware.com
User-Agent : Mozilla/4.5 [en] (WinNT; I)
Accept: image/gif, image/jpeg, image/pjpeg, image/png, */*
Accept-language : en
Accept-charset : iso-8859-1,*,utf-8

LaprimeralneaespecificaqueseusaelmtodoGETysepreguntapararegresarelrecurso/index.htmlutilizandoel
protocoloHTTP/1.0.Lasotraslneasproveenttulosconinformacinadicionalalservidorparacumplirconla
consulta.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina10/46

ElttuloHOSTdicealservidorelnombre(hostname)utilizadoenelURL.Unservidorpuedetenervariosnombres,y
esteinformacinpermitedistinguirmltipleservidoresvirtualesutilizandounmismoprocesoweb.
ElttuloUser-Agentcontieneinformacinsobreeltipodenavegadorutilizadoparahacerlaconsulta.Elservidorpuede
utilizaresteinformacinparagenerarrespuestasdiferentesdependiendodelnavegador(IE,Netscape,WAP,PDA,...).
LosttulosAcceptproveeninformacinsobreelidiomayelformatodearchivoqueelnavegadoracepta.

4.3 Detallesderespuesta
Elmensajedelarespuestaparecealdelaconsulta.Elcontienetrespartes:unalneadeestado,unosttulosde
respuesta,yelcuerpodelarespuesta.
Ejemploderespuesta:
HTTP/1.0 200 OK
Last-Modified: Mon, 19 Dec 2004 20:21:42 GMT
Date: Tue, 12 Jul 2005 13:12:10 GMT
Status: 200
Content-Type: text/html
Servlet-Engine: Tomcat Web Server/3.2
Content-Length: 59
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>

Lalneadeestadoempiezaconelnombredelprotocolo,seguidoporelcdigoderesultadoyunabrevadescripcindel
cdigoderesultado.Aquelcdigoderesultadoes200,quesignificaquesaliconxito.
Elmensajederespuestatienettulos,comoeldeconsulta.Enesteejemplo:
ElttuloLast-Modifieddalafechayhoradecuandoelrecursofuemodificadoporltimavez.Elclientepuedeutilizar
estainformacinparamarcarlapginaelsucach,ypedirenelfuturosolamentelasquefueronmodificadas.
ElttuloContent-Typedicealnavegadorquetipodedatoscontieneelcuerpodelarespuesta.
ElttuloContent-Lengthdicealnavegadoreltamaodelcuerpodelarespuesta.
Unalneavacaseparalosttulosdelcuerpodelarespuesta.Elcuerpodelarespuestacontieneelcdigoqueser
enseadoenelnavegador.AquunasimplepginaHTML.
ElcuerpopuedecontenerpginasHTMLmscomplicadas,uotrotipodecontenido(imagen,sonido,archivo
comprimido,...).Elcuerpopuedetambincontenercdigoquevagenerarotrasconsultasalservidor,comola
insercindeunaimagen.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina11/46

Interaccinentreunclienteyunservidorweb

4.4 Parmetrosdeconsulta
SepuedenpasarparmetrosdeconsultaadentrodelURL.Poreso,despusdelnombredelapgina,hayque
mencionarunpuntodepregunta'?'yunoavariosparmetrosdeparadospor'&',conelnombredelparmetro,el
signo'=',yelvalordelparmetro.
Veremosejemplosutilizandolosformularios.

4.5 Mtodosdeconsulta
YahemosvistoelusodelmtodoGET.TambinexisteelmtodoPOST.Ladiferenciaentrelosdosesqueelmtodo
GETpasalosparmetrosadentrodelURL,asquesepuedeguardarfcilmenteensulistademarcadores.Tambin,
ennavegadorsabequeestemtodonopuededaarelservidor,asaceptadesometerlaconsultanuevamente
(refresca)sinalerta.
ElmtodoPOST,envezdepasarlosparmetrosenelURL,lespasaadentrodelcuerpodelaconsulta.Esopermite
enviarconsultadetamaomsgrandeque2000caracteres,ysinquelosparmetrosaparecenenelURL.
Comolosparmetrosestnguardadosadentrodelcuerpodelaconsulta,laconsultanopuedeserguardadatan
fcilmenteenlosmarcadores,porqueademsdelURL,deberguardarelcuerpodelaconsulta.
Tambin,cuandoseprobadeenviardenuevounaencuestoPOST(refresh)elnavegadorgeneraunaalertoporque
esteaccinpuedegeneraraccionesposiblementeirreversiblealniveldelservidor.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina12/46

Ejemplodeformulario:

<form action="/prueba.jsp" method="POST">


Cuidad: <input name="cuidad" type="text">
Pais: <input name="pais" type="text">
<p>
<input type="SUBMIT">
</form>

EjemplodeconsultaPOSTgeneradaporelformularioarriba:
POST / prueba.jsp HTTP/1.0
Host: www.businesssoft.com.ni
User-Agent : Mozilla/4.5 [en] (WinNT; I)
Accept: image/gif, image/jpeg, image/pjpeg, image/png, */*
Accept-language : en
Accept-charset : iso-8859-1,*,utf-8
cuidad=Managua&pais=Nicaragua

EjemplodeSocketqueseconectaalservidorWeblocal(Tomcat),leenvaunaconsultaHTTPyrecibelapgina
HTML.
LeerWeb.java:

import java.io.*;
import java.net.*;
public class LeerWeb {
public LeerWeb() throws Exception {
Socket s = new Socket("127.0.0.1", 8080);
OutputStream os = s.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.print("GET / HTTP/1.0\r\n\r\n");
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
while (line!=null){
System.out.println(line);
line=br.readLine();
}
}
public static void main(String[] args) throws Exception {
LeerWeb test = new LeerWeb();
}
}

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina13/46

5 InstalacindelservidorJSP
5.1 JakartaTomcat
ParapoderponerenprcticaellenguajeJSP,necesitamosunservidorconcapacidadJSP.
Poreso,vamosautilizarelfamososervidorTomcat,delafundacinApache.ElTomcathacepartedel
proyectoJakartadelafundacinApache.
ElservidorTomcatesunproductogratuitoylibre:sucdigofuenteestdisponible,alladodelas
versionescompiladas.
Tomcatestdisponibleparavariossistemasoperativos,yestmuyutilizadobajoUnixyLinux,porsusestabilidad.

5.2 Instalacin
AntesdeinstalarelservidorTomcat(versin7.0),elJavaJREversin1.6oarribatienequeserinstaladoenel
servidor.ParainstalarTomcat,enWindowsexisteuninstalador,yenLinuxbastacondescomprimirelarchivozipo
gzenunacarpetalocal(comosucarpera/home/usuario).
Esimportantedeleerlasnotasdeinstalacinparaversinohayinformacionesimportanteparanuestra
configuracin.

5.3 ConfiguracindeEclipse
SerequierecrearunservidorenEclipseparapodermanejarTomcatdesdeEclipse.
EscogelaperspectivaJavaEE,vistadeservidores,ycrearunnuevoservidor.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina14/46

5.4 Verificacindelainstalacin
Paraverificarsilainstalacinesexitosa,iniciaelservidordesdeEclipse
Luegoabrimosunnavegadorwebyvamosaldomicilio:http://localhost:8080
Pordefecto,elservidordeTomcatutilizaelpuerto8080,paranochocarconuneventualservidorApache(puerto80).
AhtenemosqueencontrarlapginapordefectodeTomcat,ounapginadeerrordeTomcat.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina15/46

6 Usodeherramientayentorno
6.1 Eclipse
ParadisearlaspginasJSP,vamosautilizarlaherramientaEclipseGanymede,ensuverisnJ2EEoReporting.
Estosprogramassonlibresygratuitos,yfuncionanbajoWindowscomobajosLinux.
6.1.1

Creacindelservidor

EclipseintegralaposibilidaddemanejarunamultituddeservidoreswebdiferentedesdeEclipse.Esopermitael
nuevodespliegue,demaneraautomtica,delsitiodespusdecadacambia.Ytambinpermitevisualizarlaconsola
delservidorenEclipse,paraunadepuracinmscomoda.
Paracrearunservidor,presionaCTRL+N.Escoja'Servidor'enlalista.Luegoescojeeltipo'Tomcat7'.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

6.1.2

Pagina16/46

Creacindeunnuevoproyectoweb

ParacrearnuestraprimerapginaJSP,necesitamoscrearunnuevositiowebenTomcat.Poreso,enEclipse,creamos
unnuevoproyectodetipo'DynamicWebProject',quellamamoscurso.
Escojamoscomo'TargetRuntime'elservidorquehemoscreadoenelpuntoanterior.Comoversindemodulo
escojamos3.0,ycomoconfiguracin'<custom>'.Luegoaceptamoslosvalorespordefecto.

Unavezcreado,validamoslaspropiedadesdelproyecto,y
agregamoselproyectoalservidorTomcat7.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina17/46

Paraagregarelproyectoalservidor,hacerdobleclicsobreelservidorenlapantallaabajoaladerecha,escojala
pestaa'Module'yagregaelproyecto'curso'.

6.1.3

Creacindelapginadendice

Parapoderprobarelservidor,vamosacrearnuestraprimerapginaJSP.
Poreso,hacemosunclicderechosobrelacarpetaWebContentdelproyectocurso,enEclipse,yelegimosnew...JSP'.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina18/46

Unavezelegido,mencionamoselnombredelapgina,queserindex.jsp.TodaslapginasconextensinJSP(.jspen
minuscula)serntraducidasporelservidorenunservlet(cdigoJava)yproducirnunapginaHTMLcomosalida.

Paraprobarsilapginafunciona,tenemosquellenarlaconalgncdigoJSPy/oHTML.Conundobleclicsobre
index.jspabrimossucontenido.Miramosqueyavieneconalgncdigoprehecho.
Vamosamodificarelcdigodelamanerasiguiente,yloguardamos:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%!
String titulo="Mi primera Pgina JSP";
int nrPagina=1;
%>
<title><%=titulo%></title>
</head>
<body bgcolor="#FFFFFF">
<h1><%=titulo%></h1>
<hr>
<p>
Este es mi pgina en JSP numero <%= nrPagina%>.
</body>
</html>

Enelfuturo,noescribirenelmanuallosencabezadosgeneradosporelentorno,como<%@page...><!DOCTYPE....>porque
nosonobligatorioparaquefuncionabienelcdigo.
Iniciamoselservidor.

Luegomiramoselresultadoconunnavegadorwebeneldomicilio:http://localhost::8080/curso/o
http://localhost:8080/curso/index.jsp
Pordefecto,siningunapginaestaespecificadaenelURL,elservidorbuscaprimerolapginaindex.html,luego
index.htm,yluegoindex.jsp.Esteopcinpuedesermodificadaalniveldelservidor,y/oalniveldelsitio,enelarchivo
web.xml.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina19/46

Aspodemosverqueenlabarradeaplicacincomoenlaprimeralneadelapginasaleenvalordelavariable
'titulo'.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina20/46

7 Utilizacindelosscriptlets
7.1 Qusonlosscriptlets?
LosscriptletssonlasetiquetasquepermitendedelimitarelcdigoJSP,quetienequeseranalizadoporelservidor
JSP,delcdigoHTML,quetienequeserenviadoalclientecomotal.AselservidorJSPcombinaelcdigoHTMLcon
elresultadodelcdigoJSPparaobtenerlapginaHTMLqueserregresadaalclienteyledaporelnavegadordel
cliente.
ElJSPeslapartedelaprogramacinqueseejecutaalniveldelservidor,encontradelJavaScript,queseejecutaal
ladodelcliente.

7.2 Losscriptletdedeclaracindevariables
Elscriptletdedeclaracindevariablesirvenparadeclararvariablequesernaccesiblededesdecualquierlugardela
pginaJSP.Sonequivalenteavariabledeclase.
Losscriptletsseutilizangeneralmenteadentrodelacabecera,oenelcuerpodelapginaHTML,antesdelos
scriptletsdecdigo.
Elscriptletdedeclaracinestencerradaentre'<%!'y'%>'(sinlascuotas).
Ejemplo:
<%! String titulo="Mi primera Pgina JSP";
int nrPagina=1; %>

7.3 Losscriptletdeutilizacindevariables
ElscriptletdeutilizacindevariablesirvenparamencionarelvalordeunavariableenelcdigoHTML.Slopuede
contenerunavariable,perotambinsepuedeutilizarmtodosdeobjetosexistente,onuevosobjetos).
Elscriptletdedeclaracinestencerradaentre'<%='y'%>'(sinlascuotas),ynollevapuntocoma.
Ejemplo:

<h1><%=titulo%></h1>

7.4 Losscriptletsdecdigo
Unscriptletdecdigoestencerradoentre'<%'y'%>'(sinlascuotas).
UnscriptletdecdigopuedeserutilizadoparaescribirelcdigoJavaqueseejecutaraenlapginaJSP.Sepuede
utilizarparadeclaraclasescmoparaimplementaresquemadedecisinadentrodelapginaparaqueseadinmica.
Losscriptletssepuedenutilizaradentrodelacabecera,oenelcuerpodelapginaHTML.
SielscriptlettienequegeneraralgncdigoHTML,haydosposibilidades:
1. elcdigoHTMLsegeneraadentroelcdigoJavautilizandoelmtodoout.printoout.println
2. seabreunbloquedecdigoJava,secierraelscriptletyseponeelcdigoHTMLcmoenunapginaHTML
normal(perosepuedeutilizarotrosscriptletsadentrodeestecdigo).

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina21/46

ElscriptletquegeneracdigoHMTLtendrqueestarpuestoallugardedestinoenelcdigoHTML.Asquede
costumbrelaspginasJSPcontienenvariosscriptlets.Primero,enlacabecera,unscriptletconelcdigode
inicializacindelasvariablesyelcdigoquenogeneracdigoHTML,yenelcuerpo,elloslugaresdeseados,los
scriptletsquegenerarancdigoHTMLparacompletarelcdigoHTMLfijo.
Ejemplono1:
<html>
<head>
<%!
String titulo="Mi primera Pgina JSP";
int nrPagina=1;
%>
<title><%=titulo%></title>
</head>
<body>
<h1><%=titulo%></h1>
<hr>
<p>
Este es mi pgina en JSP numero
<%
nrPagina++;
out.print ("<font color=red><b>"+nrPagina+"</b></font> y me conviene el JSP");
%>.
</body>
</html>

Ejemplono2:
Porejemplo,enelcdigosiguiente,segnlahoradelda,semarcara'Buenosda',o'Buenastarde',o'Buenasnoche'.
<html>
<head>
<title>Saludo</title>
</head>
<body bgcolor="white">
<% java.util.Date clock = new java.util.Date( ); %>
<% if (clock.getHours( ) < 12) { %>
<h1>Buenos das!</h1>
<% } else if (clock.getHours( ) < 18) { %>
<h1>Buenas tardes!</h1>
<% } else { %>
<h1>Buenas noches!</h1>
<% } %>
</body>
</html>

7.5 Agregarcomentarios
Paraagregarcomentariosenunscriptlet,sepuedenutilizarloscomentariosdeJava: //parasimplelnea,/*y*/
paramltiplelneas.
Paracomentariosafueradeunscriptlet,puedenutilizarloscomentariosHTML,quesoncontenidosentre <!--y-->,
peroestoscomentariossernenviadosalnavegadordelclientey,anquenoservisibleenlapginaweb,sern
visibleporelusuariosielpreguntaalnavegadordeensearleelcdigofuente.
Siquierenponercomentariosafueradeunscriptlet,peroquenoseaenviadoalnavegadordelusuario(yasinvisible
parael),hayqueutilizarelscriptletdecomentariosJSPqueempiezacon <%--yterminacon--%>.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina22/46

8 Utilizacindedirectivas
LasdirectivasdepginasdaninformacionessobrelapginaalservidorJSP.Nogeneranningunainformacinvisible
paraelusuario,peropermitedeterminarlamaneraqueelservidorvautilizarparatratarelcdigoJSPdelapgina.
Existentrestiposdedirectivas:depgina,deinclusin,ytaglib.Paraadjuntarunadirectiva,hayqueincluirlaentre <
%@ y%>.Lainstruccindedirectivaincluyeeltipodedirectiva,elparmetrodeladirectiva,elsignoigual,ylavalor
delparmetro,enesteorden.

8.1 Directivadepgina
Ladirectivadepginaeslamsutilizada.Ellapermitedeespecificarinformacionesrelativasalaconfiguracindela
pginaJSP,comoeltipodecontenido.AssielcontentType = "text/plain",lapginaJSPresultandoseensearacomo
textonormal,ynoHTML.
Ciertosnavegadores,comoInternetExplorer,quierenserdemasiadointeligenteycorregirlassupuestaerroresdel
desarrollador,asquemismoconladirectivadepginaparaindicarqueesuntextonormal,ellotrataracomo
HTML...
Estaaconsejadodeincluirlasdirectivasdepginaencimadelcdigo,antesdelaetiqueta<html>.
Ejemplo:
<%@ page contentType="text/plain" %>
<html>
<head>
<title>Test directiva de pgina</title>
</head>
<body bgcolor="white">
La fecha de hoy es <%= new java.util.Date() %>
</body>
</html>

8.1.1

ListadeparmetrosparadirectivadePgina

Attributo
autoFlush

buffer

contentType
errorPage
extends

import
info

Defecto
true

Estverdadero(true)cuandoelbufferdelapginadebeserenviado
automticamentecuandoestlleno,ofalso(false)siunaexcepcindebeser
generadacuandoestalleno.
8kb
Especificaeltamaodelbufferparaestapgina.Eltamaodebeserexpresadoen
kilobytes,seguidodekb,otienequeserlapalabraclavenone(ninguna)para
deshabilitarlaopcindelusodeunbuffer.
text/html EspecificaeltipoMIMEdelarespuestageneradaporlapgina,ydemanera
opcional,eltipodecaracteresdelapginafuenteydelarespuesta.
Nodefecto UnapginaJSPquehayqueensearencasedeerrordurantelaejecucindel
cdigodelapgina.
Nodefecto ElnombrecompletodelaclaseJavaquelapginaJSPgeneradaextiende.Laclase
tienequeimplementarelJspPageoelinterfazHttpJspPagedelpaquetejavax.servlet.jsp.
Notaquenoestrecomendadodeutilizaresteatributo.Especificandosupropio
superclassrestringelaposibilidaddelcontenedorJSPdeentregarunasuperclass
especializadaydealtorendimiento.
Nodefecto DeclaracindelaimportacindeclasesopaquetesJava(separadosporcoma)
Nodefecto Textoqueuncontenedorwebpuedeutilizarcomodescripcindelapginaensu
interfazdeadministracin.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

isErrorPage

false

isThreadSafe

true

language
session

java
true

Pagina23/46

Siestpuestoaverdadero(true),significaqueestapginaesunapginadeerror
personalizada,ypermiteelusodelavariableimplcitaexceptionadentrodelos
scriptlets.Utilizafalso(false)parapginasJSPnormales..
Siestpuestoaverdadero(true),elcontenedorestpermitidodeutilizarvarios
hilosdeejecucinatravsdeestapgina(porejemplo,tratarconsultasdelapagina
enparalelo).Siestfalso(false),elcontenedortratalasconsultasporlapginaen
serie.Larecomendacinesdeutilizarsiempreverdadero(true)ymanejarlos
problemasdeejecucinmultihiloevitandodeclaracionesJSPyasegurndoseque
todoslosobjetosutilizadosenlapaginasonprocesoseguro(threadsafe).
Defineelidiomadescriptingutilizado.
Siestpuestoaverdadero(true),lapginaparticipaenlasesindelusuario.Siest
falso(false),lasvariablesdesesinimplcitasnoestndisponibleenlapgina.

Unaunidaddetranslacin(lafuenteJSPytodoslosarchivosincluidosutilizandoladirectivadeinclusin)pueden
contenervariasdirectivasdepgina,perosolounejemplodecadaatributopuedeserpresente,alaexcepcindel
atributoimport.Sivariosimportestnutilizados,estarntodosajuntadosenunalistadedefinicindeimportacin.
Ejemplo:

<%@ page language="java" contentType="text/html;charset=Shift_JIS"%>


<%@ page import="java.util.*, java.text.*" %>

8.2 Directivadeinclusin
LadirectivadeinclusinpermiteincluiradentrodelapginaJSPunoovariosarchivosdetextooHTML.Eso
permitedeincluirunmismoarchivoenvariaspaginasJSP,sintenerquecopiarlo.
Losnombresdearchivosincluidospuedentenercualquieraextensin(txt,html,inc,jsp...),peroexisteunaextensin
especfica'jspf'(JSPFragment)quepermitelavalidacindelcdigoincluidoenvariosentornos(Eclipse,...).
ElarchivoincluidotienequeserpresenteyaccesibleenelsistemadearchivosdelservidorJSP.
Ejemplo:

<html><head>
<title>Test directiva de pgina</title>
</head>
<body bgcolor="white">
Aqu mi texto incluido:<br>
<%@ include file="epl-v10.html" %>
</body>
</html>

8.3 Directivataglib
Ladirectivataglibpermitededefiniretiqu"etaspersonalizadas,parautilizaraccionespersonalizadasadentrodel
JSP.Lasintaxiseslasiguiente:<%@ taglib uri="librera_de_etiquetas.tld" prefix="mi_accion" %>
Parapoderutilizarlas,necesitamosaprenderlasaccionespersonalizadas,quesemiranenotrocurso(JSPAvanzado).

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina24/46

9 Utilizacindevariablesdesesin
Lasvariablesdesesinsonvariablesquesepuedenatribuiraunclienteconectado,yqueserndisponibleporel
tiempoqueduralasesin:Lasesinexpiracuandosecierraennavegador,onosenavegaenelsitioporuncierto
tiempo(dependedelaconfiguracindelservidorysepuedemodificarenelcdigoJSP),ocuandoseinvalidalasesin
explcitamenteenelcdigoJSP.
Cadaclienteconectadopodrastenersuspropiasvaloresquesequedaranguardadasenlamemoriadelservidor.

9.1 Declaracindevariabledesesin
Paradeclaraocambiarelvalordeunavariabledesesin,seutilizaelmtodosetAttribute(String
delobjetosession.

nombre, Object valor)

Porejemplo:session.setAttribute("nombre","Cedric")crealavariabledesesinnombreconelvalorCedric.Silavariable
yaexiste,sololecambiaelvalor.

9.2 Recuperarelvalordeunvariabledesesin
Pararecuperarelvalordeunvariabledesesin,seutilizaelmtodogetAttribute(String
variablenoexiste,regresaraelvalornulo.

nombre)delobjetosession.Sila

Porejemplo:session.getAttribute("nombre")regresaraunobjeto.Esteobjetotienequeserconvertidodemaneraexplicita
enString.ElvalordelStringserCedric,segnelejemplodearriba.
Ejemplo:
String miNombre=(String) session.getAttribute("nombre");

9.3 Invalidarunasesin
Parainvalidarunasesin,seutilizaelmtodoinvalidate()delobjetosession.
Porejemplo:session.invalidate()vaainvalidarlasesincorrientedelusuario.

9.4 Otrosmtodos
Paraverlosotrosmtodosdisponibles(removeAttribute,getId,...)referirsealadocumentacinjavadelinterfaz
javax.servlet.http.HttpSession

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina25/46

10Objetosimplcitos
CuandousanscriptletsenunapginaJSP,hayunsinnmerodeobjetos(situadosabajo)queelcontenedorJSP
mantienedisponible.Estosobjetosestnllamadosobjetosimplcitos.Estosobjetossoninstanciasdeclasesdefinidas
enlasespecificacionesdelservletydelJSP.Paralosdetalles,verladocumentacindeJavadisponibleenlnea.
NombredeVariable Typo
request
response
pageContext
session
application
out
config
page
exception

javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpServletResponse
javax.servlet.jsp.PageContext
javax.servlet.http.HttpSession
javax.servlet.ServletContext
javax.servlet.jsp.JspWriter
javax.servlet.ServletConfig
java.lang.Object
java.lang.Throwable

10.1request

Elobjetorequestesunainstanciadelaclasejavax.servlet.http.HttpServletRequest.Esteobjetoleofrecemtodospara
accederatodalainformacindelaconsultahttpcorriente,comolosparmetros,atributos,cabeceras,ycookies.

10.2response

Elobjetoresponserepresentaelmensajedelarespuestacorriente.Esunainstanciadelaclase
javax.servlet.http.HttpServletResponse,conmtodosparadefinirlacabecera,elcdigodeestado,yparaadjuntarcookies.
Tambinofrecemtodosparaseguimientodesesin.

10.3session

Elobjetosessionlepermiteaccederalosdatosdesesindelcliente,manejadosporelservidor.Esunainstanciade
javax.servlet.http.HttpSession class.

10.4application

Esunainstanciadejavax.servlet.ServletContext class.Esteobjetomantienereferenciasaotrosobjetosquevarios
usuariospuedenacceder,comounaconexindebasededatoscompartidaportodoslosusuarios.Tambincontiene
mtodoscomolog()paraescribirmensajeseneldiariodelcontenedor.

10.5out

Esunainstanciadejavax.servlet.jsp.JspWriter.Tienedosmtodosprincipales,quesonprint()yprintln().Esparecidoal
System.out,soloqueescribelasalidaenlafuturapginaHTML.

10.6exception

ElobjetoExceptionesdisponiblesolamenteenpginasdeerror,ycontieneinformacionessobrelaerrordeejecucin
queocurri.Loutilizaremosenelcapitulodegestindeerrores.Existentresotrosobjetosimplcitos(pageContext,
config, and page)peroestmuyraroqueseusanenJSP.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina26/46

11Losformularios
11.1Creacindelformulario

LosformulariosestncreadossimplementeenHTML.ElJSPsepuedeutilizaradentrodelformulariopara,por
ejemplo,asignarvalorespordefectoodesactivarciertoscampossegnlainformacindisponible(variabledesesin,u
otroformulario).
Esmuyimportantequecadacampodelformulariotengaunnombre(parmetroNAMEdelcampo).
ParaelparmetroMETHOD,lesaconsejosiempreutilizarPOST.ElparmetroACTIONpuedeserunservletounapginaJSP.
AquvamosautilizarunapginaJSP.

11.2Tratamientodelformulario

Cuandoelformularioestenviado,lapginaJSPalacualseenvopuederecuperarelcontenidodecadacampo
utilizandoelmtodogetParametero,sivariasvalorespuedenserelegidasalamismavezenelcampo getParameterValues,
delobjetorequest.
LosmtodosgetParameter ygetParameterValuesaceptaunparmetro:elnombredelcampoporlocualdeseamoselvalor.
Siprobamosdesacarelvalordeuncampoquenoexiste,elvalorsernulo.
Paramsfacilidad,sepuedenguardarlosvaloresenvariables.Pordefecto,todoslosparmetrossondetipoString
para getParameter,yString[]paragetParameterValues.Siqueremoscambiarlosaotrotipo,hayqueutilizarlosmtodos
Javaapropiadosparaconvertirlostipos.
Elobjetorequesttienetambinotrosmtodosquepermitenobtenerinformacinsobrelaconsultaencurso,entreotros:
getLocal():regresalosparmetroslocalesdelPCdelcliente
getRemoteAddr():regresaelIPdelPCdelcliente
getRemoteHost():regresaelnombredelPCdelcliente
Ejemplo:
formulario.jsp(quesepodratambinllamarformulario.htmlporquenollevacdigoJSP)
<html>
<head>
<title>Test formulario</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Formulario de prueba</h1>
<hr>
<p>
<form name="formulario" action="resultadoFormulario.jsp" method=POST>
<table border=0>
<tr>
<th>Su nombre:</th><td><input type=text name="nombre" size=30></td>
<th>Su apellido:</th><td><input type=text name="apellido" size=30></td>
</tr>
<tr>
<th>Su direccin:</th><td colspan=3><input type=text name="domicilio" size=100></td>
</tr>
<tr>
<th>Su pais:</th><td><select name="pais">
<option>Blgica
<option selected>Nicaragua
<option>Otro
</select></td>
</tr>
<tr>

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina27/46

<th>Su no de tel:</th><td><input type=text name="tel" size=30></td>


<th>Su no celucar:</th><td><input type=text name="cel" size=30></td>
</tr>
<tr>
<th>Su nota:</th><td colspan=3><textarea name="nota" cols=75 rows=5></textarea></td>
</tr>
<tr>
<th></th><td><button type=reset>Resetiar</td>
<th></th><td><button type=submit>Enviar</td>
</tr>
</table>
</form>
</body>
</html>

resultadoFormulario.jsp:
<html>
<head>
<%
String nombre=request.getParameter("nombre");
String apellido=request.getParameter("apellido");
String domicilio=request.getParameter("domicilio");
String pais=request.getParameter("pais");
if (pais==null) pais="Otro";
String tel=request.getParameter("tel");
String cel=request.getParameter("cel");
String nota=request.getParameter("nota");
%>
<title>Resultado de formulario</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Resultado de su formulario</h1>
<p>
<p>
Estimado/a seor(a) <big><%=apellido%></big>,<br>
<br>
Le/a informamos que su formulario fue transmitido con xito.
<p>
<%
if (!pais.equals("Otro"))
{
%>
Notamos que Usted vive en <big><%=pais%></big>, por favor elige su cuidad:<br>
<form name="formulario" action="resultadoFormulario2.jsp" method=POST>
<select name="cuidad">
<%
if (pais.equals("Nicaragua"))
{
%>
<option>Managua
<option>Leon
<option>Granada
<option>Otro
<%
} // Nicaragua
if (pais.equals("Blgica"))
{
%>
<option>Bruselas
<option>Namur
<option>Arlon
<option>Otro
<%
} // Belgica
%>
</select>
<input type=hidden name="nombre" value="<%=nombre%>">
<input type=hidden name="apellido" value="<%=apellido%>">
<input type=hidden name="domicilio" value="<%=domicilio%>">
<input type=hidden name="pais" value="<%=pais%>">
<input type=hidden name="cel" value="<%=cel%>">
<input type=hidden name="tel" value="<%=tel%>">
<input type=hidden name="nota" value="<%=nota%>">
<button type=submit>Enviar</button>
</form>
<%
} // otro pais
%>
<hr>
<h3>Enlaces</h3>
<a href="index.jsp">Regresar al indice</a><br>
<a href="formulario.jsp">Regresar al formulario</a>

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina28/46

</body>
</html>

resultadoFormulario2.jsp:
<html>
<head>
<%
String nombre=request.getParameter("nombre");
String apellido=request.getParameter("apellido");
String domicilio=request.getParameter("domicilio");
String pais=request.getParameter("pais");
String tel=request.getParameter("tel");
String cel=request.getParameter("cel");
String nota=request.getParameter("nota");
String cuidad=request.getParameter("cuidad");
%>
<title>Resultado de formulario</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Resultado final de su formulario</h1>
Su nombre : <%=nombre%><br>
Su apellido : <%=apellido%><br>
Su domicilio : <%=domicilio%><br>
Su cuidad : <%=cuidad%><br>
Su pais : <%=pais%><br>
Su celular : <%=cel%><br>
Su telefono : <%=tel%><br>
Su nota : <%=nota%><br>
<p>
El nombre de su PC : <%=request.getRemoteHost()%><br>
El IP de su PC : <%=request.getRemoteAddr()%><br>
<hr>
<h3>Enlaces</h3>
<a href="index.jsp">Regresar al indice</a><br>
<a href="formulario.jsp">Regresar al formulario</a>
</body>
</html>

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina29/46

12Elementosdeaccionesestndar
12.1<jsp:forward/>

EnvaelprocesadodeunaconsultaaunservletounapginaJSP.El<jsp:forward>envaaotrapginaoservletsin
cambiarelURLdeorigen.
Ejemplo:
<jsp:forwardpage="tagSinCuerpo.jsp"/>

12.2<jsp:include/>

IncluyeunservletoJSPdurantelafasedelprocesodeconsulta.
Ejemplo:
<jsp:includepage="tagSinCuerpo.jsp">

12.3<jsp:param>

AdjuntaunvalordeparmetroaunaconsultapasadaaotroservletoJSPutilizando<jsp:include>o<jsp:forward>.
Ejemplo:

<jsp:forward page="tagSinCuerpo.jsp">
<jsp:param name="test" value="mi paramtro"/>
</jsp:forward>
<jsp:include page="tagSinCuerpo.jsp">
<jsp:param name="test" value="mi pgina incluida!"/>
</jsp:include>

12.4<jsp:plugin>

GenerauncdigoHTMLquecontieneloselementos(OBJECToEMBED)apropiadosdependiendodelnavegadordel
cliente,necesariosparaejecutarunAppletconelprogramadeJavaPlugin.
Losatributoscode,
Atributo
align
archive

code
codebase

height
hspace

iepluginurl

jreversion
name
nspluginurl

codebase,ytypesonobligatorios.

Descripcin
Alineacindelapplet.Valoresvlidas:bottom, middle, top.
ListadeURIsparaarchivosconteniendoclasesyotrosrecursosquesernprecargados,
utilizandoAppletClassLoaderyelatributoCodebase(URIsrelativos).
Elnombrecompletodelaclasedelobjeto.
Elcaminorelativohacialacarpetaquecontienelaclase.Debeserunasubcarpetadel
sitio.
Alturadelazonadelapplet.Enpxelesoenporcentaje.
Cuantidaddeespacioblancoadejaraladerechayizquierdadelazonadelapplet,en
pxeles.
DireccinURLadondeseencuentraunaversindelpluginJavaparaInternetExplorer.
Actualmente,elpluginseencuentraenelJRE.
VersindeJREmnimarequeridaparaquefuncionaelplugin.
Nombredelapplet,utilizadoporotrasappletenlamismapgina,paracomunicarse.
DireccinURLadondeseencuentraunaversindelpluginJavaparaNescape.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

type
vspace
width

Pagina30/46

Actualmente,elpluginseencuentraenelJRE.
Tipodeobjeto:appletobean.
Cuantidaddeespacioblancoadejararribayabajodelazonadelapplet,enpxeles.
Anchodelazonadelapplet.Enpxelesoenporcentaje.

Ejemplodeplugin:

...
Ejemplo de plugin...<br>
<jsp:plugin type="applet" code="Clock2.class"
codebase="applet"
jreversion="1.2" width="160" height="150" >
<jsp:params>
<jsp:param name="bgcolor" value="ccddff" />
<jsp:param name="fgcolor1" value="ccd000" />
<jsp:param name="fgcolor2" value="c0000f" />
</jsp:params>
<jsp:fallback>
<jsp:include page="/Pie" />
Plugin tag OBJECT or EMBED not supported by browser.
</jsp:fallback>
</jsp:plugin>
...

12.5<jsp:params>

Permiteasignarunvaloraunoovariosparmetrosdelapplet.

12.6<jsp:fallback>

Permiteensearuntextoencasodequeelnavegadordelclientenosoportaelementos<object>o<embed>.

12.7<jsp:useBean>

PermitedeponerunJavaBeandisponibleadentrodeunapgina.MsdetallesenelcaptulodeJavaBeans.

12.8<jsp:getProperty>

SacaelvalordeunapropiedaddeuncomponenteJavaBeanyloadjuntaalarespuesta.Msdetallesenelcaptulode
JavaBeans.

12.9<jsp:setProperty>

AsignaunvaloraunapropiedaddeunJavaBean.MsdetallesenelcaptulodeJavaBeans.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina31/46

13Gestindeerrores
ExistentrescategorasdeerroresenJava.Loserroresdecompilacin,loserroresdeejecucin,yloserroresdelgica.
Loserroresdeejecucin

13.1Erroresdecompilacin

Loserroresdecompilacinsonlaserroresdesintaxis.Alcompilarelcdigo,elservidorJSPdetectaloserroresqueno
respetanlasintaxisdelJava,ascomoerroresdeconversindetipos,usodevariablesnodeclaradas,etc...
Cuandoocurrenerroresdecompilacin,eldetalledelaerrorapareceenlapginaJSP.

13.2Erroresdelgica

Loserroresdelgicasonerroresdebidoaundiseoincorrectodelcdigo.Porejemplo,unbuclequenuncatermina,
unafaltadeortografaenuntexto,unaformuladeclculoequivocada,...

13.3Erroresdeejecucin

LoserroresdeejecucinsonexcepcionesqueJavanopudodetectaralcompilarelcdigo.Porejemplo,unnmero
divididoporcero,ollamaraunabasededatosquenoexiste,etc...
Existendosclasesdeexcepciones:laclaseErrorylaclaseException.
LasexcepcionesdelaclaseErrorabarcanfallosgravesqueelprogramanovaapoderrecuperary,portanto,no
puedensercaptadas.
LasexcepcionesdelaclaseExceptionsonexcepcionesqueJavapuedecapturar.Existenvariassubclases,como Runtime
Exception, IOException, InterruptedException,...
LasexcepcionesdelaclaseExcepcionpuedenseratrapadaadentrodelcdigo,paratomaraccincorrectivayasevitar
quelaerrorseafatalparalaaplicacin.
EnJSP,tenemosdosposibilidades:tratarlaexcepcinenelscriptlet,conbloques,comosehaceenelidiomaJava,o
dejarlapaginadeerrorquevienepordefectoconelservidorJSP(noesmuylinda...),outilizarunapginadeerror
personalizada.
13.3.1

Pginadeerrorpersonalizada

Parapoderutilizarunapginadeerrorpersonalizada,hayqueutilizarladirectivadepginaerrorPageenlapagina
adondepuedeocurrirelerror,quevaareferiraotrapginaJSP,queeslapginadeerrorpersonalizada.
LapaginadeerrorpersonalizadadebecontenerladirectivadepginaisErrorPage="true".Lapginadeerrores
capazdeensearcualeralaerrorqueocurri.
Ejemplo:
TestError.jsp(estapginageneralaerror,ynosevaaverestapgina)
<%@page autoFlush="false" errorPage="Error.jsp" %>
<html>
<head>
<%
int i = 5/0;

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina32/46

%>
<title>Prueba</title>
</head>
<body bgcolor="white">
<h1>Prueba</h1>
<hr>
La valor de i es <%=i%> <br>
<hr>
<a href="formulario.jsp">Formulario</a><br>
<a href="TestBean.jsp">Test Bean</a><br>
</body>
</html>

Error.jsp(estapginasemiraenvezdelapginaqueengendrolaerror)
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Pagina de error</title>
</head>
<body bgcolor="FFCCCC">
<h1 style="color=red;">Se encontro un error</h1>
<hr>
Estimado Usuario,<br>
<br>
se encontro un error procesando su encuesta. <br>
<br>
Lo sentimos, y estamos haciendo lo posible para reparar este error lo ms pronto posible.<br>
Usted puede reportar la error a nuestro servicio al cliente, al correo electronico <a
href="mailto:servicioalcliente@alcaldia.gob.ni">
Servicio al cliente</a>.
<p>Gracias por comuncarnos el detall de la error.
<p>
La pagina es: <%=request.getRequestURI()%></p>
<p>
La error es: <%=exception.getMessage()%></p>
<p>Ms detalles:<br>
<%=exception.toString()%>
<p style="font-family: Monospace; font-size: 10px ;font-weight: bold;">
<%
exception.fillInStackTrace();
for (StackTraceElement s : exception.getStackTrace()){
out.println(s.toString()+"<br>");
}
%>
</p>
<hr>
<a href="menu.jsp">Menu</a><br>
</body>
</html>

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina33/46

14UtilizacindeJavaBean
14.1QuesunJavaBean?

UnJavaBeanesunaclaseJavaqueestllamadadedesdeunapginaJSP.LosJvaBeanssiempreimplementanla
claseserializable.
EsopermitellamaraunamismaclasededesdevariaspginasJSP.

14.2DeclaracindeunJavaBean

ParapoderutilizarunJavaBean,laclasedebeestaraccesiblealServidorJSP.Porejemplo,seponelaclasecompilada
enlacarpetadelsitioweb,bajolasubcarpetaWEBINF/classes.
Sialgunalibrera(archivoJAR)esnecesario,comoporejemploeldriverJDBC,hayqueponerloenlasubcarpeta
WEBINF/lib.
14.2.1

<jsp:useBean>

EnlapginaJSP,sedeclaraelBeanantesdeusarlo,yseleatribuyeunnombre(ID),utilizandolaetiqueta
<jsp:useBean>conlosparmetrosclass=nombredelaclase,ID=nombredemiBeanparamipginaJSP,yscopeparala
duracindevidadelBean(page, request, session, application)yqueestpuestoapagepordefecto.
Luego,seutilizaelBeanusandocomosieraunobjetoJava,conelnombredelobjetoqueeseldelID.
Ejemplo:
LeerDB.java
package bean;
import java.sql.DriverManager;
public class LeerDB extends com.solucionjava.db.ConnectDB{
public LeerDB() throws Exception {
super();
}
public LeerDB(int sin_conexion) {
super(sin_conexion);
}
public LeerDB(String origin) throws Exception {
super(origin);
}
public LeerDB(String origin, String datasourceName) throws Exception {
super(origin, datasourceName);
}
protected void initConnectionVariables() {
datasourceName=null;
try {
debug("Buscando el driver JDBC...");
Class.forName(
"com.mysql.jdbc.Driver"
//"org.postgresql.Driver"
//"oracle.jdbc.driver.OracleDriver"
//"com.microsoft.sqlserver.jdbc.SQLServerDriver"
//"org.firebirdsql.jdbc.FBDriver"
).newInstance();
debug("...Encontr el driver JDBC");
} catch (Exception e) {
debug("No pudo encontrar el driver JDBC !!!!");
e.printStackTrace(System.out);
return;
}
try {
debug("Connectando a la base de datos...");
con = DriverManager.getConnection(
"jdbc:mysql://localhost/curso?user=curso&password=123"

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina34/46
//"jdbc:postgresql://localhost/curso:5432","postgres","123"
//"jdbc:oracle:thin:@192.168.0.10:1521/XE","curso","123"
//"jdbc:sqlserver://192.168.0.100:1433/database=curso/user=curso/password=123"
//"jdbc:firebirdsql:127.0.0.1:C:/firebird/data/curso.gdb","curso","123"

);
debug("...Connectado a la base de datos");
} catch (Exception e) {
debug("No pudo conectarse a la base de datos !!!!");
e.printStackTrace(System.out);
return;
}

TestBean.jsp:
<%@page contentType="text/html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<jsp:useBean id="leerDB" scope="page" class="bean.LeerDB" />
<title>Test Bean</title>
</head>
<body bgcolor="white">
<h1>Prueba de JavaBean, utilizado para conectarse a Oracle</h1>
<hr>
<center><form name="form" action="testBean.jsp" method="get">
<select name="pais" onchange="document.form.submit();">
<%
String pais=request.getParameter("pais");
if (pais==null) pais="France";
leerDB.select("select distinct job_country from employee");
while (leerDB.getNext()){
%>
<option value="<%=leerDB.getString(1) %>" <%=((leerDB.getString(1).equals(pais))?" selected ":"") %>>
<%=leerDB.getString(1) %></option>
<%} %>
</select>
</form></center>
<h2>Lista de empleados</h2>
<table>
<tr>
<th>Nombre</th><th>Apellido</th><th>Salario</th>
</tr>
<%
leerDB.select("select * from employee where job_country='"+pais+"'");
while (leerDB.getNext())
{
out.print("<td>"+leerDB.getString("first_name")+"</td>");
out.print("<td>"+leerDB.getString("last_name")+"</td>");
out.print("<td>"+leerDB.getString("job_country")+"</td>");
out.print("<td>"+leerDB.getString("salary")+" Cordobas</td>");
out.println("</tr>");
}
leerDB.cleanup();
%>
</table>
<hr>
<a href="menu.jsp">Menu</a>
</body>
</html>

14.2.2

<jsp:getProperty>

SacaelvalordeunapropiedaddeuncomponenteJavaBean.
Ejemplo:
<jsp:useBean id="clock" class="java.util.Date" />
La fecha y hora local del servidor son:
<ul>
<li>Da: <jsp:getProperty name="clock" property="date" />
<li>Mes: <jsp:getProperty name="clock" property="month" />
<li>Ao: <jsp:getProperty name="clock" property="year" />
<li>Hora: <jsp:getProperty name="clock" property="hours" />
<li>Minuto: <jsp:getProperty name="clock" property="minutes" />
</ul>

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

14.2.3

Pagina35/46

<jsp:setProperty>

AsignaelvalordeunapropiedaddeuncomponenteJavaBean.
Cuandosetrataderecibirparmetrosdeunformulario,siseutilizalaestrella*,elJSPasignaautomticamente
losvaloresalaspropiedadesdelJavaBeanquetienenelmismonombrequeunparmetrodelformularioenviado
(recibido),ydebeexistirelmtodosetAtributoparacadaatributo.
Ejemplo:
Usuario.java:

package bean;
import java.io.Serializable;
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
private String nombre;
public String apellido;
public void setNombre(String nombre){
this.nombre=nombre; }
public void setApellido(String apellido){
this.apellido=apellido;
public String getNombre(){
return this.nombre; }
public String getApellido(){
return this.apellido; }
}

formuBean.jsp:
<form name="formulario" action="setProperty.jsp" method=POST>
<table><tr>
<th>Su nombre:</th><td><input type=text name="nombre" size=30"></td>
</tr><th>Su apellido:</th><td><input type=text name="apellido" size=30></td>
</tr><th></th><td><button type=submit>Entrada</td>
</tr></form>
</table>

setProperty.jsp:

<jsp:useBean id="usuario" class="bean.Usuario">


<jsp:setProperty name="usuario" property="*" />
</jsp:useBean>
La infomacin siguiente fue guardada:
<ul>
<li>Nombre : <jsp:getProperty name="usuario" property="nombre" />
<li>Apellido: <%=usuario.getApellido()%>
</ul>

14.3ScopedeunJavaBean

AldeclararunJavaBean,sedeclaratambinelparmetroscope,quedefinesuduracindevida.
Esteparmetropudetenerunadelosvaloressiguiente:
Page:vlidosolamenteadentrodeestapgina
Request:vlidoadentrodelamismaconsulta(sobreviveaun<jsp:forward>)
Session:vlidodurantelasesindelusuario
Application:vlidodelempiezodelaaplicacinasuapago.
Parailustrarelscope,vamosautilizarunobjeto(counter)avariosnivelesdescope,yverlosresultados.
PuedenprobarlosdiferentesscopedeunJavaBeanconlaspginascounter.jspdelproyectoJSP_basico.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina36/46

15Utilizacindeservlets
15.1Quesunservlet?

UnservletesunaclaseJavaquepuedeserllamadadirectamentededesdeelnavegadorwebydelcuallasalidapuede
serledaporelnavegadorquelallamo.
Enrealidad,todaslapginasJSPestnconvertidasenservletporelservidor,laprimeravezquesellamalapgina,
yluegoelservidorsoloejecutaelservlet.

15.2Paraquesirveunservlet?

ElservletpudeservirparagenerarpginasHTML,peroesunpocofastidiosohacerlonosotros,poresoexisteelJSP.
Elservletquevamosacrearservirnmejorparatratarelresultadodeunformularioydespusenviarelusuarioa
otrapgina,opararegresaralnavegadorarchivosbinariosusandounflujo,loqueelJSPnopuedehacer.Por
ejemplo,enviaralnavegadorunaimagenounarchivoPDFquenoestapresenteenelsistemadearchivossinoen
unabasededatos,porejemplo.
Osservlets,comolosJavaBeansylasaccionespersonalizadas,permitendeencapsularlalgica,paraquesea
transparenteparaendiseadorweb.Permitentambindecrearcdigosquesonreutilizables,disminuyendoel
mantenimiento,eltamaodelaaplicacin,yelriesgodeerror.

15.3Anatomadeunservlet

UnservletesunaclaseJavaqueextiendelaclasejavax.servlet.http.HttpServlet.Estaclaseestabstractaydebeser
subclasadaparacrearunservletHTTPcapazdeservirparaelweb.Unservletdebesobreescribiralomenosun
mtododelassiguiente:
doGet,sielservlettienequemanejaconsultasHTTPutilizandoelmtodoGET.
doPost,sielservlettienequemanejaconsultasHTTPutilizandoelmtodoPOST.
doPut,sielservlettienequemanejaconsultasHTTPutilizandoelmtodoPUT
doDelete,sielservlettienequemanejaconsultasHTTPutilizandoelmtodoDELETE
initanddestroy,paramanejarrecursosquesonguardadosporlavidadelservlet
getServletInfo,queelservletutilizaparaentregarinformacinsobreelmismo.
Enrealidad,soloeldoGetydoPostsonutilizadas,porquelosmtodosdeconsultaPUTeDELETEnoseutilizan.
Ejemplo:

public class NombreDelServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{ ... }
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{ ... }
}

Losmtodosinitydestroysoloseutilizanencasodequeelservlettienequeguardarrecursosdurantetodasuvida.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina37/46

15.4Ciclodevidadeunservlet

Lavidadeunservlettienetresmomentosimportantes:suinicializacin,suutilizacin,ysudestruccin.
Paramanejarsuinicializacin,sesobreescribeelmtodoinit().Estosirvepara,porejemplo,manejarreferenciasa
recursosexternos,comoinformacindeconfiguracinobasededatos.
Cadavezqueseutilizaenservlet,sellamaalmtodoservice(),peronormalmentenosesobreescribeestemtodo
porqueseutilizaeldoGetoeldoPostparamanejarlasaccionesdelservlet.
Elmtododestroy()estllamadoalmomentodequeelservletsaledeservicio(principalmentecuandoseapagao
reiniciaelservidorweb).Estemtodopermiteliberarlosrecursosqueelhaadquiridoconelmtodoinit().

15.5Creacindeunservletsimple

UnservletesunaclaseJavaqueextiendelaclaseHttpServlet,yporlacualsesobredefineelmtododoGetoelmtodo
doPost.EldoPostesunpocomslentoqueeldoGet,peropermitetratarformulariosdemsde2000caracteresloqueel
doGetnopuede.
Paraqueelservletseaaccesibleenelsitio,eltienequeserdefinidoenelarchivodeconfiguracindelsitioweb,quees
elarchivoweb.xml,queseencuentrabajolacarpetaWEBINF,outilizarlasanotaciones
@WebServlet("...")sielservidorsoportalaversin3.0delAPIJavaServlet.
Ejemplo:
formuServlet.jsp:
<html>
<head>
<title>Prueba de formulario enviado a un servlet</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Formulario para Servlet</h1>
<hr><p>
<form name="formulario" action="servlet/ProcesFormulario" method=POST>
<table border=0><tr>
<th>Su nombre:</th><td><input type=text name="nombre" size=30></td>
</tr><tr>
<th></th><td><button type=submit>Enviar</td>
</tr></table>
</form>
</body>
</html>

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina38/46

ProcesFormulario.java
package servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/ProcesFormulario")
public class ProcesFormulario extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("<html>");
out.println("<head>");
out.println("<title>Resultado del Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Llego con el metodo GET !!!</h1>");
out.println("<hr>");
out.println("</body>");
out.println("</html>");
System.out.println("Llego por el metodo GET !!!");
}

public void doPost(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
try
{
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("<html>");
out.println("<head>");
out.println("<title>Resultado del Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Su nombre es :"+request.getParameter("nombre")+"</h1>");
out.println("<hr>");
out.println("Este pagina fue generada por un servlet!");
out.println("</body>");
out.println("</html>");
}
catch (Exception e) {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("the error is:"+e.toString());
out.flush();
System.out.println("<center><font size=5> Error in inserting the data</font></center>");
System.out.println("the error is:"+e.toString());
System.out.println("Error is:"+e.toString());
}
}

15.6Usodeservletparamostrarimgenesoarchivosbinarios

Parapodermostrarimgenesoarchivosbinariosguardadosenunabasededatos,hayqueutilizarunservlet,yel
paquetecom.oreilly.servlet.Elusodeestepaqueteesgratuitoparausonocomercial.Parausocomercial,refirasea:
http://servlets.com/cos/license.html
com.oreilly.servletpackage:Thesourcecode,objectcode,anddocumentationinthecom.oreilly.servletpackageis
copyrightandownedbyJasonHunter.
Losservletsquepermitentraerarchivosbinariosdedesdelabasededatos,soncontenidosenunaclaselamada
Retrieverenelpaquetedoc.Lalibreradeservletllamada'COS'deOReillyestacolocadadebajode/WEBINF/lib,as
comoladeldriverdelabasededatos.
CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina39/46

Ejemplo:
Blob.jsp:

<%@page contentType="text/html" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<link href="curso.css" rel="stylesheet">
<head> <title>Lectura de BLOB's</title></head>
<jsp:useBean id="readDB" scope="page" class="bean.LeerDB" />
<body bgcolor="#FFFFFF">
<h1>Lista de archivos binarios disponibles:</h1>
<hr><img src="servlet/DocRetriever?photo_id=1">
<table class="table3">
<th class="th2">Adjunto</th>
<th class="th2">Commentario</th> </tr>
<% int chk=0;
readDB.consulta("select photo_id,photo_filename from photo_gallery");
while (readDB.getNext())
{
chk+=1;
out.println("<tr>");
out.print("<td class=\"td2\"><a href=\"servlet/DocRetriever?photo_id="+
readDB.getString("photo_id")+"\" target=\"_blank\">"+
readDB.getString("photo_filename")+"</a>");
out.print("</td><td class=\"td3\">"+readDB.getString("photo_filename")+"</td>");
out.print("</tr>");
}
if (chk==0)
{
out.print("<td width=\"25%\"></td><td width=\"45%\">No hay adjuntos.</td>");
out.print("<td align=\"center\"><input type=\"button\" value=\"Manejo de adjuntos\"
onClick=\"window.open(href='adjuntos.jsp')\"></td></tr>");
}
readDB.cleanup();
%>
</table>
</body>
</html>

Remover.java:
package doc;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* Creado por: Cedric Simon
* Uso: Quitar un archivo binario de una base de datos.
* Licencia : El uso de este cdigo, o perte de este cdigo esta permitido
*
para uso no comercial.
*
*
Los paquetes de com.oreilly.servlet que son importados en este cdigo
*
estn protegido por una licencia. Mas detalles el http://servlets.com/cos/license.html
*
*/
@WebServlet("/Remover")
public class Remover extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
try
{
PrintWriter out = response.getWriter();
response.setContentType("text/html");
java.sql.Connection con = null;
Class.forName("org.firebirdsql.jdbc.FBDriver");
con =
DriverManager.getConnection("jdbc:firebirdsql:127.0.0.1:C:/firebird/data/pulgas.gdb","pulgas","cs");
java.sql.Statement stmt =
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
String query = "delete from adjuntos where no_adjunto="+request.getParameter("no_adjunto");
stmt.execute(query);
out.println("<h3 align=\"center\"><font color=green>Archivo quitado</font></h3>");

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina40/46

out.println("<p align=\"center\"><input type=\"button\" onClick=\"self.location.href='../adjuntos.jsp?


no_pulga="+request.getParameter("no_pulga")+"';\" value=\"Regressar al manejo de adjuntos\">");
out.println("&nbsp;&nbsp;<input type=\"button\" onClick=\"/*alert('Empuja F5 para refrescar la lista de
adjuntos en el detalle de la pulga. Si has hechos cambios a la pulga, no empuje F5 pero guarda la pulga.');*/window.close();\"
value=\"Cierar la ventana\"></p>");
con.close();
}
catch (Exception e){
//
print error message
System.out.println("<center><font size=5> Error in inserting the data</font></center>");
System.out.println("the error is:"+e.toString());
System.out.println("Error is:"+e.toString());
}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException {
doPost(request,response);
}

DocRetriever.java:
package doc;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bd.LeerDB;
/*
* Creado por: Cedric Simon
* Uso: Traer un archivo binario de una base de datos.
* Licencia : El uso de este cdigo, o perte de este cdigo esta permitido
*
para uso no comercial.
*
*
Los paquetes de com.oreilly.servlet que son importados en este cdigo
*
estn protegido por una licencia. Mas detalles el http://servlets.com/cos/license.html
*
*/
@WebServlet("/DocRetriever")
public class Retriever extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
LeerDB readDB = null;
try {
readDB = new LeerDB(this.getServletName());
String sql = "select * from photo_gallery where photo_id="
+ request.getParameter("photo_id");
readDB.select(sql);
if (readDB.getNext()) {
int blobLen = readDB.getInt("photo_filesize");
response.setContentType(readDB.getString("photo_filetype"));
try {
ServletOutputStream sos = null;
sos = response.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(readDB
.getBinaryStream("data"));
byte bindata[] = new byte[blobLen];
int bytesread = 0;
if (!readDB.wasNull()) {
if ((bytesread = bis.read(bindata, 0, bindata.length)) != -1) {
sos.write(bindata, 0, bytesread);
} else {
sos.write(bis.read());
}
}
bis.close();
} catch (IOException ioe) {
System.err.println("Problem retrieving binary data1: "
+ ioe);
ioe.printStackTrace();
} catch (Exception cnfe) {
System.err.println("Problem retrieving binary data2: "
+ cnfe);
cnfe.printStackTrace();
}

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina41/46

}
} catch (Exception e) {
java.io.PrintWriter out = response.getWriter();
out.print("<h1><font color=red>ERROR !!!!</font></h1><hr><br />"
+ e);
e.printStackTrace();
e.printStackTrace();
String stack = "";
StackTraceElement stackElm[] = e.getStackTrace();
for (int cntStack = 0; cntStack < stackElm.length; cntStack++) {
stack += stackElm[cntStack] + "\n";
}
try {
readDB
.logError(this.getServletName(), e.toString(), stack,
((String) request.getHeaders("User-Agent")
.nextElement())
+ " - IP:"
+ request.getRemoteAddr()
+ " - Host:"
+ request.getRemoteHost()
+ " - Query string="
+ request.getQueryString(), 1);
} catch (Exception e1) {
e1.printStackTrace();
}
} finally {
// close DB
try {
if (readDB != null)
readDB.cleanup();
readDB = null;
} catch (Exception e) {
}
}

e.printStackTrace();

Uploader.java:
package doc;
import java.io.*;
import java.sql.*;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
import java.util.Enumeration;
/*
* Creado por: Cedric Simon
* Uso: Cargar un archivo binario en una base de datos.
* Licencia : El uso de este cdigo, o perte de este cdigo esta permitido
*
para uso no comercial.
*
*
Los paquetes de com.oreilly.servlet que son importados en este cdigo
*
estn protegido por una licencia. Mas detalles el http://servlets.com/cos/license.html
*
*/
@WebServlet("/Uploader")
public class Uploader extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;
public javax.sql.DataSource ds = null;
public
java.sql.Connection con = null;
private String dirName;
public void init(ServletConfig config) throws ServletException {
super.init(config);
// read the uploadDir from the servlet parameters
dirName = config.getInitParameter("uploadDir");
if (dirName == null) {
throw new ServletException("Please supply uploadDir parameter");
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
}

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina42/46

@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//

System.out.println("Step 0");
try{
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String name="";
String no_pulga="";
String doc_comment="";
Class.forName("org.firebirdsql.jdbc.FBDriver");
con = DriverManager.getConnection("jdbc:firebirdsql:127.0.0.1:C:/firebird/data/pulgas.gdb","pulgas","cs");
try {
MultipartRequest multi =
new MultipartRequest(request, dirName, 10*1024*1024,
"ISO-8859-1", new DefaultFileRenamePolicy());

Enumeration params = multi.getParameterNames();


while (params.hasMoreElements()) {
name = (String)params.nextElement();
String value = multi.getParameter(name);
if (name.equals("doc_comment")) doc_comment =value;
if (name.equals("no_pulga")) no_pulga =value;
}
Enumeration files = multi.getFileNames();
while (files.hasMoreElements()) {
name = (String)files.nextElement();
String filename = multi.getFilesystemName(name);
String type = multi.getContentType(name);
File f = multi.getFile(name);
if (f != null) {
FileInputStream fis = new FileInputStream(f);
PreparedStatement pstmt = con.prepareStatement("insert into adjuntos (adjunto,nombre,
doc_comment,tipo,no_pulga,medida) values(?,?,?,?,?,?)");
int i=1;
pstmt.setBinaryStream(i, fis,(int)f.length()); i++;
pstmt.setString(i,filename); i++;
pstmt.setString(i,doc_comment); i++;
pstmt.setString(i,type); i++;
pstmt.setString(i,no_pulga); i++;
pstmt.setInt(i,(int)f.length()); i++;
pstmt.execute();
fis.close();
f.delete();
out.println("<h3 align=\"center\"><font color=green>Archivo "+filename+" guardado.</font></h3>");
out.println("<p align=\"center\"><input type=\"button\" onClick=\"self.location.href='../adjuntos.jsp?
no_pulga="+no_pulga+"';\" value=\"Regressar al manejo de adjuntos\">");
out.println("&nbsp;&nbsp;<input type=\"button\" onClick=\"window.close();\" value=\"Cierar la
ventana\"></p>");
}
else {
// the field did not contain a file
out.println("<h3 align=\"center\"><font color=red>El archivo " + name + " no fue guardado porque estaba
VACILLO !!!</font></h3>");
out.println("<p align=\"center\"><input type=\"button\" onClick=\"self.location.href='../adjuntos.jsp?
no_pulga="+no_pulga+"';\" value=\"Regressar al manejo de adjuntos\">");
out.println("&nbsp;&nbsp;<input type=\"button\" onClick=\"window.close();\" value=\"Cierar la
ventana\"></p>");
out.println();
}
}
con.close();
}
catch (IOException lEx) {
con.close();
out.println("error reading or saving file. Talves el archivo es demasiado grande (max 9.5 MB).");
out.flush();
}
}
catch (Exception e) {
//
print error message
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("the error is:"+e.toString());
out.flush();
System.out.println("<center><font size=5> Error in inserting the data</font></center>");
System.out.println("the error is:"+e.toString());
System.out.println("Error is:"+e.toString());
}
}
}

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina43/46

16ElmodeloMVC
16.1QueselmodeloMVC?

ElmodeloMVC(ModelViewControler)esunconceptodeprogramacinqueintentadedividirlaaplicacinentres
partesdiferentes:elModelo,querepresentalosdatosdelaaplicacin,laVista,querepresentalapresentacindelos
datos(queestacontenidoenJavaBeansoEJB),yelControlador,querepresentalalgicadelnegocio(businesslogic).
Estecompartimientopermitealosdesarrolladoresderepartirmejoreltrabajo.Porejemplo,elquetrabajaenla
presentacindelosdatos,notienequepreocuparseporlalgicadelnegocio,niconelmanejodelosdatos.

16.2MVCconJSPyJavaBeans

ElmodeloMVCsepuedeutilizarconsolamentepginasJSPyJavaBeans.
UtilizarsolamenteJSPyJavaBeanseselcaminomsrpidoparallegaraunresultadovisible.Esbuenodeutilizarlo
paraaplicacionespequeasoprototipodeaplicacionesgrandes,yunavezlaestructuradelafuturaaplicacinestable,
yquelosdesarrolladorestienenunabuenacomprensindelaaplicacin,moverhastaelusodeservletsyEJB.
Elriesgoesquelamigracindelprototipohastalaaplicacinfinal,conusodeservletsyEJBnuncamiraelda...

16.3MVCconJSP,JavaBeansyservlet

Estemodelo,utilizandoelJSPparalapresentacin,losservletsparaelmanejodelalgicadelnegocio,ylos
JavaBeansparalosdatos,esunamanerapoderosadedesarrollaruneaplicacinbienestructurada,fcilamantener,
ylistaparaevolucionar.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina44/46

16.4MVCconJSP,servlet,JavaBeansyEJB

Estemodelo,utilizandoEJB,seutilizaparaaplicacionesempresariales,conservidorJ2EE.Eselmscomplejo,pero
tambinelmspoderoso.
LosEJBsirvenprincipalmenteparaelmanejodetransacionesyunmodelodecomponenteindependientedeltipode
cliente.SiUstedpiensaendesarollaraplicacionesparavariostiposdeclientes(navegador,aplicacinautonoma,
WAP,PDAs...),losEJBsonlamejoreleccin.
LasaplicacionesbasadasenEJBobliganalusodelmodeloMVC.HaydostiposdeEJB:losEJBdeentidades,ylosde
session.
LosEJBdeentidadesquerepresentanunapartedelnegocio,comounempleadoouncliente.LosEJBdeentidad
tienenunaidentidadnica:todoslosclientsquequierenutilizaresteentidadutilizanlamismainstanciadeesteEJB.
LosEJBdesessionseusanparamanejarlalgicadelnegocio,ysonutilizadossolamenteporelclientequeloha
creado.Demaneratipica,unbeandesessionoperasobrelosbeansdeentidadenlugardelcliente.

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina45/46

17Ejercicios
1)Utilizacindescriptlets:
a)Crearunapginaqueescribetodoslosnmerosde1a20enunatabladedoscolumnas(1a10y11a20)
utilizandounscriptletyunabucleJava.
b)CrearunobjetoMiAutoconatributoelcoloryelmodelo,ymtodopararegresarelcoloryel
modelo.Utilizarelobjeto,susatributosysumtodoenunapginaJSP.
c)CrearcomentariosenunapginaJSP,de4manerasdiferentes.
d)CrearunapginaJSPdelacualelcolordelfondoestbasadoellassegundasdelahoradelsistemaal
momentodelaaperturadelapgina:silahoratieneentre0y14segundos,fondoblanco,15y29,coloramarillo,
30y44,azulclaro,y45y59,verde(sinrefrescoautomtico).
2)Directivasdepginas:
a)IncluirunadirectivadepginaquemostrarelcdigofuentedeunapginaHTML.
b)IncluirunadirectivadepginaqueincluyeunarchivotextooHTMLenunapginaJSP.
3)Variablesdesesin:
a)Crearunformulariodeentradaalsitio,yrecuperarelnombredeusuarioenunavariabledesesinymencionar
sunombreenotraspginasrelacionadasdelmismositio.
b)Crearunformularioderegistro,ysiunusuariopruebadellegaraotrapginadelsitiosihaberregistrado,
mandarloalapginaderegistro.
c)Crearunaopcinenlaspginasparasalirdesusesin
4)Objetosimplcitos:
a)Verificarenladocumentacinlasopcionesdisponiblesparalosobjetosimplcitosyutilizarlasquelesparece
interesante.
5)Formulario:
a)Crearunformulariodeinscripcinaunconcurso(nombre,apellido,email),ydespusdehabertratadosu
contenido,ensearenotrapginaelcontenidodelformulariollenado,enformatodetabla.
b)AdjuntaralapaginaJSPtratandoelformulariohechoen5.aunasverificacionesalniveldelservidor(lostres
camposnopuedensernulo,elemaildebecontenerun?@?),yencasodeerror(camponulo,etc...)regresaral
formulariooriginalenseandoloscamposconerrores.
6)Accionesestndar:
a)InsertarunapginaJSPenotra:silahora<30sec,incluyeaunapagina,sinoaotra.
7)Gestindeerrores:
a)Crearyprobarunapginadeerrorpersonalizada.
8)JavaBeans:
a)CrearunJavaBeanquerepresentaunempleado,yutilizarelBeanparamanejarelempleado(creacin,
modificacin).Esosinllamadaalabasededatos,soloenmemoria.
b)Crearunapaginaquepermiteverlalistadeempleadosdelabasededatosyfiltrarlaporpais(job_country).
9)Servlet:
a)Crearunservletquetratalosdatosdeunformularioysegnelresultado(checkOKono)envaaunapginau
aotra.
b)Crearunservletqueintentaconectarsealabasededatosyencasodeerrordicecualeselniveldeerror(JDBC
drivernoencontrado,noconexinalabasededatos,consultaincorrecta).
c)Crearunapaginawebconteniendotextoeimgenes,quevienendeunabasededatos.
Ejerciciofinal(siquedatiempo):Crearunaaplicacinwebque:
1)Traetodosucontenidodeunabasededatos:Textos,etiquetas,imgenes,...
2)Tienepginadeerrorpersonalizadautilizadaporcadapgina.
3) Manejodeunsistemadecompraenlnea:elusuariopuedellenarunalistadecompras,verlascompras
anteriores,etc...

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

CursodeJavaServerPagesNivelbsico

Pagina46/46

18Esquemadelabasededatos

CopyrightCdricSimon,20052011

Versin2.3

Reproduccinprohibida

También podría gustarte