Post on 28-Jan-2016
Servlets
18 de Marzo de 2009
Í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
HTTPServidor Web
Servlet
BDexterna
BD
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 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); }}
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"); }
}
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(); }}
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:
• 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>
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
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