La solució de l’exercici la podeu descarregar en aquest
.
Començarem l’activitat creant un nou projecte Maven. Aneu a File / New Project / Maven / Web Application. Si voleu, esborreu el fitxer index.php, ja que no el necessitarem. A continuació, creeu un servlet nou i modifiqueu la funció processRequest
perquè contingui el següent codi:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
response.setContentType("text/html");
response.setContentType("text/html;charset=UTF-8");
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Capçalera de la resposta</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Capçalera de la resposta...\n</h1>");
out.println("<h3>Capçalera de la resposta del servidor ioc.xtec.cat en accedir al web: \n</h3>");
out.println("<table width=\"100%\" border=\"1\" align=\"center\">\n");
out.println("<tr bgcolor=\"#1acff6\">\n");
out.println("<th>Nom del paràmetre de la capçalera</th><th>Valor(s)</th>\n");
out.println("</tr>\n");
URL obj
= new URL("http://ioc.xtec.cat"); Map
<String, List
<String
>> map
= conn.
getHeaderFields();
for (Map.
Entry<String, List
<String
>> entry
: map.
entrySet()) { out.print("<tr><td>" + paramName + "</td>\n");
out.println("<td> " + entry.getValue() + "</td></tr>\n");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
En executar el servlet anterior us apareixerà la informació que podeu veure en la figura:
La figura ens mostra tot un llistat de paràmetres que el servlet ha rebut en enviar una petició al servidor ioc.xtec.cat.
Els paràmetres que s’han rebut son:
keep-Alive
: indica amb el valor timeout
el temps que el servidor mantindrà la connexió oberta mentre no s’enviï cap altra petició. I amb el valor max
indica el nombre màxim de peticions que admet del client per a aquesta connexió.
null - HTTP1.1/ 200 ok
: indica el protocol que ha fet servir per a la connexió (http 1.1) i l’estat (200) de la connexió (OK).
Server
: el servidor web que ha generat la resposta de la petició.
Connection
: l’estat de la connexió. En aquest cas es queda oberta perquè el client continuï fent peticions.
Last-Modified
: l’ultima vegada que es va modificar la pàgina web que s’ha demanat.
Date
: dia i hora en què la resposta va ser enviada.
Accept-Ranges
: és la unitat mínima d’informació que s’envia. Normalment, la informació s’envia en blocs de X bits. En aquest cas, envia la informació agrupada en bytes.
Cache-Contol
: informa el servidor durant quants segons la resposta és vàlida.
ETag
: correspon a l’identificador del recurs demanat.
Set-Cookie
: correspon a la cookie que el servidor emmagatzema a l’ordinador del usuari
Expires
: indica el dia i la hora fins a la qual la resposta és vàlida.
Content-length
: indica la longitud, en octets, del body de la pàgina demanada.
Content-Language
: indica l’idioma de la pàgina web que s’ha demanat.
Content-Type
: indica el tipus d’informació que s’envia al client. Exemple: text/html.
Podeu veure tots els paràmetres que es poden rebre en aquest enllaç.
Per crear una connexió HTTP a un servidor web s’ha fet servir aquest codi:
URL obj
= new URL("http://ioc.xtec.cat");
Una vegada s’ha establert la connexió es pot demanar la capçalera que envia el servidor de l’IOC amb la següent instrucció:
Map
<String, List
<String
>> map
= conn.
getHeaderFields();
Retorna un conjunt de dades que té l’estructura clau:valor
, on la clau és el primer paràmetre i el valor és una llista de valors. Per recórrer aquesta estructura es fa servir un bucle de tipus foreach. A Java, aquests bucles s’implementen de la següent manera:
for (Map.
Entry<String, List
<String
>> entry
: map.
entrySet()) {
}
La variable entry
a cada iteració tindrà un parell clau:valor
diferent de l’objecte map
.
Per accedir a la clau, que correspon al nom del paràmetre enviat a la capçalera de la resposta, s’utilitza el següent codi:
Per obtenir el valor o valors associats al paràmetre anterior s’utilitza la següent instrucció:
out.println("<td> " + entry.getValue() + "</td></tr>\n");
Mentre es van recuperant els valors, es va construint la taula que el servlet enviarà al client.