Ejemplo 4 Modificar el servlet contador de modo






















- Slides: 22
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. 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 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 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. *; 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 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 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 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(); 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 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 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 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 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 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 visitado más
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(); 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 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 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 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 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 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