Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porNicolás Pérez Giménez Modificado hace 6 años
1
Servlets Servlets Son modulos que extienden las funcionalidades de un servidor “java-enabled” Normalmente generan código HTML dinámicamente, el cual se manda al browser, quien lo muestra. Por ejemplo, pueden mandar una query a una base de datos, la que puede estar basada en parámetros que mandó el browser al servidor. El resultado se manda en formato HTML
2
Ambientes de Desarrollo
Hay muchos ambientes de desarrollo que permiten escribir y testear los servlets cómodamente Incluyen un editor y un servidor web También incluyen los imports necesarios para poder compilar y correr los servlets Algunos de ellos son Eclipse (need to download plugins) y Netbeans (which also has full j2ee support
3
Anatomía de un Servlet Un Servlet se escribe extendiendo la clase HttpServlet la que tiene los siguientes métodos declarados pero vacíos init() Es invocado por el servidor cuando el servlet se usa por primera vez (cuándo sucede esto depende del servidor) doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException es invocado cada vez que un servlet es contactado po un requerimiento GET (por default) doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException es invocado cada vez que un servlet es contactado po un requerimiento POST
4
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void init() { //Sobreescribir para que haga lo que queramos } public void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { public void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
5
El parámetro HttpServletRequest
HttpServletRequest es la clase del primer parametro que reciben los métodos doGet y doPost. Provee acceso a: Información acerca del cliente (por ejemplo, los parámetros que envió, la versión del protocolo que está usando, la IP del cliente, etc. Además da acceso a un, ServletInputStream que puede ser usado por el servidor para recibir información adicional (por ejemplo un archivo que el cliente quiere “uplodear” cuando se ha usado el método POST o PUT.
6
El parámetro HttpServletResponse
HttpServletResponse es la clase del segundo argumento que reciben doGet y doPost. Provee métodos para : Decirle al browser cuál es el tipo MIME de la respuesta que se le va a dar al cliente Obtener un objeto ServletOutputStream y un PrintWriter través del cual podemos mandar código HTML dinámicamente al cliente. Mandar otras informaciones importantes (cookies, redireccionamineto, refresco, etc…)
7
Example 1 import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; import java.util.Date; public class SimpleServlet extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // set content type response.setContentType("text/html"); // open print writer to browser PrintWriter out = response.getWriter(); //send data out.println("<HTML>") out.println("<H1> Mi Primer Servlet </H1>"); out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>"); out.println("</HTML>"); out.close(); }
8
Example 1 Importar las clases necesarias Para usar la clase Date
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Date; public class SimpleServlet extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // set content type response.setContentType("text/html"); // open print writer to browser PrintWriter out = response.getWriter(); //send data out.println("<HTML>") out.println("<H1> Mi Primer Servlet </H1>"); out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>"); out.println("</HTML>"); out.close(); } Importar las clases necesarias Para usar la clase Date
9
Example 1 Todo servlet extiende HttpServlet Sobreescribir método doGet
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Date; public class SimpleServlet extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // set content type response.setContentType("text/html"); // open print writer to browser PrintWriter out = response.getWriter(); //send data out.println("<HTML>") out.println("<H1> Mi Primer Servlet </H1>"); out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>"); out.println("</HTML>"); out.close(); } Todo servlet extiende HttpServlet Sobreescribir método doGet
10
Example 1 import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; import java.util.Date; public class SimpleServlet extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // set content type response.setContentType("text/html"); // open print writer to browser PrintWriter out = response.getWriter(); //send data out.println("<HTML>") out.println("<H1> Mi Primer Servlet </H1>"); out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>"); out.println("</HTML>"); out.close(); } Decirle al browser el tipo de Contenido que va a recibir Como respuesta Obtiene una “linea directa” para escribirle al browser contenido HTML
11
Mandar (imprimir) info al browser
Example 1 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Date; public class SimpleServlet extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // set content type response.setContentType("text/html"); // open print writer to browser PrintWriter out = response.getWriter(); //send data out.println("<HTML>") out.println("<H1> Mi Primer Servlet </H1>"); out.println("<BR> <H2>Fecha y hora: "+(new Date())+"<H2>"); out.println("</HTML>"); out.close(); } Mandar (imprimir) info al browser Obtiene la fecha del sistema Cerrar conexión (recién aquí se manda todo)
12
Corriendo el primer ejemplo
Escribir un servlet con Netbeans es muy sencillo Tambien testearlo se puede hacer automáticamente Abrir netbeans Crear un proyecto web (lo cual creará una serie de directorios y archivos) Crear el servlet (new servlet) Copiar el código de SimpleServlet.java Correr el archivo
13
Ejemplo 2 Implementar un contador web
Cuenta cuantas veces se contacta al servlet (con GET) Tambien le mostrará al cliente su número IP
14
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Count extends HttpServlet { int count = 0; // a counter starts in 0 public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<H1> A web page counter </H1>"); out.println("<HR>"); out.println("This servlet was accessed "+count+" time(s)"); out.println("Your computer is "+req.getRemoteHost()); out.close(); }
15
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Count extends HttpServlet { int count = 0; // a counter starts in 0 public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<H1> A web page counter </H1>"); out.println("<HR>"); out.println("This servlet was accessed "+count+" time(s)"); out.println("Your computer is "+req.getRemoteHost()); out.close(); }
16
Incrementa el contador cada vez que se ejecuta doGet
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Count extends HttpServlet { int count = 0; // a counter starts in 0 public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<H1> A web page counter </H1>"); out.println("<HR>"); out.println("This servlet was accessed "+count+" time(s)"); out.println("Your computer is "+req.getRemoteHost()); out.close(); } Incrementa el contador cada vez que se ejecuta doGet
17
Totalmente necesario import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class Count extends HttpServlet { int count = 0; // a counter starts in 0 public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<H1> A web page counter </H1>"); out.println("<HR>"); out.println("This servlet was accessed "+count+" time(s)"); out.println("Your computer is "+req.getRemoteHost()); out.close(); } Totalmente necesario
18
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Count extends HttpServlet { int count = 0; // a counter starts in 0 public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<H1> A web page counter </H1>"); out.println("<HR>"); out.println("This servlet was accessed "+count+" time(s)"); out.println("Your computer is "+req.getRemoteHost()); out.close(); } Print data to browser
19
Qué pasa si el servidor se cae y se reinicia el sistema ?
Contador volverá a 0 Para recordar el valor que tenía esta variable incluso si se cae el sistema la iremos escribiendo en un archivo cada vez que cambia su valor. Al principio el servlet lee el valor inicial de la variable desde un archivo (si existía), si no, vamos a empezar con el valor = 0
20
public class Count extends HttpServlet {
int count = 0; // a counter for the object public void init() { try { BufferedReader in = new BufferedReader( newFileReader(„count.txt“)); String l = in.readLine(); count = Integer.parseInt(l); } catch (FileNotFoundException e) { //no need to do anything here } public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter outFile = new PrintWriter( new Filereader(„count.txt“)); outFile.println(count); outFile.close(); PrintWriter outBrowser = res.getWriter(); res.setContentType("text/html"); outBrowser.println("<H1> A web page counter </H1>"); outBrowser.println("<HR>"); .....
21
Tratar de abrir el archivo
public class Count extends HttpServlet { int count = 0; // a counter for the object public void init() { try { BufferedReader in = new BufferedReader( newFileReader(„count.txt“)); String l = in.readLine(); count = Integer.parseInt(l); } catch (FileNotFoundException e) { //no need to do anything here } public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter outFile = new PrintWriter( new Filereader(„count.txt“)); outFile.println(count); outFile.close(); PrintWriter outBrowser = res.getWriter(); res.setContentType("text/html"); outBrowser.println("<H1> A web page counter </H1>"); outBrowser.println("<HR>"); ..... Tratar de abrir el archivo
22
Convrtir lo leido a valor entero
public class Count extends HttpServlet { int count = 0; // a counter for the object public void init() { try { BufferedReader in = new BufferedReader( newFileReader(„count.txt“)); String l = in.readLine(); count = Integer.parseInt(l); } catch (FileNotFoundException e) { //no need to do anything here } public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter outFile = new PrintWriter( new Filereader(„count.txt“)); outFile.println(count); outFile.close(); PrintWriter outBrowser = res.getWriter(); res.setContentType("text/html"); outBrowser.println("<H1> A web page counter </H1>"); outBrowser.println("<HR>"); ..... Leer una linea Convrtir lo leido a valor entero
23
public class Count extends HttpServlet {
int count = 0; // a counter for the object public void init() { try { BufferedReader in = new BufferedReader( newFileReader(„count.txt“)); String l = in.readLine(); count = Integer.parseInt(l); } catch (FileNotFoundException e) { //no need to do anything here } public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter outFile = new PrintWriter( new Filereader(„count.txt“)); outFile.println(count); outFile.close(); PrintWriter outBrowser = res.getWriter(); res.setContentType("text/html"); outBrowser.println("<H1> A web page counter </H1>"); outBrowser.println("<HR>"); .....
24
Despues de incrementar, abrir el archivo (sobreescribirlo)
public class Count extends HttpServlet { int count = 0; // a counter for the object public void init() { try { BufferedReader in = new BufferedReader( newFileReader(„count.txt“)); String l = in.readLine(); count = Integer.parseInt(l); } catch (FileNotFoundException e) { //no need to do anything here } public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter outFile = new PrintWriter( new Filereader(„count.txt“)); outFile.println(count); outFile.close(); PrintWriter outBrowser = res.getWriter(); res.setContentType("text/html"); outBrowser.println("<H1> A web page counter </H1>"); outBrowser.println("<HR>"); ..... Despues de incrementar, abrir el archivo (sobreescribirlo) Escribir el nuevo número Cerrar archivo
25
public class Count extends HttpServlet {
int count = 0; // a counter for the object public void init() { try { BufferedReader in = new BufferedReader( newFileReader(„count.txt“)); String l = in.readLine(); count = Integer.parseInt(l); } catch (FileNotFoundException e) { //no need to do anything here } public void doGet ( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { count++; PrintWriter outFile = new PrintWriter( new Filereader(„count.txt“)); outFile.println(count); outFile.close(); PrintWriter outBrowser = res.getWriter(); res.setContentType("text/html"); outBrowser.println("<H1> A web page counter </H1>"); outBrowser.println("<HR>"); ..... El resto es igual
26
Ejemplo 3 Escriba un servlet que genere un número aleatorio entre 1 y 100 cada vez que es contactado y lo muestra al cliente junto con la IP del computador del cliente Además muestra el número más grande generado hasta ahora y la IP del computador para el cual lo generó La dirección del computador del cliente puede ser obtenida String s = request.getRemoteHost(); returns the IP number (like String s = request.getRemoteAddress(); returns the name if it can be retrieved (like Un número aleatorio entre 1 y 100 se genera con la siguiente instrucción en Java int numero = (int)(1 + Math.random()*100);
28
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class NewServlet extends HttpServlet { int maxNumber = 0; String maxIP = ""; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int aleatorio = (int)(1 + Math.random()*100); String ip = request.getRemoteAddr(); if (aleatorio > maxNumber) { maxNumber = aleatorio; maxIP = ip; } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1> Bienvenido </h1><br>"); out.println("<h2> Su dirección IP es "+ ip+ "<br>"); out.println("Su número es "+aleatorio+"<br><br>"); out.println("El numero mayor generado es "+maxNumber); out.println("<br>Fue generado para "+maxIP); out.close();
29
Inicializacion variables para guardar La IP y el valor del máximo
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class NewServlet extends HttpServlet { int maxNumber = 0; String maxIP = ""; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int aleatorio = (int)(1 + Math.random()*100); String ip = request.getRemoteAddr(); if (aleatorio > maxNumber) { maxNumber = aleatorio; maxIP = ip; } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1> Bienvenido </h1><br>"); out.println("<h2> Su dirección IP es "+ ip+ "<br>"); out.println("Su número es "+aleatorio+"<br><br>"); out.println("El numero mayor generado es "+maxNumber); out.println("<br>Fue generado para "+maxIP); out.close(); Inicializacion variables para guardar La IP y el valor del máximo
30
Generación número aleatorio
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class NewServlet extends HttpServlet { int maxNumber = 0; String maxIP = ""; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int aleatorio = (int)(1 + Math.random()*100); String ip = request.getRemoteAddr(); if (aleatorio > maxNumber) { maxNumber = aleatorio; maxIP = ip; } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1> Bienvenido </h1><br>"); out.println("<h2> Su dirección IP es "+ ip+ "<br>"); out.println("Su número es "+aleatorio+"<br><br>"); out.println("El numero mayor generado es "+maxNumber); out.println("<br>Fue generado para "+maxIP); out.close(); Generación número aleatorio Obtencion ip del cliente
31
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class NewServlet extends HttpServlet { int maxNumber = 0; String maxIP = ""; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int aleatorio = (int)(1 + Math.random()*100); String ip = request.getRemoteAddr(); if (aleatorio > maxNumber) { maxNumber = aleatorio; maxIP = ip; } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1> Bienvenido </h1><br>"); out.println("<h2> Su dirección IP es "+ ip+ "<br>"); out.println("Su número es "+aleatorio+"<br><br>"); out.println("El numero mayor generado es "+maxNumber); out.println("<br>Fue generado para "+maxIP); out.close(); Actualización de los datos del máximo generado
32
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class NewServlet extends HttpServlet { int maxNumber = 0; String maxIP = ""; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int aleatorio = (int)(1 + Math.random()*100); String ip = request.getRemoteAddr(); if (aleatorio > maxNumber) { maxNumber = aleatorio; maxIP = ip; } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1> Bienvenido </h1><br>"); out.println("<h2> Su dirección IP es "+ ip+ "<br>"); out.println("Su número es "+aleatorio+"<br><br>"); out.println("El numero mayor generado es "+maxNumber); out.println("<br>Fue generado para "+maxIP); out.close(); Enviar info al cliente
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.