Ejemplo 4 Modificar el servlet contador de modo

  • Slides: 22
Download presentation
Ejemplo 4 • Modificar el servlet contador de modo de generar una respuesta que

Ejemplo 4 • Modificar el servlet contador de modo de generar una respuesta que muestre la IP de todos los computadores que lo han contactado hasta ahora – Use un vector o un arreglo para ir guardándolas

Usandor un arreglo (se reinicializa vacío cada vez que parte el servidor) import java.

Usandor un arreglo (se reinicializa vacío cada vez que parte el servidor) import java. io. *; import javax. servlet. http. *; public class Addresses. Servlet extends Http. Servlet { int n. IP = 0; String[] IPs = new String[1000]; public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { String ip = request. get. Remote. Host(); IPs[n. IP++] = ip; response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); out. println("<h 1> Han visitado este sitio </h 1> "); } } for (int i = 0; i < n. IP; i++) out. println(" "+ IPs[i]); out. close();

import java. io. *; import javax. servlet. http. *; public class Addresses. Servlet extends

import java. io. *; import javax. servlet. http. *; public class Addresses. Servlet extends Http. Servlet { int n. IP = 0; String[] IPs = new String[1000]; public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { String ip = request. get. Remote. Host(); IPs[n. IP++] = ip; response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); Optener Ip del cliente y guardarla en el arreglo out. println("<h 1> Han visitado este sitio </h 1> "); } } for (int i = 0; i < n. IP; i++) out. println(" "+ IPs[i]); out. close();

import java. io. *; import javax. servlet. http. *; public class Addresses. Servlet extends

import java. io. *; import javax. servlet. http. *; public class Addresses. Servlet extends Http. Servlet { int n. IP = 0; String[] IPs = new String[1000]; public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { String ip = request. get. Remote. Host(); IPs[n. IP++] = ip; response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); out. println("<h 1> Han visitado este sitio </h 1> "); } } for (int i = 0; i < n. IP; i++) out. println("<hr> "+ IPs[i]); out. close(); Imprimir cada String separado por una línea horizontal

Solución con vector que contiene las IP Import util package import java. io. *;

Solución con vector que contiene las IP Import util package import java. io. *; import javax. servlet. http. *; import java. util. *; public class Addresses. Servlet extends Http. Servlet { Vector IPs = new Vector(); Create empty vector public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { Get IP and add it to the end String ip = request. get. Remote. Host(); IPs. add(ip); response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); out. println("<h 1> Han visitado este sitio </h 1> "); } } for (int i = 0; i < IPs. size(); i++) out. println("<hr> "+ IPs. element. At(i)); out. close(); Print every string to the browser separated with a horizontal bar

Usando un Archivo import java. io. *; import javax. servlet. http. *; public class

Usando un Archivo import java. io. *; import javax. servlet. http. *; public class Addresses. Servlet extends Http. Servlet { public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { String ip = request. get. Remote. Host(); Print. Writer file = new Print. Writer( new File. Writer(“ips. txt”, true)); file. println(ip); file. close(); response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); } } out. println("<h 1> Han visitado este sitio </h 1> "); Buffered. Reade infile = new Buffered. Reader( new File. Reader(“ips. txt”)); while(true) String linea = infile. read. Line(); if (linea == null) break; out. println(" "+ linea); } out. close();

Otro ejemplo • Modificar el ejemplo anterior para que en vez de repetir la

Otro ejemplo • Modificar el ejemplo anterior para que en vez de repetir la ip muestre cuantas veces ha visitado ese cliente al servlet – Solución 1: use un vector que contenga objetos de la clase Node, el cual contiene un String (para guardar el número IP) y un entero (para contar las visitas del cliente) public class Node { int count; String ip; Node(String x, int y) { ip = x; count = y; } }

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } aux = (Node)v. element. At(p); aux. count++; } } out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } out. close();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); Vector containing the “nodes” public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } aux = (Node)v. element. At(p); aux. count++; } } out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } out. close();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } - initialize response header - get writer to browser - get IP of client if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } aux = (Node)v. element. At(p); aux. count++; } } out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } out. close();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } Search for a Node in the vector containing a string with the ip of the client if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } aux = (Node)v. element. At(p); aux. count++; } } out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } out. close();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } If the ip was not there, create a new Node with that ip and a count = 0 aux = (Node)v. element. At(p); aux. count++; } } out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } out. close();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } aux = (Node)v. element. At(p); aux. count++; } } In any case, the Node containing the ip of the client will be at position p. We use it for retrieving the Node and incrementing the count variable. out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } out. close();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector();

public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Node aux; int p =0; while(p < v. size()) { aux = (Node)v. element. At(p); if (ip. equals(aux. ip)) break; p++; } if (p == v. size()) { aux = new Node(ip, 0); v. add(aux); out. println("agregado"); } aux = (Node)v. element. At(p); aux. count++; } } out. println("<h 1> Following clients visited this site </h 1> "); for (int i = 0; i < v. size(); i++) { aux = (Node)v. element. At(i); out. print("<hr> "+ aux. ip+" has been "+aux. count+" times here"); } Finally, retrieve each elemento of the out. close(); Vector printing the ip and count variables Fina

Exercise • Modificar el Show. Counts. Servlet para que muestre el que lo ha

Exercise • Modificar el Show. Counts. Servlet para que muestre el que lo ha visitado más

Solución public class Show. Counts. Servlet extends Http. Servlet { Vector v = new

Solución public class Show. Counts. Servlet extends Http. Servlet { Vector v = new Vector(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { …. Casi todo el programa se mantiene igual Solo cambia el output Node nmax = (Node)v. element. At(0); for (int i = 1; i < v. size(); i++) { Node aux = (Node)v. element. At(i); if (aux. count > nmax. count) nmax = aux; } } En vez de imprimir todos, buscamos el mayor } out. print(“ the client with highest number of visits is “+nmax. ip out. println(“and has been "+nmax. count+" times here"); out. close(); … y lo imprimimos

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable(); Create a new empty hastable public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Integer i = (Integer)h. get(ip); if (i == null) { i = new Integer(0); h. put(ip, i); } int ival = i. int. Value(); h. put(ip, new Integer(ival+1)); //replaces the older pair } } out. println("<h 1> Han visitado este sitio </h 1> "); Enumeration e = h. keys(); while (e. has. More. Elements()) { ip = (String)e. next. Element(); i = (Integer)h. get(ip); ival = i. int. Value(); out. print("<hr> "+ ip+" has been "+ival+" times here"); } out. close();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Integer i = (Integer)h. get(ip); if (i == null) { i = new Integer(0); h. put(ip, i); } Get client’s IP and use it to retrieve the associated information (count) int ival = i. int. Value(); h. put(ip, new Integer(ival+1)); //replaces the older pair } } out. println("<h 1> Han visitado este sitio </h 1> "); Enumeration e = h. keys(); while (e. has. More. Elements()) { ip = (String)e. next. Element(); i = (Integer)h. get(ip); ival = i. int. Value(); out. print("<hr> "+ ip+" has been "+ival+" times here"); } out. close();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Integer i = (Integer)h. get(ip); if (i == null) { i = new Integer(0); h. put(ip, i); } If there was no pair (ip, count) having this IP has key then we put a new one int ival = i. int. Value(); h. put(ip, new Integer(ival+1)); //replaces the older pair } } out. println("<h 1> Han visitado este sitio </h 1> "); Enumeration e = h. keys(); while (e. has. More. Elements()) { ip = (String)e. next. Element(); i = (Integer)h. get(ip); ival = i. int. Value(); out. print("<hr> "+ ip+" has been "+ival+" times here"); } out. close();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Integer i = (Integer)h. get(ip); if (i == null) { i = new Integer(0); h. put(ip, i); } At this point, i will contain the Integer containing the count associated to this ip. We get the int value We use it for incrementing the count value and replacing the older pair whith this new one int ival = i. int. Value(); h. put(ip, new Integer(ival+1)); //replaces the older pair } } out. println("<h 1> Han visitado este sitio </h 1> "); Enumeration e = h. keys(); while (e. has. More. Elements()) { ip = (String)e. next. Element(); i = (Integer)h. get(ip); ival = i. int. Value(); out. print("<hr> "+ ip+" has been "+ival+" times here"); } out. close();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Integer i = (Integer)h. get(ip); if (i == null) { i = new Integer(0); h. put(ip, i); } Get Enumeration object containing keys int ival = i. int. Value(); h. put(ip, new Integer(ival+1)); //replaces the older pair } } out. println("<h 1> Han visitado este sitio </h 1> "); Enumeration e = h. keys(); As long as there are elements while (e. has. More. Elements()) { ip = (String)e. next. Element(); Get the next key element (IP) i = (Integer)h. get(ip); ival = i. int. Value(); Get the associates info out. print("<hr> "+ ip+" has been "+ival+" times here"); } out. close(); Get int value in order to print it

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable();

public class Hash. Example. Servlet extends Http. Servlet { Hashtable h = new Hashtable(); public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws IOException, Servlet. Exception { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String ip = request. get. Remote. Host(); Integer i = (Integer)h. get(ip); if (i == null) { i = new Integer(0); h. put(ip, i); } Get Enumeration object containing keys int ival = i. int. Value(); h. put(ip, new Integer(ival+1)); //replaces the older pair } } out. println("<h 1> Han visitado este sitio </h 1> "); Enumeration e = h. keys(); As long as there are elements while (e. has. More. Elements()) { ip = (String)e. next. Element(); Get the next key element (IP) i = (Integer)h. get(ip); ival = i. int. Value(); Get the associates info out. print("<hr> "+ ip+" has been "+ival+" times here"); } out. close(); Get int value in order to print it