Download Java Servlets - Universidad Complutense de Madrid

Document related concepts
no text concepts found
Transcript
Java Servlets
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y Computación
Universidad Complutense de Madrid
17 de abril de 2013
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
¿Qué es un programa?
input
Luis Fernando Llana Dı́az
Java Servlets
Programa
output
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
¿Qué es un programa?
input
Programa
output
En pascal:
program helloWorld ( input , output );
var
name : String ;
begin
readLn ( name );
writeLn ( ’ Hello ’ , name );
end .
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Un servlet
input −→ HttpServletRequest.
output −→ HttpServletResponse (X)HTML, XML,
PDF,....
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Un servlet
input −→ HttpServletRequest.
output −→ HttpServletResponse (X)HTML, XML,
PDF,....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
23
public class HelloWorld extends HttpServlet {
/* *
* D e scribe < code > doGet </ code > method here .
*
* @param h t t p S e r v l e t R e q u e s t a < code > H t t p S e r v l e t R e q u e s t </ code > value
* @param h t t p S e r v l e t R e s p o n s e a < code > H t t p S e r v l e t R e s p o n s e </ code > value
* @ e x c e p t i o n S e r v l e t E x c e p t i o n if an error occurs
* @ e x c e p t i o n I O E x c e p t i o n if an error occurs
*/
public final void doGet ( final H tt p Se r vl et R eq u es t request ,
final H t t p S er v l e t R e s p on s e response )
throws ServletException , IOException {
PrintWriter out = response . getWriter ();
String nombre = request . getParameter ( " name " );
response . setContentType ( " text / html ; charset = UTF -8 " );
if ( nombre == null ) {
out . println ( " <p > Hello World </ p > " );
} else {
out . println ( " <p > Hello " + nombre + " </p > " );
}
Luis Fernando Llana Dı́az
}
Java Servlets
Servidor de aplicaciones: Tomcat
Los severlet son controlados por servidor de aplicaciones.
Tomcat: http://jakarta.apache.org/tomcat/index.html
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Servidor de aplicaciones: Tomcat
Los severlet son controlados por servidor de aplicaciones.
Tomcat: http://jakarta.apache.org/tomcat/index.html
Cuando una petición llega
1 Si el objeto de la clase no ha sido creado
Carga la clase
Crea el objeto
3 Invoca el método init.
1
2
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Servidor de aplicaciones: Tomcat
Los severlet son controlados por servidor de aplicaciones.
Tomcat: http://jakarta.apache.org/tomcat/index.html
Cuando una petición llega
1 Si el objeto de la clase no ha sido creado
Carga la clase
Crea el objeto
3 Invoca el método init.
1
2
2
Llama al método service.
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Servidor de aplicaciones: Tomcat
Los severlet son controlados por servidor de aplicaciones.
Tomcat: http://jakarta.apache.org/tomcat/index.html
Cuando una petición llega
1 Si el objeto de la clase no ha sido creado
Carga la clase
Crea el objeto
3 Invoca el método init.
1
2
2
Llama al método service.
Si debe eliminar al servlet llama al método destroy.
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Interfaz javax.servlet.Servlet
void destroy()
void init(ServletConfig config)
void service(ServletRequest req, ServletResponse res)
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Interfaz javax.servlet.Servlet
void destroy()
void init(ServletConfig config)
void service(ServletRequest req, ServletResponse res)
Clase javax.servlet.http.HttpServlet
void doGet(HttpServletRequest req, HttpServletResponse resp)
void doPost(HttpServletRequest req, HttpServletResponse resp)
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Servlet contador I
public class Count extends HttpServlet {
private int count ;
/*
Metodos para guardar el contador antes de
f i n a l i z a r y leerlo al empezar . . . . . . . . . . . .
*/
private synchronized int inc () {
count ++;
return count ;
}
public final void doGet ( final H tt p Se r vl et R eq u es t request ,
final H t t p S er v l e t R e s p on s e response )
throws ServletException , IOException {
int n = inc ();
PrintWriter out = response . getWriter ();
response . setContentType ( " text / html " );
out . println ( String . format ( " <p > Number of access : %d </ p > " ,n ));
}
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Servlet contador II
private ServletConfig config ;
private final static String strFile = " file " ;
public final void init ( final ServletConfig _config )
throws ServletException {
config = _config ;
ServletContext ctx = config . ge tSe rvle tCo nte xt ();
String file = config . getInitParameter ( strFile );
try {
BufferedReader f
= new BufferedReader (
new FileReader ( ctx . getRealPath ( file )));
count = Integer . parseInt ( f . readLine ());
f . close ();
} catch ( F i l e N o t F o u n d E x c e p t i o n e ) {
count = 0;
} catch ( IOException e ) {
count = 0;
}
}
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Servlet contador III
public final void destroy () {
ServletContext ctx = config . ge tSe rvle tCo nte xt ();
String file = config . getInitParameter ( strFile );
try {
FileWriter f = new FileWriter ( ctx . getRealPath ( file ));
f . write ( String . format ( " %d " , count ));
f . close ();
} catch ( IOException e ) {
throw new RuntimeException ( e );
}
}
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Despliegue de la hello I
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Despliegue de la hello II
Fichero web.xml
<? xml version = " 1.0 " encoding = " utf -8 " ? >
<web - app >
< display - name > Servlets de prueba </ display - name >
< servlet >
< servlet - name > hola </ servlet - name >
< servlet - class > HolaMundo </ servlet - class >
</ servlet >
< servlet >
< servlet - name > contador </ servlet - name >
< servlet - class > Contador </ servlet - class >
< init - param >
< param - name > fichero </ param - name >
< param - value > contador . txt </ param - value >
</ init - param >
</ servlet >
</ web - app >
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Ámbitos
Context Scope. (ServletContext)
Session Scope. (HttpSession)
Request Scope. (HttpServletRequest)
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Sesiones
Memoria entre diferentes invocaciones a servlets.
1
2
3
4
HttpSession session = request . getSession ();
5
String name =( String ) session . getAttribute ( Login . strName );
6
Integer numAccess = ( Integer ) session . getAttribute ( strNumAccess );
7
if ( numAccess == null ) {
8
numAccess = new Integer (0);
9
}
10
session . setAttribute ( strNumAccess , new Integer ( numAccess . intValue ()+1));
11
String rmSesion = request . getParameter ( strRemoveSession );
12
13
R e que stDi spa tch er rd = request . g e t R e q u e s t D i s p a t c h e r ( greetings );
14
rd . include ( request , response );
15
16
if ( rmSesion != null ) {
17
rd = request . g e t R e q u e s t D i s p a t c h e r ( sessionRemoved );
18
rd . include ( request , response );
19
session . removeAttribute ( strNumAccess );
20
session . removeAttribute ( Login . strName );
21
} else {
22
rd = request . g e t R e q u e s t D i s p a t c h e r ( formContinue );
23
rd . include ( request , response );
24
}
25
}
26
}
27
Luis Fernando
Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
public final void doGet ( final H tt p Se r vl et R eq u es t request ,
final H t t p S er v l e t R e s p on s e response )
throws ServletException , IOException {
Java Servlets
Sesiones
Reescritura de URL
Cookies
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Sesiones
Toda URL debe ser codificada. Funciona tanto si tiene como si no
tiene las cookies habilitadas.
< %@ page import = " hello . Login " %>
< form type = " get " action = " < %= response . encodeURL ( request . getRequestURI ()) % > " >
< label > Name </ label > < input name = " < %= Login . strName %>" / >
< button > Login </ button >
</ form >
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Clases Importantes I
Clase javax.servlet.http.HttpServlet
void init(ServletConfig config)
void destroy()
void doGet(HttpServletRequest req, HttpServletResponse resp)
void doPost(HttpServletRequest req, HttpServletResponse resp)
ServletConfig getServletConfig()
ServletContext getServletContext()
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Clases Importantes II
Interfaz javax.servlet.http.HttpServletRequest
HttpSession getSession()
String getParameter(String name)
Enumeration getParameterNames()
Object getAttribute(String name)
void setAttribute(String name, Object o)
Locale getLocale()
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Clases Importantes III
Interfaz javax.servlet.http.HttpServletResponse
void setContentType(String type).
response.setContentType("text/html;charset=UTF-8");
response.setContentType("application/pdf");
response.setContentType("application/xml");
String encodeURL(String url);
void setHeader(String name, String value)
ServletOutputStream getOutputStream()
PrintWriter getWriter()
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Clases Importantes IV
Interfaz javax.servlet.http.HttpSession
Object getAttribute(String name)
Enumeration getAttributeNames()
void setAttribute(String name, Object value)
void invalidate()
void removeAttribute(String name)
void setMaxInactiveInterval(int interval)
Luis Fernando Llana Dı́az
Java Servlets
(en segundos)
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Clases Importantes V
Interfaz javax.servlet.ServletConfig
String getInitParameter(String name)
ServletContext getServletContext()
Interfaz javax.servlet.http.RequestDispatcher
void forward(ServletRequest request, ServletResponse response)
void include(ServletRequest request, ServletResponse response)
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Clases Importantes VI
Interfaz javax.servlet.ServletContext
String Object getAttribute(String name)
void setAttribute(String name, Object object)
String getRealPath(String path)
InputStream getResourceAsStream(String path)
RequestDispatcher getRequestDispatcher(String path)
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Atributos
Se pueden guardar atributos
public
public
public
public
void setAttribute ( String name , Object o );
void removeAttribute ( String name );
Object getAttribute ( String name );
Enumeration ge tAtt rib ute Nam es ();
1
2
3
4
ServletRequest Atributos que sólo viven en una petición.
HttpSession Atributos que viven mientras dure la sesión.
ServletContext Atributos comunes para todos los servlets.
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Invocando otros servlets, jsp, html,.....
public class ShowDate extends HttpServlet {
public static final String s trFu llD ate For mat = " fullDateFormat " ;
public final void doGet ( final H tt p Se r vl et R eq u es t request ,
final H t t p S er v l e t R e s p on s e response )
throws ServletException , IOException {
PrintWriter out = response . getWriter ();
response . setContentType ( " text / plain " );
Date today = new Date ();
Boolean isFullFormat = ( Boolean ) request . getAttribute ( st rFu llD ateF orm at );
DateFormat df = DateFormat . getDateInstance ( DateFormat . SHORT );
if ( isFullFormat != null && isFullFormat . booleanValue ()) {
df = DateFormat . getDateInstance ( DateFormat . FULL );
}
out . println ( df . format ( today ));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< servlet >
< servlet - name > date </ servlet - name >
< servlet - class > hello . ShowDate </ servlet - class >
</ servlet >
. . . . . . . . . . . . . . . .. . .
< servlet - mapping >
< servlet - name > date </ servlet - name >
<url - pattern >/ txt / date </ url - pattern >
</ servlet - mapping >
1
2
3
4
5
6
7
8
9
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Incluir el resultado del servlet txt/date en cualquier parte
......
request . setAttribute ( ShowDate . strFullDateFormat , new Boolean ( true ));
rd = request . g e t R e q u e s t D i s p a t c h e r ( " / txt / date " );
rd . include ( request , response );
......
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
Filtro 1
Luis Fernando Llana Dı́az
Java Servlets
Filtro 2
Filtro 3
Servlet
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
Filtro 1
Luis Fernando Llana Dı́az
Java Servlets
Filtro 2
Filtro 3
Servlet
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
Filtro 1
Luis Fernando Llana Dı́az
Java Servlets
Filtro 2
Filtro 3
Servlet
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
Filtro 1
Luis Fernando Llana Dı́az
Java Servlets
request
Filtro 2
Filtro 3
Servlet
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
request
Filtro 1
Luis Fernando Llana Dı́az
Java Servlets
request
Filtro 2
Filtro 3
Servlet
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
request
Filtro 1
request
Filtro 2
Filtro 3
Servlet
response
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
request
Filtro 1
request
Filtro 2
Filtro 3
Servlet
response
response
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
request
Filtro 1
request
Filtro 2
response
Filtro 3
Servlet
response
response
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
request
Filtro 1
response
Luis Fernando Llana Dı́az
Java Servlets
request
Filtro 2
response
Filtro 3
Servlet
response
response
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Filtros
Transformar la salida del servlet
request
request
request
Filtro 1
response
request
Filtro 2
response
Filtro 3
Servlet
response
response
Aplicaciones:
autentificación,
cifrado,
transformaciones XML,
lo que se quiera....
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
public class HTMLWrapper implements Filter {
private static final String head = " / jsp / head . jsp " ;
private static final String foot = " / jsp / foot . jsp " ;
private static final String strTitle = " title " ;
FilterConfig conf ;
public void init ( FilterConfig filterConfig ) throws ServletException {
conf = filterConfig ;
}
public void destroy () {
conf = null ;
}
public void doFilter ( ServletRequest request ,
ServletResponse response ,
FilterChain filterChain )
throws IOException , ServletException {
response . setContentType ( " text / html ; charset = UTF -8 " );
R e que stDi spa tch er rd = request . g e t R e q u e s t D i s p a t c h e r ( head );
String title = conf . getInitParameter ( strTitle );
request . setAttribute ( strTitle , title );
rd . include ( request , response );
filterChain . doFilter ( request , response );
rd = request . g e t R e q u e s t D i s p a t c h e r ( foot ) ;
rd . include ( request , response );
}
}
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
jsp/head.jsp
<! DOCTYPE html >
< html >
< head >
< meta charset = " utf -8 " / >
< title >$ { requestScope [ " title " ]} </ title >
</ head >
< body >
1
2
3
4
5
6
7
jsp/foot.jsp
< hr >
< address >
<a href = " mailto : lu is@ ram onv azq uez . net " >
Luis Fernando Llana Diaz
</ a >
</ address >
</ body >
</ html >
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
..... parametros globales de la aplicacion
< filter >
< filter - name > wrapperHello </ filter - name >
< filter - class > hello . HTMLWrapper </ filter - class >
< init - param >
< param - name > title </ param - name >
< param - value > Hello example </ param - value >
</ init - param >
</ filter >
< filter >
< filter - name > wrapper </ filter - name >
< filter - class > hello . HTMLWrapper </ filter - class >
< init - param >
< param - name > title </ param - name >
< param - value > Examples </ param - value >
</ init - param >
</ filter >
< filter - mapping >
< filter - name > wrapperHello </ filter - name >
<url - pattern >/ html / hello </ url - pattern >
</ filter - mapping >
< filter - mapping >
< filter - name > wrapper </ filter - name >
<url - pattern >/ html - g /* </ url - pattern >
</ filter - mapping >
definicion de servlets .....
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
public class Login implements Filter {
public static final String strName = " name " ;
private static final String loginForm = " / jsp / login . jsp " ;
private FilterConfig config ;
public void init ( FilterConfig filterConfig ) throws ServletException {
config = filterConfig ;
}
public void destroy () { }
public final void doFilter ( final ServletRequest request ,
final ServletResponse response ,
final FilterChain filterChain )
throws IOException , ServletException {
HttpSession session = (( H t tp Se r vl et R eq u es t ) request ). getSession ();
String name =( String ) session . getAttribute ( strName );
if ( name == null ) {
name = request . getParameter ( strName );
if ( name == null ) {
Re que stD ispa tch er rd = request . g e t R e q u e s t D i s p a t c h e r ( loginForm );
rd . include ( request , response );
} else {
session . setAttribute ( strName , name );
filterChain . doFilter ( request , response );
}
} else {
filterChain . doFilter ( request , response );
}
}
}
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
El servlet /http/sesion I
..... otros filtros
< filter >
< filter - name > wrapper </ filter - name >
< filter - class > hello . HTMLWrapper </ filter - class >
< init - param >
< param - name > title </ param - name >
< param - value > Examples </ param - value >
</ init - param >
</ filter >
< filter >
< filter - name > login </ filter - name >
< filter - class > hello . Login </ filter - class >
</ filter >
... otros filtros
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
El servlet /http/sesion II
..... otras disposiciones de filtros
<! -- el orden es i m p o r t a n t e -- >
< filter - mapping >
< filter - name > wrapper </ filter - name >
<url - pattern >/ html - g /* </ url - pattern >
</ filter - mapping >
< filter - mapping >
< filter - name > login </ filter - name >
<url - pattern >/ html - g / session </ url - pattern >
</ filter - mapping >
... otras disposiciones de filtros
..... otros servlets
< servlet >
< servlet - name > sesion </ servlet - name >
< servlet - class > Sesion </ servlet - class >
</ servlet >
< servlet >
< servlet - name > fecha </ servlet - name >
< servlet - class > Fecha </ servlet - class >
</ servlet >
... otros servlets
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
El servlet /http/sesion III
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Acceso a base de datos I
public final void doGet ( H t t p S e r v l e t R e q u e s t request ,
H t t p S e r v l e t R e s p o n s e response )
throws ServletException , IOException {
PrintWriter out = response . getWriter ();
Logger logger = resources . getLogger ();
logger . trace ( " paso por ı́aqu " );
try {
Connection con = Resources . g e t C o n e x i o n V a l o r e s ();
P r e p a r e d S t a t e m e n t psmt = con . p r e p a r e S t a t e m e n t ( " select * from valores " );
StringBuffer lista = new StringBuffer ();
ResultSet rs = psmt . executeQuery ();
while ( rs . next ()) {
logger . trace ( " Accediendo al ResultSet " );
lista . append ( Tags . li ( " " , Tags . a ( rs . getString ( " url " ) , " " , rs . getString ( " nombre " ))));
}
out . print ( Tags . h (1 , " " ," Lista de valores : " ));
out . print ( Tags . ul ( " " , lista . toString ()));
con . close ();
} catch ( SQLException e ) {
throw new S e r v l e tE x c e p t i o n ( e . getMessage () , e );
} catch ( N am in g Ex ce p ti on e ) {
throw new S e r v l e t E xc e p t i o n ( e . getMessage () , e );
}
}
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Acceso a base de datos II
Se construye un pool de conexiones.
public static Connection ge t Co n ex io n Va l or es () throws SQLException , NamingException
1 {
InitialContext ctx = new InitialContext ();
2
DataSource ds = ( DataSource ) ctx . lookup ( " java : comp / env / jdbc / DB - valores " );
3
return ds . getConnection ();
4
}
5
Luis Fernando Llana Dı́az
Java Servlets
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Acceso a base de datos III
Fichero META-INF/context.xml
< Context docBase = " ${ catalina . home }/ webapps / hola " path = " / hola " >
< Resource name = " jdbc / DB - valores " auth = " Container "
type = " javax . sql . DataSource "
maxActive = " 100 " maxIdle = " 30 " maxWait = " 10000 "
username = " luis " password = " diez799 "
driverClassName = " com . mysql . jdbc . Driver "
url = " jdbc:mysql: // localhost:3306 / valores ? autoReconnect = true " / >
</ Context >
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
5
6
7
8
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Depurando el código I
Clase org.apache.log4j.Logger
void trace(Object message)
void debug(Object message)
void info(Object message)
void warn(Object message)
void error(Object message)
void fatal(Object message)
Construir logger
P r o p e r t y C o n f i g u r a t o r . configure ( sctx . getResource ( " log4j . properties " ));
logger = Logger . getLogger ( " hello " );
Luis Fernando Llana Dı́az
Java Servlets
1
2
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Depurando el código II
Fichero log4j.properties
log4j . logger . hello = TRACE , J
log4j . appender . J = org . apache . log4j . R o l l i n g F i l e A p p e n d e r
log4j . appender . J . File = $ { catalina . home }/ logs / hola . log
log4j . appender . J . MaxFileSize =10 MB
log4j . appender . J . Ma xBackupI ndex =10
log4j . appender . J . layout = org . apache . log4j . PatternLayout
log4j . appender . J . layout . C o n v e r s i o n P a t t e r n =[ %d ] %p %C. %M( %L ): %m %n
1
2
3
4
5
6
7
Fichero $TOMCAT/logs/hola.log
[2013 -04 -16
[2013 -04 -16
[2013 -04 -16
[2013 -04 -16
20:57:20 ,516]
20:57:20 ,659]
20:57:20 ,661]
20:57:20 ,662]
TRACE
TRACE
TRACE
TRACE
hello . Stock . doGet (75):
hello . Stock . doGet (83):
hello . Stock . doGet (83):
hello . Stock . doGet (83):
paso por ı́aqu
Accediendo al ResultSet
Accediendo al ResultSet
Accediendo al ResultSet
1
2
3
4
Es necesario una librerı́a externa
luis@luis - HP3 :~/ docencia / aw12 -13/ examples / hello$ ls -l lib /
total 1212
-rw - rw -r - - 1 luis luis 414957 abr 16 20:32 log4j -1.2. jar
-rw - rw -r - - 1 luis luis 822526 abr 16 20:32 mysql . jar
Luis Fernando Llana Dı́az
Java Servlets
1
2
3
4
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid