Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·...

77
1 Tema 7. Java Servlets 7.1. Introducción. Contenedores de servlets. 7.2. El API de Servlets. 7.3. Ciclo de vida de un servlet. Peticiones y threads. 7.4. La petición 7.5. La respuesta 7.6. Sesiones 7.7. Aplicaciones web 7.8. ServletContext 7.9. Colaboración entre servlets

Transcript of Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·...

Page 1: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

1

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 2: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

2

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 3: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

3

Introducción

• Un servlet es un objeto Java que puede procesar peticiones y retornar respuestas.

• Habitualmente, esas peticiones y respuestas siguen el protocolo HTTP y permiten añadir funcionalidad dinámica a los servidores web

• Un servlet es un componente web basado en tecnología Java, gestionado por un contenedor, que genera contenido dinámico.

Page 4: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

4

Contenedores de servlets

• Un contenedor de servlets es una parte de un servidor web o de un servidor de aplicaciones que:– ofrece servicios de red sobre los cuales se envían peticiones y

respuestas.

– decodifica peticiones

– formatea respuestas

– contiene y gestiona el ciclo de vida de los servlets

• Todos los contenedores de servlets deben soportar como mínimo HTTP/1.0 pero pueden soportar opcionalmente protocolos adicionales como HTTPS.

• Un contenedor de servlets puede fijar restricciones de seguridad en el entorno en el que el servlet se ejecuta (por ejemplo, se puede limitar la creación de nuevos threads).

Page 5: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

5

Contenedores de servlets

Page 6: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

6

Contenedores de servlets

• La tecnología de servlets para la generación de páginas dinámicas puede integrarse de diferentes maneras con un servidor web o con una aplicación stand-alone:1. Contenedores de servlets independientes. (Java Server)

2. Contenedores de servlets plug-in. (Native Server)

3. Contenedores de servlets empotrables.

Page 7: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

7

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 8: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

8

API de Servlets

• javax.servlet: – Servlets genéricos

– Interfaces importantes de este paquete: • Servlet

• ServletContext

• RequestDispatcher

• javax.servlet.http: – Servlets que implementan el protocolo HTTP.

– Clases e interfaces importantes de este paquete: • HttpServlet

• HttpServletRequest,

• HttpServletResponse,

• HttpSession,

• Cookie

Page 9: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

9

Implementando un servlet genérico

public void service(ServletRequest req, ServletResponse res)

throws ServletException, java.io.IOException

Page 10: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

10

Proceso de una petición

Page 11: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

11

Implementando un servlet HTTP

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, java.io.IOException

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, java.io.IOException

Page 12: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

12

Implementando un servlet HTTP

Page 13: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

13

Hello World Servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpS ervlet { public void doGet( HttpS ervletRequest req, HttpS ervletResponse res) throws S ervletE xception, IOE xception { res.setContentT ype("text/html"); P rintWriter out = res.getWriter(); out.println("<HT ML >"); out.println("<HE AD><T IT L E >Hello World</T IT L E ></HE AD>"); out.println("<BODY>"); out.println("<BIG>Hello World</BIG>"); out.println("</BODY></HT ML >"); }}

Page 14: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

<HT ML ><HE AD><T IT L E >Introductions</T IT L E ></HE AD><BODY><FORM ME T HOD=GE T ACT ION ="/servlet/Hello">If you don't mind me asking, what is your name?<IN P UT T YP E =T E XT N AME ="name"><P ><IN P UT T YP E =S UBMIT ></FORM></BODY></HT ML >

Page 15: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class Hello extends HttpS ervlet { public void doGet(HttpS ervletRequest req, HttpS ervletResponse res) throws S ervletE xception, IOE xception { res.setContentT ype("text/html"); P rintWriter out = res.getWriter(); S tring name = req.getP arameter("name"); out.println("<HT ML >"); out.println("<HE AD><T IT L E >Hello, " + name + "</T IT L E ></HE AD>"); out.println("<BODY>"); out.println("Hello, " + name); out.println("</BODY></HT ML >"); } public S tring getS ervletInfo() { return "A servlet that knows the name of the person to whom it's" + "saying hello"; }}

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res);}

Y desde el HTML:

<FORM METHOD=POST ACTION="/servlet/Hello">

Gestionar el método POST

Page 16: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class Deblink extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String contentType = req.getContentType(); // get the incoming type if (contentType == null) return; // nothing incoming, nothing to do res.setContentType(contentType); // set outgoing type to be incoming type PrintWriter out = res.getWriter(); BufferedReader in = req.getReader(); String line = null; while ((line = in.readLine()) != null) { line = replace(line, "<BLINK>", ""); line = replace(line, "</BLINK>", ""); out.println(line); } } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res); } private String replace(String line, String oldString, String newString) { int index = 0; while ((index = line.indexOf(oldString, index)) >= 0) { // Replace the old string with the new string (inefficiently) line = line.substring(0, index) + newString + line.substring(index + oldString.length()); index += newString.length(); } return line; }}

Page 17: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

17

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 18: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

18

Ciclo de vida de un servlet

1. Carga de la clase e instanciación

2. Inicialización: init()

3. Servicio de

peticiones:service()

4. Finalización:destroy()

Page 19: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

19

Servlet contador

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class S impleCounter extends HttpS ervlet { int count = 0; public void doGet(HttpS ervletRequest req,

HttpS ervletResponse res) throws S ervletE xception, IOE xception { res.setContentT ype("text/plain"); P rintWriter out = res.getWriter(); count++; out.println("S ince loading, this servlet has been accessed " + count + " times."); }}

¿¿¿Qué pasa si el contenedor de servlets decide destruir el servlet por falta de memoria???

Page 20: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

20

Servlet contador con init public class InitCounter extends HttpS ervlet {

int count;

public void init(S ervletConfig config) throws S ervletE xception { super.init(config); S tring initial = config.getInitP arameter("initial"); try { count = Integer.parseInt(initial); } catch (N umberFormatE xception e) { count = 0; } }

public void doGet(HttpS ervletRequest req, HttpS ervletResponse res) throws S ervletE xception, IOE xception { res.setContentT ype("text/plain"); P rintWriter out = res.getWriter(); count++; out.println("Since loading (and with a possible initialization"); out.println("parameter figured in), this servlet has been accessed"); out.println(count + " times."); }}

Page 21: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

21

Servlet contador con init y destroy (I)public void init(ServletConfig config) throws ServletException { // Always call super.init(config) first (servlet mantra #1) super.init(config);

// Try to load the initial count from our saved persistent state try { FileReader fileReader = new FileReader("InitDestroyCounter.initial"); BufferedReader bufferedReader = new BufferedReader(fileReader); String initial = bufferedReader.readLine(); count = Integer.parseInt(initial); return; } catch (FileNotFoundException ignored) { } // no saved state catch (IOException ignored) { } // problem during read catch (NumberFormatException ignored) { } // corrupt saved state

// No luck with the saved state, check for an init parameter String initial = getInitParameter("initial"); try { count = Integer.parseInt(initial); return; } catch (NumberFormatException ignored) { } // null or non-integer value

// Default to an initial count of "0" count = 0; }

Page 22: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

22

Servlet contador con init y destroy (II) public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); count++; out.println("Since the beginning, this servlet has been accessed " + count + " times."); }

public void destroy() { saveState(); }

public void saveState() { // Try to save the accumulated count try { FileWriter fileWriter = new FileWriter("InitDestroyCounter.initial"); String initial = Integer.toString(count); fileWriter.write(initial, 0, initial.length()); fileWriter.close(); return; } catch (IOException e) { // problem during write // Log the exception. See Chapter 5, "Sending HTML Information". } }

Page 23: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

23

Clases servlet y objetos servlets y threads

• El contenedor de servlets crea una única instancia de cada servlet por declaración de servlet que aparezca en el descriptor de despliegue.

• Si el servlet se incluye dentro de una aplicación marcada como distribuible, el contenedor crea solo una instancia por declaración de servlet y por máquina virtual.

• Dado que una misma clase puede aparecer en diferentes declaraciones de servlet nunca deben utilizarse variables estáticas para almacenar información entre peticiones.

Page 24: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

24

Servicio de peticiones y threads

• Un contenedor de servlets puede invocar al método service() (o doGet, doPost,...) de forma concurrente a través de varios threads.

• Por tanto todos los servlets deben sincronizar adecuadamente el acceso a objetos compartidos.

Page 25: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

25

Servlet contador

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class S impleCounter extends HttpS ervlet { int count = 0; public void doGet(HttpS ervletRequest req,

HttpS ervletResponse res) throws S ervletE xception, IOE xception { res.setContentT ype("text/plain"); P rintWriter out = res.getWriter(); count++; out.println("S ince loading, this servlet has been accessed " + count + " times."); }}

¿¿¿Problemas???

Page 26: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

26

Problemas de sincronización con el contador

count++ // Thread 1count++ // Thread 2out.println // Thread 1out.println // Thread 2

Page 27: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

27

Sincronizando el contador. Alternativas.

public synchronized void doGet(HttpServletRequest req, HttpServletResponse res)

PrintWriter out = res.getWriter();

synchronized(this) {

count++;

out.println("Since loading, this servlet has been accessed " +

count + " times.");

}

PrintWriter out = res.getWriter();

int local_count;

synchronized(this) {

local_count = ++count;

}

out.println("Since loading, this servlet has been accessed " +

local_count + " times.");

1

2

3

Page 28: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;

public class HolisticCounter extends HttpS ervlet { static int classCount = 0; // shared by all instances int count = 0; // separate for each servlet static Hashtable instances = new Hashtable(); // also shared public void doGet(HttpS ervletRequest req, HttpS ervletResponse res) throws S ervletE xception, IOE xception { res.setContentT ype("text/plain"); P rintWriter out = res.getWriter(); count++; out.println("S ince loading, this servlet instance has been accessed " + count + " times."); // Keep track of the instance count by putting a reference to this // instance in a Hashtable. Duplicate entries are ignored. // T he size() method returns the number of unique instances stored. instances.put(this, this); out.println("T here are currently " + instances.size() + " instances."); classCount++; out.println("Across all instances, this servlet class has been " + "accessed " + classCount + " times."); }}

Page 29: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

29

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 30: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

30

ServletRequest (I)

Parámetros

Funciones que permiten acceder a los parámetros de una petición. Los parámetros se reciben siempre del cliente.

public java.lang.String getParameter(java.lang.String name)

Retorna el valor del parámetro cuyo nombre es name como un String, o null si el parámetro no existe.

public java.util.Map getParameterMap()

Retorna una tabla de hash con los parámetros de la petición.

public java.util.Enumeration getParameterNames()

Retorna una Enumeration de objetos String conteniendo los nombres de los parámetros de la petición.

public java.lang.String[] getParameterValues(java.lang.String name)

Retorna un array de String con los valores de un parámetro, o null si el parámetro no existe.

Page 31: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

31

ServletRequest (II)

Atributos

Los atributos permiten la comunicación entre servlets que se pasen una misma petición (pipeline) o entre filtros y servlets.

public java.lang.Object getAttribute(java.lang.String name)

Retorna el valor del atributo name o null si no existe.

public java.util.Enumeration getAttributeNames()

Retorna una Enumeration de objetos String conteniendo los nombres de los atributos de la petición.

public void removeAttribute(java.lang.String name)

Elimina el atributo name de la petición.

public void setAttribute(java.lang.String name, java.lang.Object o)

Fija el valor del atributo name al objeto o.

Page 32: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

32

HTTPServletRequest (I)

Cabeceras

Funciones que permiten acceder a las cabeceras HTTP de la petición.

public java.lang.String getHeader(java.lang.String name)

Retorna el valor de la primera cabecera de petición con nombre name.

public java.util.Enumeration getHeaderNames()

Retorna los nombres de todas las cabeceras de petición.

public java.util.Enumeration getHeaders(java.lang.String name)

Retorna todas las cabeceras de petición con nombre name.

public int getIntHeader(java.lang.String name)

public long getDateHeader(java.lang.String name)

Retornan cabeceras de tipos específicos.

Page 33: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

33

HTTPServletRequest (II)

Descomposición de elementos en el camino de una petición

RequestURI = ContextPath + ServletPath + PathInfo

public java.lang.String getRequestURI()

Retorna la parte del URL de la petición que va desde el nombre de servidor hasta el interrogante o hasta el final si éste no aparece.

public java.lang.String getContextPath()

Retorna el fragmento de URL que indica el contexto de la petición.

public java.lang.String getServletPath()

Retorna el fragmento de URL que permite seleccionar el servlet.

public java.lang.String getPathInfo()

Retorna el resto del RequestURI (no ContextPath y no ServletPath).

Page 34: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

34

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class RequestInfo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>Request Information Example</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>Request Information Example</h3>"); out.println("Method: " + request.getMethod()); out.println("Request URI: " + request.getRequestURI()); out.println("Protocol: " + request.getProtocol()); out.println("PathInfo: " + request.getPathInfo()); out.println("Remote Address: " + request.getRemoteAddr()); out.println("</body>"); out.println("</html>"); }}

Información de la petición

Page 35: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

35

import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;

public class RequestParamExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("GET Request. No Form Data Posted"); }

public void doPost(HttpServletRequest request, HttpServletResponse res) throws IOException, ServletException { Enumeration e = request.getParameterNames();

PrintWriter out = res.getWriter (); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getParameter(name); out.println(name + " = " + value); } }}

Parámetros de la petición

Page 36: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

36

import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;

public class RequestHeaderExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getHeader(name); out.println(name + " = " + value); } }}

Cabeceras de la petición

Page 37: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

37

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 38: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

38

ServletResponse

Enviando información

El objeto respuesta dispone de métodos para incluir en la respuesta datos binarios y de texto.

public ServletOutputStream getOutputStream() throws IOException

Retorna un ServletOutputStream, adecuado para el envío de datos binarios en la respuesta.

public java.io.PrintWriter getWriter() throws IOException

Retorna un PrintWriter que permite enviar información textual al cliente.

Page 39: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

39

HTTPServletResponse (I)

Fijando cabeceras

Un servlet puede fijar las cabeceras de la respuesta antes de enviar ninguna otra información, utilizando los métodos:

public void addHeader(java.lang.String name, java.lang.String value)

Añade value al conjunto de valores de la cabecera name.

public void setHeader(java.lang.String name, java.lang.String value)

Fija a value el valor de la cabecera name.

public void addDateHeader(java.lang.String name, long date)

public void addIntHeader(java.lang.String name, int value)

public void setDateHeader(java.lang.String name, long date)

public void setIntHeader(java.lang.String name, int value)

Lo mismo con tipos específicos.

Page 40: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

40

HTTPServletResponse (II)

Retornando redirecciones y errores

Si se desea retornar una respuesta indicando que ha habido un error o redirigir a otra página, podemos utilizar:

public void sendError(int sc) throws IOException

Envía una respuesta de error al cliente utilizando el código de estado especificado y limpiando el buffer.

public void sendError(int sc, java.lang.String msg) throws IOException

Envía una respuesta de error en forma de página HTML conteniendo el texto que incluya la variable msg.

public void sendRedirect(java.lang.String location) throws IOException

Envía una respuesta de redirección temporal al cliente utilizando location como URL.

Page 41: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

41

HTTPServletResponse (III)

Cierre del objeto respuesta

El objeto respuesta se cierra cuando se da una de las siguientes condiciones:

– Finaliza el método service()

– Se había fijado el tamaño máximo de la respuesta (vía setContextLegth()) y ya se ha escrito esa cantidad de datos.

– Se llama a sendError()

– Se llama a sendRedirect()

El objeto respuesta NO SE PUEDE UTILIZAR después de que se haya cerrado.

Page 42: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

42

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 43: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

43

Sesiones (I)

Los servlets nos proveen con un mecanismo automático de gestión de sesiones. Opciones:

– Cookies. JSESSIONID

– URL rewriting. http://www.miserv.com/servletPepe;jsessionid=2324

– Sesiones SSL.

Las sesiones existen a nivel de aplicación web (ServletContext), es decir, se comparten entre los diferentes servlets de una aplicación.

Las sesiones se encapsulan como instancias de la clase HTTPSession.

Page 44: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

44

Sesiones (II)

Obteniendo la sesión

Usamos la petición (HTTPServletRequest) para acceder a la sesión

public HttpSession getSession()

Retorna la sesión asociada con la petición. Si no existe, crea una.

public HttpSession getSession(boolean create)

Retorna la sesión asociada con la petición. Si no existe, y create es cierto, crea una.

Page 45: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

45

Sesiones (III)

Atributos de sesión

Podemos asociar atributos a una sesión, para mantener el estado del cliente entre dos peticiones.

public java.lang.Object getAttribute(java.lang.String name)

Retorna el valor del atributo de nombre name

public java.util.Enumeration getAttributeNames()

Retorna una enumeración con los nombres de todos los atributos

public void setAttribute(java.lang.String name, java.lang.Object value)

Fija el valor del atributo de nombre name asignándole value.

public void removeAttribute(java.lang.String name)

Elimina el atributo de nombre name

Page 46: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

46

Sesiones (IV)

Finalización de sesión

Una sesión finaliza cuando pasa un cierto tiempo sin recibirse peticiones que se identifiquen como pertenecientes a esa sesión. Se puede fijar el tiempo de inactividad para que la sesión finalice.

public void setMaxInactiveInterval(int interval)

Especifica el tiempo, en segundos, entre peticiones de un mismo cliente antes de que el contenedor de servlets invalide la sesión.

Page 47: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class CookieExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); // print out cookies

Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { Cookie c = cookies[i]; String name = c.getName(); String value = c.getValue(); out.println(name + " = " + value); } }}

Recibiendo Cookies

Page 48: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

Enviando Cookiesimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class CookieExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html");

String name = request.getParameter("cookieName"); if (name != null && name.length() > 0) { String value = request.getParameter("cookieValue"); Cookie c = new Cookie(name, value); response.addCookie(c); } }}

Page 49: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

49

Accediendo a la sesión (I)import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;

public class SessionExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(true);

// print session info

Date created = new Date(session.getCreationTime()); Date accessed = new Date(session.getLastAccessedTime()); out.println("ID " + session.getId()); out.println("Created: " + created); out.println("Last Accessed: " + accessed);

Page 50: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

50

Accediendo a la sesión (II)

// set session info if needed

String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); }

// print session contents

Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println(name + " = " + value); } }}

Page 51: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

51

Carrito de la compra

public class CashierServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// Get the user's session and shopping cart HttpSession session = request.getSession(); ShoppingCart cart = (ShoppingCart)session. getAttribute("cart"); ... // Determine the total price of the user's books double total = cart.getTotal();

... } }

Page 52: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

52

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 53: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

53

Aplicaciones web

• Una aplicación web es una colección de servlets, páginas HTML, clases y otros recursos que comprenden una aplicación completa dentro de un servidor web.

• Una aplicación web se enraiza en un camino específico dentro de un servidor web. Ejemplo: La aplicación web de gestión de catálogo se puede encontrar bajo http://www.miempresa.com/catalog.

Page 54: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

54

Elementos de una aplicación web

• Servlets

• Páginas JSP

• Clases Java de utilidad

• Documentos estáticos (html, imágenes, sonidos, etc.)

• Applets, beans y clases de la parte cliente de la aplicación

• Información descriptiva que enlaza los elementos anteriores.

Page 55: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

55

Estructura de directorios

• Una aplicación web existe como una estructura jerárquica de directorios

• Por ejemplo, para un aplicación enraizada en el servidor en /catalog, el fichero index.html que se encuentre en la raiz de la jerarquia de directorios de la aplicación web será retornado cuando el usuario solicite /catalog/index.html.

• Existe un directorio especial dentro de la jerarquía de la aplicación llamado “WEB-INF”. Este directorio no es visible desde el exterior, pero si para los servlets de la aplicación utilizando getResource. Los contenidos del directorio WEB-INF son:– /WEB-INF/web.xml: El descriptor de despliegue. Explica al contenedor de

servlets lo que contiene la aplicación.

– /WEB-INF/classes/ Es el directorio donde se encuentran los .class de los servlets y del resto de clases Java que utilice la aplicación

– /WEB-INF/lib/*.jar Es el área predefinida para archivos Java Archive.

Page 56: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

56

Estructura de directorios. Ejemplo

/index.html

/howto.jsp

/feedback.jsp

/images/banner.gif

/images/jumping.gif

/WEB-INF/web.xml

/WEB-INF/lib/jspbean.jar

/WEB-INF/classes/com/miempresa/servlets/MiServlet.class

/WEB-INF/classes/com/miempresa/util/MiClaseUtilidad.class

• Las aplicaciones web se empaquetan en archivos .war (Web Archive).

Page 57: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

57

Descriptor de despliegue

• Incluye información relativa a:– Datos generales de la aplicación web (iconos, nombre,

descripción)

– Parámetros de inicialización de la aplicación web (cada aplicación los define y usa para lo que considera oportuno)

– Configuración de la gestión de sesiones (timeout)

– Declaración de servlets

– Mapeos de servlets

– Otros: Declaración de taglibs, lista de archivos de bienvenida, páginas de error, mapeos de tipos MIME, declaración de clases listener del ciclo de vida de la aplicación, definición de filtros, mapeos de filtros, seguridad, acceso a objetos JNDI.

Page 58: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de
Page 59: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

59

Servlets y mapeos de servlets

Page 60: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

60

Mapeos de servlets. Matching

• Tipos de matching:– /esto/es/un/camino/* -> matching de prefijos

– /esto/es/un/camino/exacto -> matching exacto

– *.zp -> matching de extensión

– / -> matching para definir un servlet por defecto

• Algoritmo de mapeo:1. Si existe un matching exacto entre el path solicitado y el del servlet, se envia

la petición al servlet.

2. Se intenta encontrar de forma recursiva, el mayor prefijo que haga matching y se envia la petición al servlet.

3. Si el ultimo segmento de la URL contiene una extensión, se busca un servlet que gestione esa extensión

4. Si se ha definido, se envía la petición al servlet por defecto.

Page 61: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

61

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 62: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

62

ServletContext (I) La interficie ServletContext define la vista que un servlet tiene de la

apliación web en la que está contenido. Un servlet puede utilizar el ServletContext para realizar logs, obtener referencias URL a recursos y fijar y almacenar atributos a los que otros servlets de la misma aplicación pueden acceder. Existe una instancia de ServletContext por cada aplicación web.

Parámetros de inicialización

Permiten acceder a los parámetros de inicialización de la aplicación web especificados en el descriptor de despliegue

public java.lang.String getInitParameter(java.lang.String name)

Retorna el valor de inicialización de name

public java.util.Enumeration getInitParameterNames()

Retorna una enumeración con los nombres de los parámetros de inicialización

Page 63: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

63

ServletContext (II)

Atributos de contexto

Permiten compartir información entre servlets que forman parte de la misma aplicación web. Si la aplicación es distribuida, solo entre los que corren en la misma máquina virtual

public java.lang.Object getAttribute(java.lang.String name)

Retona el objeto que se ha asociado con el nombre name.

public java.util.Enumeration getAttributeNames()

Retorna una enumeración con los nombres de los atributos.

public void removeAttribute(java.lang.String name)

Elimina el atributo de nombre name.

public void setAttribute(java.lang.String name, java.lang.Object object)

Fija el valor del atributo de nombre name al objeto object.

Page 64: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

64

ServletContext (III)

Recursos

La interfaz ServletContext ofrece acceso directo a la jerarquía de contenidos estáticos que son parte de la aplicación web como HTML's, GIF's, etc.

public java.net.URL getResource(java.lang.String path)

throws MalformedURLException

Nos permite construir la URL de un recurso local a nuestro sistema de ficheros.

public java.io.InputStream getResourceAsStream(java.lang.String path)

Retorna el recurso que se encuentra en el camino path como un InputStream.

Page 65: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

65

ServletContext (IV)

Log

La interfaz ServletContext nos ofrece la posibilidad de escribir información en el fichero de log del servidor.

void log(java.lang.String msg)

Escribe el mensaje a un fichero de log del servlet, habitualmente en el log de eventos. El nombre y tipo del fichero log es específico para cada contenedor de servlets.

void log(java.lang.String message, java.lang.Throwable throwable)

Escribe en un fichero log del servlet un menaje explicatorio y la traza de la pila dada una excepción

Page 66: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

Listener

Page 67: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

Filtros y mapeos de filtros

Page 68: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

ServletContext

Page 69: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de
Page 70: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de
Page 71: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

71

Tema 7. Java Servlets

7.1. Introducción. Contenedores de servlets.

7.2. El API de Servlets.

7.3. Ciclo de vida de un servlet. Peticiones y threads.

7.4. La petición

7.5. La respuesta

7.6. Sesiones

7.7. Aplicaciones web

7.8. ServletContext

7.9. Colaboración entre servlets

Page 72: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

72

RequestDispatcher

Despachando peticiones

Es posible que un servlet necesite la ayuda de otros servlets, JSP's o HTML's para generar partes de la respuesta. O bien decida hacer parte del trabajo y después enviar la petición a otro para que continúe. Para eso se usan los ResquestDispatcher.

public void forward(ServletRequest request, ServletResponse response)

throws ServletException, IOException

Envía una petición de un servlet a otro recurso (servlet, fichero JSP o fichero HTML) del servidor.

public void include(ServletRequest request, ServletResponse response)

throws ServletException, IOException

Incluye el contenido de un recurso (servlet, fichero JSP o fichero HTML) en la respuesta

Page 73: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

73

Obteniendo el request dispatcher de un servlet o JSP de otra aplicación web

public ServletContext getContext(java.lang.String uripath)

public class MiServlet extends HTTPServlet {

public void doGet(HTTPServletRequest req,HTTPServletResponse res) {

...

// Obtenemos el contexto del servlet actual

ServletContext sc = getServletContext()

// Le solicitamos que encuentre el contexto del servlet

// que queremos usar

ServletContext sc2 = sc.getContext(“app2”);

// Obtenemos el Request dispatcher a partir del nuevo contexto

RequestDispatcher rd = sc2.getRequestDispatcher(“/servletUI”);

rd.forward(req,resp);

}

}

Page 74: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

74

Obteniendo el request dispatcher de un servlet o JSP de nuestra misma aplicación web

public RequestDispatcher getRequestDispatcher(java.lang.String path)

• Por ejemplo:

public class MiServlet extends HTTPServlet {

public void doGet(HTTPServletRequest req,HTTPServletResponse res) {

...

RequestDispatcher rd = req.getRequestDispatcher(“servletUI”);

rd.forward(req,resp);

}

}

Page 75: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

75

RequestDispatcher (II)

Imaginemos un servlet que recibe un pedido, almacena su información, y a continuación quiere mostrar la página de que el pedido se ha almacenado correctamente que sabemos que esta en

/pags-staticas/pedidoOK.html.

public void doGet (HTTPServletRequest req,HTTPServletResponse resp){

...

almacenarPedido();

RequestDispatcher rd = req.getRequestDispatcher(“/pags-staticas/pedidoOK.html”);

rd.forward(req,resp);

...

(lo que vaya aquí nunca se ejecutará).

}

Page 76: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

76

RequestDispatcher (III)

Imaginemos que nuestra página web se divide en dos secciones

public void doGet (HTTPServletRequest req,HTTPServletResponse resp){

... // HTML previo del cuadro

RequestDispatcher rd = req.getRequestDispatcher(“/menu.jsp”);

rd.include(req,resp);

... // HTML intermedio del cuadro

RequestDispatcher rd2 = req.getRequestDispatcher(“/main.jsp”);

rd2.include(req,resp);

... //HTML final del cuadro

}

MENÚ PRINCIPAL

Page 77: Tema 7. Java Servlets - Ub-gei-sd.github.io by UB-GEI-SDub-gei-sd.github.io/Tema3/Servlets.pdf ·  · 2018-04-11• Un contenedor de servlets es una parte de un servidor web o de

77

Eventos en el ciclo de vida