servlets 10 de mayo de 2006. Índice ¿qué es un servlet? ¿cuándo y por qué usar servlets?...

16
Servlets 10 de Mayo de 2006

Upload: angeles-lucero-espinoza

Post on 02-Feb-2016

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Servlets

10 de Mayo de 2006

Page 2: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Índice

• ¿Qué es un Servlet?• ¿Cuándo y por qué usar Servlets?• Servlet vs. CGI• Ventajas de los Servlets frente a los CGI• Estructura básica de un HttpServlet• Servlet simple que genera texto plano• Servlet simple que genera un HTML• Compilación, instalación e invocación• Ejemplo: ServletOpinion• Ciclo de vida de los Servets

Page 3: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

¿Qué es un Servlet?

• Programas en Java que se ejecutan en un servidor HTTP (servidor Web)

• Actúan como capa intermedia entre:– Petición proviniente de un Navegador Web u

otro cliente HTTP– Bases de Datos o Aplicaciones en el servidor

HTTPServidor Web

Servlet

BDexterna

BD

Aplicación

Page 4: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Tareas encomendadas a un Servlet• Leer los datos enviados por un usuario

– Usualmente de formularios en páginas Web– Pueden venir de applets de Java o programas cliente

HTTP.

• Buscar cualquier otra información sobre la petición que venga incluida en esta– Detalles de las capacidades del navegador, cookies,

nombre del host del cliente, etc.

• Generar los resultados– Puede requerir consults a Base de Datos, invocar a otras

aplicaciones, computar directamente la respuesta, etc.

• Dar formato a los resultados en un documento– Incluir la información en una página HTML

• Establecer los parámetros de la respuesta HTTP– Decirle al navegador el tipo de documento que se va a

devolver, establecer las cookies, etc.

• Enviar el documento al cliente

Page 5: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

¿Cuándo y por qué usar Servlets?

• Muchas peticiones desde navegador se satisfacen retornando documentos HTML estáticos, es decir, que están en ficheros

• En ciertos casos, es necesario generar las páginas HTML para cada petición:– Página Web basada en datos enviados por

el cliente• Motores de búsqueda, confirmación de pedidos

– Página Web derivada de datos que cambian con frecuencia• Informe del tiempo o noticias de última hora

– Página Web que usa información de bases de datos corporativas u otras fuentes del la parte del servidor• Comercio electrónico: precios y disponibilidades

Page 6: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Servlet vs. CGI

Servidor Web

Petición al CGI-2Petición al CGI-1

Petición al CGI-1

Proceso Hijo del CGI-1Proceso Hijo del CGI-2Proceso Hijo del CGI-1

Servidor Web basado en CGI

Petición al Servlet-2

Petición al Servlet-1

Petición al Servlet-1

Servidor Web

JVM

Servlet-1

Servlet-2

Thread

Servidor Web basado en Java Servlet

Page 7: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Ventajas de los Servlets frente a CGI• Eficiencia

– CGI corto: el proceso de arranque de cada proceso puede dominar el tiempo de ejecución

– N peticiones simultáneas: el código del CGI se carga en memoria N veces

– Al terminar el proceso, el CGI se cierra: difícil persistencia de datos (conexiones a BD, caché...)

• Conveniencia– Los Servlets tienen una infraestructura muy amplia

para la tratar automáticamente datos de formularios HTML, gestionar sesiones y otras utilidades de alto nivel.

• Potencia– Los Servlets pueden comunicar directamente con el

navegador Web– Pueden mantener datos entre peticiones, simplificando

el seguimiento de sesiones y operaciones de caché– Varios Servlets pueden compartir datos

Page 8: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Ventajas de los Servlets frente a CGI• Portabilidad

– Los Servlets están escritos en Java y siguen una API estándar.

– Pueden funcionar sin ningún cambio en diferentes servidores

• Seguridad– CGI adolecen de vulnerabilidades porque:

• Se ejecutan en el shell del SO• Pueden sufrir overflows por el lenguaje (C, C+

+, ...)– Los Servlets no sufren estos problemas

• Economía– Añadir soporte para Servlet a un servidor Web

ya disponible tiene muy poco coste extra– Existen ciertos servidores web y servidores de

servlet gratuitos para tráficos pequeños

Page 9: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Estructura de un HttpServletimport java.io.*;//Se importan los paquetes con las clases para Servlets y HttpServletsimport javax.servlet.*;import javax.servlet.http.*;

public class ServletTemplate extends HttpServlet{

//El método doGet responde a peticiones mediante el método GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // El objeto “request” se usa para leer los “HTTP headers” que llegan // (p.e. Cookies) y los datos de formularios HTML enviados por el usuario

// El objeto “response” se usa para especificar “HTTP status codes” y // “HTTP headers” de la respuesta (p.e. El tipo de contenido, cookies, etc.)

PrintWriter out = response.getWriter(); // El objeto “out” se usa para enviar contenido al navegador

}

//El método doPost responde a peticiones mediante el método POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

Page 10: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Servlet simple que genera texto planoimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class HelloWorld extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); }

}

Page 11: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Servlet simple que genera un HTMLimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class SimpleHTML extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// Le decimos al navegador que lo que vamos a devolver es un HTML response.setContentType("text/html");

PrintWriter out = response.getWriter(); // Construimos una página HTML legal out.println(“<HTML>"); out.println(“<HEAD><TITLE>Servlet simple que genera un HTML</TITLE></HEAD>"); out.println(“<BODY>"); out.println(“<H2>Servlet que genera un HTML</H2>"); out.println(“<P>Este Servlet devuelve el cógigo de una página HTML que el"); out.println(“ navegador interpreta y muestra como tal.</P>"); out.println(“</BODY>"); out.println(“</HTML>");

out.flush(); out.close(); }}

Page 12: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Instalación de Tomcat 5.5.17• Realizar download de tomcat.apache.org• Se descomprime en un directorio del

ordenador:– C:\Archivos de programa\Apache\Tomcat 5.5

• Variables del sistema: CATALINA_HOME– set CATALINA_HOME=C:\ Archivos de

programa\Apache\Tomcat 5.5

• Ejecución:– Arranque del servidor: %CATALINA_HOME%\

bin\startup– Url en el navegador:

http://localhost:8080/– Parada del servidor:

%CATALINA_HOME%\bin\shutdown

Page 13: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Compilación• Compilación

– Vamos a utilizar la librería de Tomcat 5– Indicar en el CLASSPATH dónde están las

clases para que el compilador las reconozca• Path del archivo:

%CATALINA_HOME%\common\lib\servlet-api.jar

– Compilar como cualquier otro código fuente Java

• Instalación– Se entiende por instalación de un Servlet a

ponerlo disponible en el servidor para ser invocado desde un navegador o cliente HTTP

– Se necesita un servidor de Servlets (por ejemplo, Apache Tomcat 5.0 que es gratuito)

– Anteriormente se utilizaba el Servletrunner que viene con la instalación del JSDK2.0

Page 14: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Compilación, instalación e invocación• Invocación de un Servlet

– Desde la barra de direcciones del navegador:

• Ejemplo:

• De esta forma se invoca el servlet mediante el método GET siempre

– Desde un formulario:• La dirección del servlet debe ir en el action

• El servlet se invoca al hacer Submit y lo hace mediante el método definido en el formulario

• Al servlet se le pasan los valores de los campos

http://hostname:port/context/Nombre_Servlet

http://localhost:8080/servlet/SimpleHTML

<FORM action=“http://hostname:port/context/Nombre_Servlet” method=“POST”>...</FORM>

Page 15: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Ejemplo: ServletOpinion

• Página HTML:– MiServlet.html

• Servlet– ServletOpinion.java -> ServletOpinion.class

• Configurar web.xml <servlet> <servlet-name>eje1</servlet-name> <servlet-class>eje1</servlet-class> </servlet>

<servlet-mapping> <servlet-name>eje1</servlet-name> <url-pattern>/eje1</url-pattern> </servlet-mapping>

• Arrancar Tomcat

Page 16: Servlets 10 de Mayo de 2006. Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura

Ciclo de vida de los Servets

HttpServletMétodo init()

•Se ejecuta una sola vez al inicializar el Servlet

•Inicializar variables y operaciones costosas en tiempo de ejecución

Método destroy()

•Lo llama el servidor al “apagarse”

•Cerrar procesos en curso, liberar memoria, cerrar ficheros

Métodos doGet() o doPost()

•Recoger peticiones del usuario y ejecutar operaciones

•Mandar respuesta al usuario (en forma de HTML)

Otros métodos de usuario

Objeto HttpServletReque

st

Objeto HttpServletRespo

nse