Publicado el 1 de Marzo del 2019
799 visualizaciones desde el 1 de Marzo del 2019
195,8 KB
16 paginas
Creado hace 11a (07/05/2013)
Java EE – Servlets
Aplicaciones Web/Sistemas Web
Juan Pavón Mestras
Dep. Ingeniería del Software e Inteligencia Artificial
Facultad de Informática
Universidad Complutense Madrid
Material bajo licencia Creative Commons
Java EE Servlets y JSPs
Servlet
Clase Java que implementa un modelo de programación petición-
respuesta
• Puede usarse para procesar cualquier tipo de petición
• Clase GenericServlet
• Definido en el paquete javax.servlet
• Hay subclases específicas para HTTP: paquete javax.servlet.http
• Clase HttpServlet
Tiene un ciclo de vida concreto controlado por el contenedor en el que
se despliega
Cada servlet se ejecuta como un thread independiente
JSP (JavaServer Page)
Fichero con código (X)HTML que incluye scripts codificados en Java
Se compila y se convierte en un servlet
Utiliza etiquetas especializadas (Custom Tags) que amplían la sintaxis
de HTML
Juan Pavón - UCM 2012-13
Servlets
2
Ciclo de vida de un servlet
Lo controla el contenedor en el que se ha desplegado
Al llegar una petición correspondiente a un servlet, el contenedor
1. Comprueba si existe una instancia del servlet
• Si no existe
• Carga la clase del servlet
• Crea una instancia del servlet
• Inicializa la instancia del servlet llamando al método init()
2. Se invoca al método de servicio, pasándole objetos de tipo request
y response
• El servlet usa estos objetos para inspeccionar la petición y generar la
respuesta
3. Si hay que eliminar el servlet, el contenedor llama al método destroy()
del servlet
Juan Pavón - UCM 2012-13
Servlets
Servlet
Cualquier clase que implemente la interfaz
javax.servlet.Servlet
Métodos para gestionar el ciclo de vida del servlet
También suele ser necesaria la interfaz
javax.servlet.ServletConfig
Tiene los parámetros de arranque e inicialización para el servlet que le
pasa el contenedor
Normalmente los servlets se implementan a partir de una de las
dos subclases siguientes que implementan ambas interfaces:
javax.servlet.GenericServlet
• Clase que define un servlet independiente del protocolo
javax.servlet.http.HttpServlet
• Para servlets en aplicaciones web, que procesan las peticiones con el
protocolo HTTP
Juan Pavón - UCM 2012-13
Servlets
3
4
Métodos de la interfaz javax.servlet.Servlet
init(ServletConfig config)
Al arrancar un servlet, solo se ejecuta una vez
Inicializa atributos y recursos del servlet
getServletConfig()
Devuelve el objeto ServletConfig que contiene parámetros de arranque e
inicialización para el servlet que le pasa el contenedor
service(ServletRequest request, ServletResponse response)
Cada vez que se invoca un servicio al servlet
Dependiendo del tipo de servicio, invoca el método correspondiente al
servicio solicitado
Normalmente no se reescribe este método, solo los correspondientes a
los servicios específicos
Pueden invocarse concurrentemente los métodos de servicio, por ello
deben ser thread safe
destroy()
Al eliminar un servlet, solo se ejecuta una vez
Tiene que ser thread-safe porque puede haber otros threads en
ejecución
Juan Pavón - UCM 2012-13
Servlets
Métodos de la clase javax.servlet.HTTPServlet
El método service trata las siguientes peticiones:
DELETE, GET, HEAD, OPTIONS, POST, PUT, y TRACE
Invoca el método correspondiente doXXX
Los más usados:
doGet(HttpServletRequest request, HttpServletResponse response)
doPost(HttpServletRequest request, HttpServletResponse response)
Estos dos métodos son los que normalmente se tienen que
reescribir
El objeto request tiene información enviada en la petición
El objeto response permite crear la respuesta
• setContentType() – permite indicar el tipo MIME de lo que se va a
generar (por ejemplo, "text/html")
• getWriter() – devuelve el PrintWriter donde escribir lo que se genere
Pueden producir dos excepciones:
• IOException, porque usan operaciones de E/S
• ServletException, cualquier otra excepción que se quiera
Juan Pavón - UCM 2012-13
Servlets
5
6
Creación de servlets con eclipse
Crear un proyecto Web dinámica
File New Project Web Dynamic Web Project
• Nombre, p.ej. PrimerosServlets
• Target runtime: Apache Tomcat v7.0
En src, crear un paquete
• Nombre, p.ej. es.ucm.prueba
Dentro del paquete, crear un servlet con el asistente de creación
File New Other y seleccionar servlet en Web
• Nombre, p.ej. Saludo
En el método doGet() incluir el código que aparece a continuación
• Habrá que importar la clase java.io.PrintWriter
Juan Pavón - UCM 2012-13
Servlets
7
Ejemplo de servlet elemental
package es.ucm.prueba;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Saludo")
public class Saludo extends HttpServlet {
private static final long serialVersionUID = 1L;
URL relativo a la webapp
Método para tratar la
recepción de un HTTP GET
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("¡Bienvenido al mundo de los servlets!");
Salida generada para
enviar al navegador
}
}
Juan Pavón - UCM 2012-13
Generación de texto
Servlets
8
Creación de servlets con eclipse
Ejecutar
Run As...Run On Server
• La primera vez aparece una ventana para indicar en qué servidor se
quiere ejecutar
• Elegir Tomcat v7.0 Server at localhost
• En Add and remove, si no está en la lista de Configured, seleccionar el
proyecto en Available y pulsar el botón Add>
Solicitar restart server
• Permite que el servidor arranque con la nueva configuración
Aparece una pestaña en el área de trabajo con el resultado de ejecutar
el servlet en un navegador
• Si el URL que aparece es http://localhost:8080/PrimerosServlets/
saldrá el error 404 (recurso no disponible)
• Para que se vea la página, incluir en la URL el nombre del servlet
• http://localhost:8080/PrimerosServlets/Saludo
Juan Pavón - UCM 2012-13
Servlets
9
Primeros servlets con eclipse y tomcat
Juan Pavón - UCM 2012-13
Servlets
10
Ejercicios
Añadir un fichero index.html en el proyecto en WebContent
New HTML file
Ahora sí que se podrá ver la página
http://localhost:8080/PrimerosServlets/
Crea otro servlet SaludoHTML, que genere código HTML correcto
Para indicar el tipo de documento
• response.setContentType("text/html");
Generar el texto HTML correspondiente
En el fichero index.html añade enlaces para poder invocar a los
dos servlets
Añadir un atributo int contador que permite al servlet llevar una
cuenta de las veces que se invoca
Se define como un atributo normal en la clase
Se puede visualizar en la página
Juan Pavón - UCM 2012-13
Servlets
11
Interacción con formularios
http://localhost:8080/PrimerosServlets/hola.html
hola.html
<p>Por favor, indique su nombre:</p>
<form method="get"
action="/PrimerosServlets/ProcesaForm">
<p>Nombre:
<input type="text" name="cliente" />
<input type="submit" value="Enviar"/></p>
</form>
ProcesaForm.java
...
out.println("<!DOCTYPE html>\n" +
//...
"<h1>Hola
"+request.getParameter("cliente")+"</h1>\n" +
//...
Juan Pavón - UCM 2012-13
Servlets
12
Formularios
La página HTML con los formularios va en la carpeta WebContent
En el ejemplo, el fichero hola.html irá en WebContent del proyecto
PrimerosServlets
• El URL para acceder será
http://localhost:8080/PrimerosServlets/hola.html
El fuente del servlet se creará en src, dentro del paquete
correspondiente
El servlet (compilado) irá en WEB_INF/classes
Juan Pavón - UCM 2012-13
Servlets
13
Ejemplo de proceso de formulario
package es.ucm.prueba;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/ProcesaForm")
public class ProcesaForm extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println ("<!DOCTYPE html>\n" +
"<html>\n" +
"<head><title>Formulario de saludo</title></head>\n" +
"<body>\n" +
"<h1>Hola "+request.getParameter("cliente")+"</h1>\n" +
"</body></html>");
}
}
Juan Pavón - UCM 2012-13
Servlets
14
Parámetros de la petición
Los parámetros que llegan con GET y POST los tiene el objeto
request y se pueden acceder con varios métodos:
public Enumeration getParameterNames()
• Devuelve un Enumeration con los nombres de los parámetros
• Si no los hubiera, el Enumeration estará vacío
public String getParameter(String name)
• Valor del parámetro como un String
• null si no existiera ese parámetro
public String[] getParameterValues(name)
• Si un parámetro puede tener varios valores mejor usar este método
Un objeto Enumeration se usa como un Iterador:
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
out.println(e.nextElement());
}
Juan Pavón - UCM 2012-13
Servlets
15
Parámetros de la petición
Para pasar los valores de los parámetros de String al valor del
tipo correspondiente
int n = new Integer(parametro).intValue();
double d = new Double(parametro).doubleValue();
byte b = new Byte(parametro).byteValue();
• Estas operaciones se tienen que hacer en un try para poder capturar
la excepción NumberFormatException
boolean p = new Boolean(param).booleanValue();
Juan Pavón - UCM 2012-13
Servlets
16
Parámetros de la petición
Hay que comprobar siempre que los parámetros recibidos son
correctos
Si falt
Comentarios de: Java EE - Servlets (0)
No hay comentarios