Professional Documents
Culture Documents
Java2EnterpriseEdition
Servlets
Java
JSPs
JSP
DAW
06/07
JDBC
J2EE
Java2EnterpriseEdition
Copyright 2006 Raquel CEDAZO LEN
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation; with
no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts.
A copy of the license is included in the section entitled "GNU Free
Documentation License".
DAW
06/07
http://www.gnu.org/copyleft/fdl.html
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
ndice
DAW
06/07
Introduccin
Servlets
Tomcat
Eclipse
Filtros
JSPs
TagLibs
JDBC
ANT
EasyEclipse
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Introduccin(1/5)
DiferentesplataformasdeJava:
J2SE(Java2StandardEdition)
J2ME(Java2MicroEdition)
DAW
06/07
Desarrollodeaplicacionesyapplets
Desarrollodeaplicacionesparamicrodispositivos(pantallaymemoria
limitados):PDAsytelfonosmviles
J2EE(Java2PlataformEnterpriseEdition)
Aplicacionesdeservidor
Coneltiempo,algunasAPIsdeJ2EEsevanpasandoaJ2SE
J2EEesunconjuntodeespecificacionesorientadasaldesarrollo
deaplicacionesempresariales
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Introduccin(2/5)
Caractersticasdelasaplicacionesempresariales:
Seguridad
Integracin
Arquitecturadetrescapas:
DAW
06/07
Accesoabasededatos
Transaccionalidad
Escalabilidad
Disponibilidad
Mquinacliente
MquinaservidorJ2EE
Basededatos
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Introduccin(3/5)
DAW
06/07
Especificacionesprincipales:
Servlets:APIparacrearaplicacioneswebdinmicas
JSPs(JavaServerPage):extensindeServletsparafacilitarel
desarrollodeaplicacionesweb
JDBC(JavaDabaseConnectivity):APIparaaccederabasede
datos(incluidaenJ2SE)
JNDI(JavaNamingandDirectoryInterface):APIparaaccedera
serviciosdedirectorios.Ej.LDAP(incluidaenJ2SE)
JMS(JavaMessageService):APIparacolasdemensajes
asncronas
EJBs(EnterpriseJavaBeans):APIparalarealizacinde
componentesdistribuidos
JTA(JavaTransactionAPI):APIpararealizaraplicaciones
transaccionalesdistribuidas
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Introduccin(4/5)
DAW
06/07
JavaMail:APIpararealizaraplicacionesdeemailindependientesde
plataformayprotocolo
JAF(JavaBeansActivationFramework):APInecesariopara
JavaMailparamanejarmensajesMIME(MultipurposeInternetMail
Extension)
JAXP(JavaAPIforXMLProcessing):APIparaparsearXMLy
transformacionesXSLT
JCA(JavaConnectorArchitecture):APIparaconectarconotros
sistemasdeinformacin.Ej.centrodemensajescortos
JAAS(JavaAuthenticationandAuthorizationServer):APIque
proporcionamecanismosdeautenticacinyautorizacin
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Introduccin(5/5)
J2EEnodejadeserunCONJUNTODEESPECIFICACIONES.
Existendiferentesimplementacionessegnelfabricante:
DAW
06/07
Libres
Tomcat:ContenedordeServletsymotordeJSPs
JBoss:ServidordeaplicacionesJ2EE
Geronimo:ServidordeaplicacionesJ2EE
Comerciales
BEAWebLogicServer
IBMWebSphere
OracleApplicationServer
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Servlets.Introduccin(1/4)
APIparalageneracindecontenidodinmico
Servlet:claseJavaquerecibepeticiones(normalmenteHTTP)y
generaunarespuesta(normalmenteHTMLoXML)
UnaaplicacinwebcompuestadeServletsseejecutaenun
servidordeaplicacionesweb(contenedor)
Usuario
navegador
HTTP
TCP
/IP
Petic
ion
Respu
e
DAW
06/07
(GET
/PO
ST)
ServletContainer(Tomcat)
s ta
Servlet
Servlet
Servlet
RaquelCEDAZOLEN
rcedazo@fi.upm.es
J2EE
Servlets.Ejemplo:HolaMundoServlet(2/4)
EJEMPLO
DAW
06/07
ImprimelacadenaHolaMundodesdeunServletenunapgina
web
Ficheros:
HolaMundoServlet.java
web.xml
RaquelCEDAZOLEN
rcedazo@fi.upm.es
10
J2EE
Servlets.Ejemplo:HolaMundoServlet(3/4)
HolaMundoServlet.java
packageservlets;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.*;
publicclassHolaMundoServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponse
response)throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
DAW
06/07
out.println("<html>");
out.println("<body><h1>HolaMundodesdeunServlet</h1></body>");
out.println("</html>");
}
}
RaquelCEDAZOLEN
rcedazo@fi.upm.es
11
J2EE
Servlets.Ejemplo:HolaMundoServlet(4/4)
web.xml
<?xmlversion="1.0"encoding="ISO88591"?>
<!DOCTYPEwebapp
PUBLIC"//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"
"http://java.sun.com/dtd/webapp_2_3.dtd">
<webapp>
<displayname>Ejemplos</displayname>
<description>
EjemplosdeJ2EE(DAW0607)
</description>
<servlet>
<servletname>HolaMundoServlet</servletname>
<servletclass>servlets.HolaMundoServlet</servletclass>
</servlet>
DAW
06/07
<servletmapping>
<servletname>HolaMundoServlet</servletname>
<urlpattern>/HolaMundoServlet</urlpattern>
</servletmapping>
</webapp>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
12
J2EE
Tomcat(1/3)
ServidordeaplicacionesweboContenedordeServlets
Tomcat:http://tomcat.apache.org
Descargar:Tomcat5.0.28(jakartatomcat5.0.28.tar.gz)
Requisito:JDK(JavaDevelopmentKit)
Descomprimir:tarzxvfjakartatomcat5.0.28.tar.gz
exportJAVA_HOME=DIR_INSTALACION_JDK
Scriptsdearranqueyparadadelservidor,dentrodel
directorio/bindeinstalacin:
ArrancarTomcat:
./startup.sh
DAW
06/07
PararTomcat:
./shutdown.sh
RaquelCEDAZOLEN
rcedazo@fi.upm.es
13
J2EE
Tomcat(2/3)
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
14
J2EE
Tomcat(3/3)
Pasosparadesplegarunaaplicacinweb:
DAW
06/07
CrearunarchivoWAR(Ejemplo:DAW0607.war):
WEB_INF
WEB_INF/classes
WEB_INF/lib
WEB_INF/web.xml
Copiardentrodeldirectoriowebapps
ReiniciarelTomcat
Abrirunnavegador:http://localhost:8080/DAW0607/MI_APLICACION
server.xml(directorioconf):permitedefinirnuevoscontextos
<Contextpath="/daw0607"docBase="/home/rcedazo/workspace/DAW0607/web/"
reloadable="true">
</Context>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
15
J2EE
Eclipse(1/2)
DAW
06/07
IDE(IntegratedDevelopmentEnvironment)
Descargar:EclipseSDK3.2.1http://www.eclipse.org
Requisito:JRE(JavaRuntimeEnvironment)
Eclipseplugins:http://eclipseplugins.2y.net/
RaquelCEDAZOLEN
rcedazo@fi.upm.es
16
J2EE
Eclipse(2/2)
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
17
J2EE
Filtros.Introduccin(1/5)
DAW
06/07
Accionesrepetitivas:controldeseguridad,herramientadelogs,
sistemacompresindedatos
Solucintradicional:includedeficheros
Filtro:mecanismogestionadoporelcontenedordeServletsque
interceptalaspeticionesaServletsoJSPsyqueactaantesy
despusdepasarelcontrolalServlet
PreprocesadoresypostprocesadoresdeServlets
Transparenciayreutilizacindecdigo
Contenidodinmicoyesttico(HTML,imgenes)
Mtodosqueimponelainterfaz:
init():inicializacindelfiltro
destroy():destruccindelfiltro
doFilter(request,response,filterChain)
RaquelCEDAZOLEN
rcedazo@fi.upm.es
18
J2EE
Filtros.Ejemplo:VelocidadFilter(2/5)
EJEMPLO
MideeltiempodeejecucindelosServletsyloimprimeporla
salidaestndar
Recibeunparmetroqueindicalaunidadenlaquesequiere
medireltiempo.Enestecasopuedensersegundoso
milisegundos
Ficheros:
DAW
06/07
VelocidadFilter.java
web.xml
RaquelCEDAZOLEN
rcedazo@fi.upm.es
19
J2EE
Filtros.Ejemplo:VelocidadFilter(3/5)
VelocidadFilter.java
packagefilters;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
publicfinalclassVelocidadFilterimplementsFilter{
privateFilterConfigfilterConfig=null;
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
this.filterConfig=filterConfig;
}
DAW
06/07
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
RaquelCEDAZOLEN
rcedazo@fi.upm.es
20
J2EE
Filtros.Ejemplo:VelocidadFilter(4/5)
longstartTime=System.currentTimeMillis();
chain.doFilter(request,response);
longstopTime=System.currentTimeMillis();
Stringunidad=filterConfig.getInitParameter("unidad");
Doubletiempo;
if(unidad.equalsIgnoreCase("segundos")){
tiempo=newDouble(((double)(stopTimestartTime))/1000);
}else{
tiempo=newDouble(stopTimestartTime);
}
System.out.println("Tiempodeejecucindelservlet
["+((HttpServletRequest)request).getServletPath()+"]:
"+tiempo+""+unidad);
DAW
06/07
publicvoiddestroy(){
this.filterConfig=null;
}
}
RaquelCEDAZOLEN
rcedazo@fi.upm.es
21
J2EE
Filtros.Ejemplo:VelocidadFilter(5/5)
web.xml
<filter>
<filtername>VelocidadFilter</filtername>
<filterclass>filters.VelocidadFilter</filterclass>
<initparam>
<paramname>unidad</paramname>
<paramvalue>segundos</paramvalue>
<description>Unidadenlaquesemideeltiempo(milisegundoso
segundos)</description>
</initparam>
</filter>
<filtermapping>
<filtername>VelocidadFilter</filtername>
<urlpattern>/*</urlpattern>
</filtermapping>
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
22
J2EE
JSPs.Introduccin(1/7)
JavaServerPage:Servletorientadoagenerareltextodela
interfazgrfica
Ventajas:
CiclodevidadeunJSP:
Primeravez:apartirdelJSPelservidordeaplicacionescreaun
Servlet,locompilaylocargaenmemoria.
Encasocontrario:lepasalapeticinalServletyacompilado.
SisemodificaelJSPdesdelaltimacompilacin:segeneraunnuevo
Servlet,locompilaylovuelveacargarenmemoria
DAW
06/07
Usodeherramientasdediseodepginaswebdirectamente
Actualizacionesdelaspectogrficonoprovocanelrearranquedel
servidor
RaquelCEDAZOLEN
rcedazo@fi.upm.es
23
J2EE
JSPs.Sintaxis(2/7)
DAW
06/07
Variablesimplcitas:
request(HttpServletRequest)
response(HttpServletResponse)
out(PrintWriter)
session(HttpSession)
application(ServletContext)
config(ServletConfig)
pageContext(PageContext)
page(this)
RaquelCEDAZOLEN
rcedazo@fi.upm.es
24
J2EE
JSPs.Sintaxis(3/7)
Archivocompuestopor:
Contenidocliente(HTML,XMLyJavascript)
Comentario<%comentario%>
Scriptlet:cdigoservidorJava,escritoentre<%codigoJava%>
Expresin:insertavaloresJavadirectamenteenlasalida
<%=expresinJava%>
Declaracin:definemtodosocamposquesoninsertados
dentrodelaclaseServlet<%!codigoJava%>
Directiva:dostiposprincipalespageeinclude
<%@directivaatributo=valor%>
<%@pageimport=clase%><%@includefile=fichero%>
DAW
06/07
Tag:instruccinenformatoXMLasociadaaclasesJava
RaquelCEDAZOLEN
rcedazo@fi.upm.es
25
J2EE
JSPs.Sintaxis(4/7)
DAW
06/07
Acciones:construccionesXMLquecontrolanelcomportamiento
delmotordeServlets
<jsp:attributename=nombre>
<jsp:body>
<jsp:elementname=nombre>
<jsp:includepage=url>
<jsp:forwardpage=url>
<jsp:paramname=nombrevalue=valor>
<jsp:text>
<jsp:useBeanid=nombreclass=clase/>
<jsp:setPropertyname=idBeanproperty=propvalue=valor>
<jsp:getPropertyname=idBeanproperty=prop>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
26
J2EE
JSP.Ejemplo:JSPTEST(5/7)
EJEMPLO
JSPquegeneraunHTMLutilizando:
Fichero:
DAW
06/07
Expresin:devuelveelnombredelequipo
Scriptlet:obtienelosdatosenviadosporelmtodoGET
Declaracin:variablequemideelnmerodeaccesosaesapgina
web
Directivapage:importalaclasejava.util.*
Directivainclude:incluyeelficherofoot.html
jspTest.jsp
RaquelCEDAZOLEN
rcedazo@fi.upm.es
27
J2EE
JSPs.Ejemplo:JSPTEST(6/7)
jspTest.jsp
<!DOCTYPEHTMLPUBLIC"//W3C//DTDHTML4.01Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
DAW
06/07
<head>
<title>EjemploJSP</title>
<metaname="GENERATOR"content="QuantaPlus">
<metahttpequiv="ContentType"content="text/html;charset=iso88591">
</head>
<body>
<ul>
<li><b>Expresión:</b><br/>
Tuequipo:<%=request.getRemoteHost()%>.
</li>
<li><b>Scriptlet:</b><br/>
<%Stringpeticion=request.getQueryString();
if(peticion!=null)
out.println("DatosGET:"+peticion);
else
out.println("NohaydatosGET");
%>
</li>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
28
J2EE
JSPs.Ejemplo:JSPTEST(7/7)
<li><b>Declaración:</b><br/>
<%!privateintaccessCount=0;%>
Nºdeaccesosalapáginadesdequearrancóel
servidor:<%=++accessCount%>
</li>
<li><b>Directiva"page":</b><br/>
<%@pageimport="java.util.*"%>
Fechaactual:<%=newDate()%>
</li>
<li><b>Directiva"include"fichero:</b><br/>
<%@includefile="foot.html"%>
</li>
</ul>
</body>
</html>
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
29
J2EE
CombinacindeServletsyJSPs.Ejemplo:HolaMundoServletJSP(1/3)
EJEMPLO
ImprimelacadenaHolaMundodesdeunJSPenunapginaweb
Ficheros:
HolaMundoServletJSP.java
holaMundo.jsp
header.jsp
footer.jsp
web.xml
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
30
J2EE
CombinacindeServletsyJSPs.Ejemplo:HolaMundoServletJSP(2/3)
HolaMundoServletJSP.java
packageservlets;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.*;
publicclassHolaMundoServletJSPextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponse
response)
throwsServletException,IOException{
Stringmessage="HolaMundodesdeunJSP";
request.setAttribute("message",message);
request.getRequestDispatcher("holaMundo.jsp").forward(request,
response);
}
}
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
31
J2EE
CombinacindeServletsyJSPs.Ejemplo:HolaMundoServletJSP(3/3)
holaMundo.jsp
<jsp:includepage="/WEBINF/jspf/header.jsp">
<jsp:paramname="title"value="Holamundo"/>
</jsp:include>
<strong><%=request.getAttribute("message")%></strong>
<jsp:includepage="/WEBINF/jspf/footer.jsp"/>
header.jsp
<html>
<head>
<title><%=request.getParameter("title")%></title>
</head>
<body>
footer.jsp
DAW
06/07
</body>
</html>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
32
J2EE
TagLib.Introduccin(1/7)
Sonlibrerasdeetiquetasquepermitencrearetiquetas
personalizadasparaincluirenlosJSPs
PermitenminimizarcdigoJavaenJSPs
JSTL(JavaStandardTemplateLibrary):Bibliotecaqueimplementa
funcionesdeusofrecuenteenaplicacionesJSP.Incluye:
DAW
06/07
Funcionescomunesdeiteracinsobredatos,operaciones
condicionales,eimportacindeotraspginas
Internacionalizacinyformateodetexto
Funcionesdemanipulacindecadenas
ProcesamientodeXML
Accesoabasesdedatos(NORECOMENDADO)
Unlenguajedeexpresinparareferenciarobjetosysuspropiedades
sinnecesidaddecdigoJava
RaquelCEDAZOLEN
rcedazo@fi.upm.es
33
J2EE
TagLib.Ejemplo:MostrarEmailyPonerMayusculas(2/7)
EJEMPLO
Servletquerecogelosdatosdeunusuariointroducidosenun
formularioyredirigeaunJSPqueutilizatresTagLibs:
Ficheros:
DAW
06/07
muestraEmail:sustituyeelcarcter@deunemailporlacadenaat
ponMayusculas:poneenmaysculaselatributodeunusuario
horaSistema:imprimelahoradelsistema
index.html
ProcesarUsuario.java
respuestaUsuario.jsp
MostrarEmail.java
daw.tld
web.xml
RaquelCEDAZOLEN
rcedazo@fi.upm.es
34
J2EE
TagLib.Ejemplo:MostrarEmailyPonerMayusculas(3/7)
ProcesarUsuario.java
packageservlets;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.*;
importbeans.Usuario;
publicclassProcesarUsuarioextendsHttpServlet{
DAW
06/07
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponse
response)
throwsServletException,IOException{
Usuariousuario=newUsuario();
usuario.setEmail(request.getParameter("email"));
usuario.setNombre(request.getParameter("nombre"));
usuario.setApellidos(request.getParameter("apellidos"));
request.setAttribute("usuario",usuario);
request.getRequestDispatcher("respuestaUsuario.jsp").
forward(request,response);
}
}
RaquelCEDAZOLEN
rcedazo@fi.upm.es
35
J2EE
TagLibs.Ejemplo:MostrarEmailyPonerMayusculas(4/7)
respuestaUsuario.jsp
<%@taglibprefix="daw"uri="daw"%>
<%@pageimport="beans.Usuario"%>
DAW
06/07
<html>
<head><title>Ejemplodeusodebeans</title></head>
<body>
<jsp:useBeanid="usuario"class="beans.Usuario"
scope="request"></jsp:useBean>
Haintroducidolossiguientesdatos:
<br>
Email:
<strong><daw:muestraEmailvalor="<%=usuario.getEmail()%>"/></strong>
<br>
Nombre:
<strong><daw:ponMayusculasnombre="usuario"propiedad="nombre"/></strong>
<br>
Apellidos:
<strong><daw:ponMayusculasnombre="usuario"
propiedad="apellidos"/></strong>
<br>
Horadelsistema:<strong><daw:horaSistema/></strong>
</body>
</html>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
36
J2EE
TagLibs.Ejemplo:MostrarEmailyPonerMayusculas(5/7)
MostrarEmail.java
packagetaglibs;
importjava.io.IOException;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.TagSupport;
publicclassMostrarEmailextendsTagSupport{
privateStringvalor;
DAW
06/07
publicintdoStartTag()throwsJspException{
try{
pageContext.getOut().println(valor.replace("@","at"));
}catch(IOExceptione){
e.printStackTrace();
}
returnSKIP_BODY;
}
publicvoidsetValor(Stringvalor){
this.valor=valor;
}
}
RaquelCEDAZOLEN
rcedazo@fi.upm.es
37
J2EE
TagLibs.Ejemplo:MostrarEmailyPonerMayusculas(6/7)
daw.tld
DAW
06/07
<?xmlversion="1.0"encoding="ISO88591"?>
<!DOCTYPEtaglibPUBLIC"//SunMicrosystems,Inc.//DTDJSPTagLibrary
1.1//EN"
"http://java.sun.com/j2ee/dtds/webjsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>daw</shortname>
<uri>/WEBINF/tlds/daw.tld</uri>
<info>MyfirstTaglibrary</info>
<tag>
<name>muestraEmail</name>
<tagclass>taglibs.MostrarEmail</tagclass>
<info>Muestraelemailsustituyendo@porat</info>
<attribute>
<name>valor</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
38
J2EE
TagLibs.Ejemplo:MostrarEmailyPonerMayusculas(7/7)
web.xml
<taglib>
<tagliburi>daw</tagliburi>
<tagliblocation>/WEBINF/daw.tld</tagliblocation>
</taglib>
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
39
J2EE
JDBC.Introduccin(1/8)
APIquepermitehacerconsultasaunabasededatosrelacional
EsunaESPECIFICACIN,losdriverslosproporcionanlos
diferentesfabricantesdebasesdedatos
UndriveresunJAR(JavaArchive)conlaimplementacindelos
interfacesdelAPIdeJDBC
LoidealesquesisecambiadeBBDD,nosenecesitecambiarel
cdigo.
DAW
06/07
Inconveniente:SeusadiferentesintaxisSQL
Existenpatronespararesolveresteproblema
RaquelCEDAZOLEN
rcedazo@fi.upm.es
40
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(2/8)
EJEMPLO
Obtienelosdatosdelosusuariosquehayenlatablausuariosde
labasededatosdaw0607yseimprimenenunJSP.
Ficheros:
DatabaseManager.java
UsuarioDAO.java
MostrarUsuariosJDBC.java
listarUsuarios.jsp
ConectorMySQL:
DAW
06/07
mysqlconnectorjava5.0.4bin.jar
RaquelCEDAZOLEN
rcedazo@fi.upm.es
41
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(3/8)
DatabaseManager.java
packagedb;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassDatabaseManager{
privatestaticStringCONEXION="jdbc:mysql://localhost/daw0607";
privatestaticStringUSER="rcedazo";
privatestaticStringPASSWORD="mypassword";
privatestaticDatabaseManagerinstance;
DAW
06/07
privateDatabaseManager(){
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(java.lang.ClassNotFoundExceptione1){
System.err.println(e1.getMessage());
}
}
RaquelCEDAZOLEN
rcedazo@fi.upm.es
42
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(4/8)
publicstaticDatabaseManagergetInstance(){
if(instance==null){
instance=newDatabaseManager();
}
returninstance;
}
publicConnectiongetConnection()throwsSQLException{
returnDriverManager.getConnection(CONEXION,USER,PASSWORD);
}
}
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
43
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(5/8)
UsuarioDAO.java
packagedao;
importjava.sql.*;
importjava.util.*;
importbeans.Usuario;
importdb.DatabaseManager;
publicclassUsuarioDAO{
publicUsuarioDAO(){
}
DAW
06/07
publicCollectiongetUsuarios(){
Statementst=null;
ResultSetrs=null;
Connectionconnection=null;
try{
connection=DatabaseManager.getInstance().getConnection();
st=connection.createStatement();
rs=st.executeQuery("SELECT*FROMusuarios");
Collectionresultado=newArrayList();
Usuariousuario;
RaquelCEDAZOLEN
rcedazo@fi.upm.es
44
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(6/8)
DAW
06/07
while(rs.next()){
usuario=newUsuario();
usuario.setEmail(rs.getString("EMAIL"));
usuario.setNombre(rs.getString("NOMBRE"));
usuario.setApellidos(rs.getString("APELLIDOS"));
resultado.add(usuario);
}
returnresultado;
}catch(SQLExceptione){
System.err.println(e.getMessage());
returnnull;
}finally{
try{
if(rs!=null)
rs.close();
if(st!=null)
st.close();
if(connection!=null)
connection.close();
}catch(Exceptione){
}
}
}
}
RaquelCEDAZOLEN
rcedazo@fi.upm.es
45
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(7/8)
MostrarUsuariosJDBC.java
publicclassMostrarUsuariosJDBCextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponse
response)
throwsServletException,IOException{
Collectionusuarios=newUsuarioDAO().getUsuarios();
request.setAttribute("usuarios",usuarios);
request.getRequestDispatcher("listarUsuarios.jsp").forward(request,
response);
}
}
listarUsuarios.jsp
<%@pageimport="java.util.*"%>
<%@pageimport="beans.Usuario"%>
DAW
06/07
<html>
<head>
<title>Ejemplodeusodebeans</title>
</head>
<body>
<tableborder="1"cellpadding="5"cellspacing="0">
RaquelCEDAZOLEN
rcedazo@fi.upm.es
46
J2EE
JDBC.EjemploMostrarusuariosdeunaBBDD(8/8)
DAW
06/07
<thead>
<th>Email</td>
<th>Nombre</td>
<th>Apellidos</td>
</thead>
<tbody>
<%
Collectionusuarios=(Collection)request.getAttribute("usuarios");
Iteratorit=usuarios.iterator();
while(it.hasNext()){
Usuariousuario=(Usuario)it.next();
%>
<tr>
<td><%=usuario.getEmail()%></td>
<td><%=usuario.getNombre()%></td>
<td><%=usuario.getApellidos()%></td>
</tr>
<%
}
%>
</tbody>
</table>
</body>
</html>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
47
J2EE
ANT.Introduccin(1/4)
ProyectodeApache:http://ant.apache.org
Herramientausadaparalarealizacindetareasautomticasy
repetitivas(compilacin,construccin)
DeltipoMake,perosindependenciasdelsistemaoperativo
EscritaenJAVA
Muyportable:utilizaficherosXML
DAW
06/07
Cadaficherocontieneunproyecto
Cadaproyectocontieneunoomstargets(tareasqueseejecutan
secuencialmente)
Sepuedenestablecerdependenciasentretargets
Sepuedendefinirpropiedades
RaquelCEDAZOLEN
rcedazo@fi.upm.es
48
J2EE
ANT.Ejemplo:build.xml(2/4)
EJEMPLO
Archivobuild.xmlparagenerarautomticamenteelWAR(Web
Archive)delaaplicacindeejemplosdeJ2EE
Tareas:
clean
compile
generateWar
DAW
06/07
RaquelCEDAZOLEN
rcedazo@fi.upm.es
49
J2EE
ANT.Ejemplo:build.xml(3/4)
build.xml
<?xmlversion="1.0"?>
<projectname="DAW0607"default="generateWar"basedir="..">
<description>
GeneracinautomticadelWAR
</description>
<propertyname="srcDir"value="${basedir}/src"/>
<propertyname="libDir"value="${basedir}/lib"/>
<propertyname="buildDir"value="${basedir}/build"/>
<propertyname="webDir"value="${basedir}/web"/>
<propertyname="warFile"value="${buildDir}/DAW0607.war"/>
<propertyname="binDir"value="${buildDir}/bin"/>
DAW
06/07
<pathid="compileLibs">
<filesetdir="${libDir}">
<includename="**/*.jar"/>
</fileset>
</path>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
50
J2EE
ANT.Ejemplo:build.xml(4/4)
<targetname="clean">
<deletedir="${binDir}"includeemptydirs="true"/>
<deletefile="${warFile}"/>
</target>
<targetname="compile"depends="clean">
<mkdirdir="${binDir}"/>
<javacsrcdir="${srcDir}"destdir="${binDir}"
classpathref="compileLibs">
</javac>
</target>
DAW
06/07
<targetname="generateWar"depends="compile">
<wardestfile="${warFile}"webxml="${webDir}/WEBINF/web.xml"
basedir="${webDir}">
<excludename="WEBINF/web.xml"/>
<excludename="WEBINF/classes/"/>
<excludename="WEBINF/lib/"/>
<classesdir="${binDir}"></classes>
<libdir="${webDir}/WEBINF/lib"></lib>
</war>
</target>
</project>
RaquelCEDAZOLEN
rcedazo@fi.upm.es
51
J2EE
EasyEclipse
DAW
06/07
DistribucionesdeEclipseconlafuncionalidadnecesariaparatener
unentornodedesarrolloespecfico,sinnecesidaddedescargar
softwareadicional(plugins,libreras...)
EasyEclipseServerJava:aplicacionesJavadelladodelservidor,
talescomoJSPs,EJBsyWebServices.
EasyEclipseMobileJava:aplicacionesJavaparadispositivoscon
J2ME.
EasyEclipseforPHP:desarrollarPHPconunabasededatos.
EasyEclipseDesktopJava:paradesarrollarinterfacesgrficas
conSwingoSWT.
Ymsen:http://www.easyeclipse.org
RaquelCEDAZOLEN
rcedazo@fi.upm.es
52
J2EE
Referencias
TutorialesJavaEE:
http://java.sun.com/javaee/reference/tutorials
Eclipseplugins:
http://eclipseplugins.2y.net/
ANTApache:
http://ant.apache.org[Manual:http://ant.apache.org/manual/]
EasyEclipse:
http://www.easyeclipse.org
TheEssentialsofFilters:
http://java.sun.com/products/servlet/Filters.html
DAW
06/07
ManualdeJTSL:
http://www.1x4x9.info/files/jstl/html/onlinechunked/
RaquelCEDAZOLEN
rcedazo@fi.upm.es
53
J2EE
Java2EnterpriseEdition
Servlets
Java
JSPs
JSP
DAW
06/07
JDBC
54