Transcript Servlets

Servlets
2 de Marzo de 2011
Índice
•
•
•
•
•
•
•
•
¿Qué es un Servlet?
¿Cuándo y por qué usar Servlets?
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
¿Qué es un Servlet?
• Programas en Java que se ejecutan en un
servidor HTTP (servidor Web)
• Actúan como capa intermedia entre:
– Petición proveniente de un Navegador Web u otro
cliente HTTP
– Bases de Datos o Aplicaciones en el servidor HTTP
Servidor Web
BD
Servlet
BD
externa
Aplicación
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 consultas 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
¿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
Estructura de un HttpServlet
import java.io.*;
//Se importan los paquetes con las clases para Servlets y HttpServlets
import 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);
}
}
Servlet simple que genera texto plano
import 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");
}
}
Servlet simple que genera un HTML
import 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();
}
}
Instalación de Tomcat 6.0.16
• Realizar download de tomcat.apache.org
• Se descomprime en un directorio del
ordenador:
– C:\Archivos de programa\Apache\Tomcat 6.0
• Variables del sistema: CATALINA_HOME
– set CATALINA_HOME=C:\ Archivos de
programa\Apache\Tomcat 6.0
• Ejecución:
– Arranque del servidor:
%CATALINA_HOME%\bin\startup.bat
– Url en el navegador:
http://localhost:8080/
– Parada del servidor:
%CATALINA_HOME%\bin\shutdown.bat
Compilación
• Compilación
– Vamos a utilizar la librería de Tomcat 6
– Indicar en el CLASSPATH dónde están las clases
para que el compilador las reconozca
• Path del archivo:
%CATALINA_HOME%\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 6.0 que es gratuito)
– Otros tipos de servidores son GlassFish, Jboss, etc.
Compilación, instalación e invocación
• Invocación de un Servlet
– Desde la barra de direcciones del navegador:
http://hostname:port/context/Nombre_Servlet
• Ejemplo:
http://localhost:8080/servlet/SimpleHTML
• 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
<FORM action=“http://hostname:port/context/Nombre_Servlet” method=“POST”>
...
</FORM>
• 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
Ejemplo: ServletOpinion
• Página HTML:
– MiServlet.html
<HTML>
<HEAD>
<TITLE>Envíe su opinión</TITLE>
</HEAD>
<BODY>
<H2>Por favor, envíenos su opinión acerca de este sitio web</H2>
<FORM action="http://localhost:8080/EjemServlet/Opinion
method="POST">
Nombre: <INPUT type="text" name="nombre" size="15"><BR>
Apellidos: <INPUT type="TEXT" name="apellidos" size="30">
<P>Opinión que le ha merecido este sitio web<BR>
<INPUT type="radio" checked name="opinion" value="Buena">Buena<BR>
<INPUT type="radio" name="opinion" value="Regular">Regular<BR>
<INPUT type="radio" name="opinion" value="Mala">Mala
<P>Comentarios<BR>
<TEXTAREA name="comentarios" rows="6" cols="40"> </TEXTAREA>
<P><INPUT type="submit" name="botonEnviar" value="Enviar">
<INPUT type="reset" name="botonLimpiar" value="Limpiar">
</FORM>
</BODY>
</HTML>
Ejemplo: ServletOpinion
• Servlet:
– ServletOpinion.java -> ServletOpinion.class
• Fichero de configuración de la aplicación web:
– web.xml
…
<servlet>
<servlet-name>Ej Servlet de OPINION</servlet-name>
<servlet-class>ServletOpinion</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Ej Servlet de OPINION</servlet-name>
<url-pattern>/Opinion</url-pattern>
</servlet-mapping>
Ejemplo: ServletOpinion
• Crear la siguiente estructura de carpetas y ficheros:
Ejemplo: ServletOpinion
Ejemplo: ServletOpinion
Ejemplo: ServletOpinion
• Arrancar Tomcat
– Inicio>Todos los programas>Apache Tomcat>
• Monitor Tomcat
– En la barra de tareas: Start service (para
arrancar) y Stop service (para parar)
• Tomcat Manager
– Usuario: admin y Contraseña: (en blanco)
– Arrancar /EjemServlet
Ejemplo: ServletOpinion
Ejemplo: ServletOpinion
Ejemplo: ServletOpinion
• Puede ocurrir que salga el error anterior,
entonces escribir en la url del navegador el
nombre del fichero .html (en este caso,
MiServlet.html):
– http://127.0.0.1:8080/EjemServlet/MiServlet.html
Ejemplo: ServletOpinion
Ejemplo: ServletOpinion
Ciclo de vida de los Servets
HttpServlet
Objeto
Método init()
HttpServletRequest
Objeto
HttpServletResponse
•Se ejecuta una sola vez al inicializar el Servlet
•Inicializar variables y operaciones costosas en tiempo de ejecución
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
Método destroy()
•Lo llama el servidor al “apagarse”
•Cerrar procesos en curso, liberar memoria, cerrar ficheros