Programación de Servlets Introducción a los …...función de determinados parámetros de entrada...

28
Programación de Servlets Copyright © 2004-2005 Universidad de Alicante Introducción a los servlets-1 Programación de Servlets Sesión 1: Introducción a los servlets Ejemplos básicos Especialista en Aplicaciones y Servicios Web con Java Enterprise

Transcript of Programación de Servlets Introducción a los …...función de determinados parámetros de entrada...

Page 1: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 2: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 3: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 4: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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.

Page 5: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 6: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 7: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 8: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 9: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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);

...}

Page 10: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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(...)

Page 11: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 12: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 13: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 14: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 15: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 16: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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>

Page 17: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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”);

Page 18: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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>

Page 19: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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>

Page 20: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 21: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 22: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 23: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 24: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 25: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 26: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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

Page 27: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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>

Page 28: Programación de Servlets Introducción a los …...función de determinados parámetros de entrada Más sencillo que un CGI, más eficiente (se arranca un hilo por petición, y no

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!");...