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