Programación de Servlets Introducción a los …...función de determinados parámetros de entrada...
Transcript of Programación de Servlets Introducción a los …...función de determinados parámetros de entrada...
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-1
Programación de ServletsSesión 1:
Introducción a los servletsEjemplos básicos
Especialista en Aplicaciones y Servicios Web con Java Enterprise
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-2
Índice
Concepto de servletConfiguración de servlets en aplicaciones WebEjemplos básicos de servletsHerramientas
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-3
Concepto de servletConfiguración de servlets en aplicaciones WebEjemplos básicos de servletsHerramientas
Introducción a los servlets
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-4
Definición de servlet
Un servlet es un programa Java que se ejecuta en un servidor web y construye o sirve páginas web.Permite la construcción dinámica de páginas, en función de determinados parámetros de entradaMás sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no un proceso entero), más potente y más portable.
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-5
Recursos de servlets y JSP
Servlets y JSP son dos conceptos muy interrelacionadosPara trabajar con ellos se necesita:
Un servidor Web con soporte para servlets / JSP (contenedor de servlets y JSP: Tomcat, WebLogic...)Las librerías o clases necesarias (proporcionadas por el servidor)Recomendable también la documentación de la API de servlets / JSP
Son útiles las direcciones:http://java.sun.com/j2eehttp://java.sun.com/products/jsphttp://java.sun.com/products/servlets
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-6
Arquitectura del paquete servlet
En el paquete javax.servlet tenemos toda la infraestructura para trabajar con servletsEl elemento central es la interfaz ServletLa clase GenericServlet es una clase abstracta que la implementa para un servlet genérico independiente del protocoloLa clase HttpServlet en el paquete javax.servlet.httphereda de la anterior para definir un servlet vía web utilizando HTTP
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-7
Arquitectura del paquete servlet
Cuando un servlet recibe una petición de un cliente, se reciben dos objetos:
Un objeto ServletRequest con los datos de la petición (información entrante: parámetros, protocolo, etc)
• Se puede obtener un ServletInputStream para leer los datos como un stream de entrada
• La subclase HttpServletRequest procesa peticiones HTTP
Un objeto ServletResponse donde se colocarán los datos de respuesta del servlet ante la petición
• Se puede obtener un ServletOutputStream o un Writer para escribir esos datos en la salida
• La subclase HttpServletResponse trata respuestas HTTP
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-8
Arquitectura del paquete servlet
Servlet
GenericServlet
HttpServlet
ServletRequest ServletResponse
HttpServletRequest HttpServletResponse
ServletInputStream ServletOutputStream
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-9
Ciclo de vida de un servlet
Todos los servlets tienen el mismo ciclo de vida:El servidor carga e inicializa el servletEl servlet procesa N peticionesEl servidor destruye el servlet
Inicialización: para tareas que se hagan una sola vez al iniciar el servletpublic void init() throws ServletException{ ... }
public void init(ServletConfig conf) throws ServletException{ super.init(conf);
...}
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-10
Ciclo de vida de un servlet
Procesamiento de peticiones: cada petición llama al método service( )
Según el tipo de petición, llama a uno de los métodos (todos con los mismos parámetros y excepciones que service( )):
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
public void doGet(...) public void doPost(...)public void doPut(...)public void doDelete(...)public void doOptions(...)public void doTrace(...)
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-11
Ciclo de vida de un servlet
Destrucción: método destroy( )
Se debe deshacer todo lo construido en init( )Se llama a este método cuando todas las peticiones han concluido, o cuando ha pasado un determinado tiempo (en este caso, se debe controlar por código que se destruya cuando debe)
public void destroy() throws ServletException
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-12
Estructura básica de un servlet
import javax.servlet.*;import javax.servlet.http.*;
public class ClaseServlet extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException {
... // CODIGO PARA UNA PETICION GET}
public void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException {
... // CODIGO PARA UNA PETICION POST}
}
NOTA: esta es la estructura más común de un servlet. Además, se puede incluir cualquiera de los métodos (init(), destroy(), doPut(...), etc, vistos antes
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-13
Concepto de servletConfiguración de servlets en aplicaciones WebEjemplos básicos de servletsHerramientas
Introducción a los servlets
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-14
Llamada directa de servlets
Para utilizar un servlet en una aplicación web, se coloca en el directorio WEB-INF/classes, con su estructura de paquetes y subpaquetesDespués, podemos llamar al servlet directamente con:
O si lo hemos colocado en el root del servidor:
Por ejemplo:
http://host:puerto/<dir-aplicacion>/servlet/<nombre-servlet>
http://host:puerto/servlet/<nombre-servlet>
http://localhost:8080/miapp/servlet/paquete1.subpaquete1.MiServlet
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-15
Mapeado de servlets y JSP
Otra opción es incluir en el fichero descriptor un nombre identificativo del servlet o la página JSP:
Con lo que podremos llamar al servlet o página:
<servlet><servlet-name>nombre</servlet-name><servlet-class>unpaquete.ClaseServlet</servlet-class>
</servlet><servlet>
<servlet-name>nombre2</servlet-name><jsp-file>/mipagina.jsp</servlet-class>
</servlet>
http://host:puerto/<dir>/servlet/unpaquete.ClaseServlethttp://host:puerto/<dir>/servlet/nombrehttp://host:puerto/<dir>/mipagina.jsphttp://host:puerto/<dir>/nombre2
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-16
Asignar URLs a servlets o páginas JSP
Podemos mapear una URL concreta con un nombre de servlet o página JSP (tras <servlet>):
Con lo que podremos llamar al servlet o página:
También podemos usar comodines para mapear un conjunto de direcciones a un servlet o página JSP:
<servlet-mapping><servlet-name>nombre</servlet-name><url-pattern>/ejemploservlet</url-pattern>
</servlet-mapping>
http://host:puerto/ejemploservlet
<servlet-mapping><servlet-name>nombre</servlet-name><url-pattern>/ejemploservlet/*.jsp</url-pattern>
</servlet-mapping>
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-17
Parámetros de inicio en servlets y JSP
Al asignar un nombre a un servlet o página JSP podemos definirle uno o más parámetros de inicio:
Si llamamos al servlet por su nombre o por su servlet-mapping, podemos en su código acceder a estos parámetros con:
<servlet><servlet-name>nombre</servlet-name><servlet-class>ClaseServlet</servlet-class><init-param>
<param-name>param1</param-name><param-value>valor1</param-value>
</init-param></servlet>
String s = getServletConfig().getInitParameter(“param1”);
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-18
Deshabilitar servlets
Podemos deshabilitar la llamada al alias servlet en cada aplicación Web añadiendo en el descriptor:
En algunos servidores (Tomcat, p. ej.) podemos colocar esto en el web.xml global (conf/web.xml) para que sirva para cualquier aplicación. Aunque estos servidores a veces traen su propia forma de deshabilitar el alias servlet.
<servlet><servlet-name>error</servlet-name><servlet-class>ErrorServlet</servlet-class>
</servlet>...<servlet-mapping>
<servlet-name>error</servlet-name><url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-19
Cargar servlets al inicio
Podemos indicar que un servlet se cargue nada más iniciar el servidor Web:
El parámetro numérico es opcional (la etiqueta puede abrirse y cerrarse sin más), e indica el orden en que cargar los servlets al inicio, si hay varios que cargar
<servlet><servlet-name>nombre</servlet-name><servlet-class>ClaseServlet</servlet-class><load-on-startup>2</load-on-startup>
</servlet>
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-20
Concepto de servletConfiguración de servlets en aplicaciones WebEjemplos básicos de servletsHerramientas
Introducción a los servlets
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-21
Ejemplos
Servlet que genera texto plano
Servlet que genera una página HTML
Servlet que toma parámetros de inicio
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-22
Prueba de los ejemplos
Definimos un fichero descriptor web.xml que permite llamar a cada ejemplo de 3 formas distintas:http://localhost:8080/appserv1/servlet/ejemplos.ClaseServlethttp://localhost:8080/appserv1/servlet/ejemplo1_1http://localhost:8080/appserv1/ejemploservlet
http://localhost:8080/appserv1/servlet/ejemplos.ClaseServletHTMLhttp://localhost:8080/appserv1/servlet/ejemplo1_2http://localhost:8080/appserv1/ejemploservletHTML
http://localhost:8080/appserv1/servlet/ejemplos.ClaseServletInithttp://localhost:8080/appserv1/servlet/ejemplo1_3http://localhost:8080/appserv1/ejemploservletInit
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-23
Concepto de servletConfiguración de servlets en aplicaciones WebEjemplos básicos de servletsHerramientas
Introducción a los servlets
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-24
Plugins para desarrollo
Lomboz: entorno auto-integrado para desarrollo J2EE.
http://www.objectlearn.com
Eclipse Colorer: plugin para resaltar y diferenciar la sintaxis de diferentes tipos de ficheros: HTML, JSP, XML... etc.
http://colorer.sourceforge.net
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-25
Log4J en aplicaciones web
Podemos utilizar Log4J en aplicaciones web como en una aplicación normalPara utilizarlo, tenemos varias alternativas:
Definir un fichero de configuración genérico (log4j.properties) dentro de la carpeta WEB-INF/classesde la aplicaciónDefinir un servlet de inicialización que cargue un fichero de configuración para toda la aplicación web
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-26
Fichero de configuración genérico
Colocamos un fichero de propiedades (log4j.properties) dentro de WEB-INF/classes:log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy}-%p-%m%n
log4j.appender.A1.Threshold=INFOlog4j.appender.A1.File=/errores.loglog4j.appender.A1.Append=true
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-27
Servlet de inicialización
Definimos un servlet que cargue el fichero de propiedades con un PropertyConfigurator:public void init(ServletConfig config) throws ServletException {
super.init(config);String prefijo = getServletContext().getRealPath("/");String fichConf = config.getInitParameter("fich-conf");PropertyConfigurator.configure(prefijo+fichConf);
}
Declaramos el servlet en el web.xml, con sus parámetros:<servlet><servlet-name>initlog4j</servlet-name><servlet-class>ejemplos.ServletInitLog4J</servlet-class><init-param><param-name>fich-conf</param-name><param-value>WEB-INF/classes/log4j.properties</param-value></init-param><load-on-startup>1</load-on-startup>
<servlet>
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-28
Generación de mensajes en servlets
Tanto en un caso como en otro, en cada servlet o página JSP donde queramos emitir mensajes, creamos un objeto org.apache.log4j.Logger estático, y llamamos a sus métodos:import javax.servlet.*;import javax.servlet.http.*;import org.apache.log4j.*;
public class ClaseServlet extends HttpServlet {static Logger logger = Logger.getLogger(“ClaseServlet”) ;
public void doGet(...)...{...logger.info("Atendiendo peticion");...logger.warn("Error al obtener parametros!");...