Università degli Studi di Modena e Reggio Emilia
Facoltà di Ingegneria – Reggio Emilia
CORSO DI
TECNOLOGIE E APPLICAZIONI WEB
Http con java, URL
Ing. Marco Mamei
Anno Accademico 2004-2005
M. Mamei - Tecnologie e Applicazioni Web
1
URL E CONNESSIONI
•
•
•
•
Sono un insieme di classi java usate per comunicare
tramite http (o altri protocolli applicativi standard) in
modo semplificato (ma meno flessibile) rispetto alle
socket.
Gestiscono automaticamente i dettagli del protocollo di
comunicazione (ad esempio, http).
La classe URL cattura il concetto di indirizzo Internet
(URL) nella forma standard del Web:
– http://localhost/index.html
– file:///autoexec.bat
– ...
Un oggetto URL si crea a partire dall’indirizzo che
rappresenta:
URL url = new URL("....");
e si usa per aprire una connessione verso tale indirizzo.
•
Per aprire una connessione, si invoca sul-l’oggetto URL
il metodo openConnection():
URLConnection c =
url.openConnection();
•
Il risultato è un oggetto URLConnection, che
rappresenta una “connessione aperta” con un server
Web
M. Mamei - Tecnologie e Applicazioni Web
2
–
in pratica, così facendo si è stabilito un canale di
comunicazione http verso l’indirizzo richiesto
M. Mamei - Tecnologie e Applicazioni Web
3
URL E CONNESSIONI
Per comunicare si recuperano dalla connessione i due
stream (di ingresso e di uscita) a essa associati, tramite i
metodi:
•
public InputStream getInputStream()
– restituisce lo stream di input da cui leggere i dati
(byte) che giungono dall’altra parte
•
public OutputStream getOutputStream()
– restituisce lo stream di output su cui scrivere i dati
(byte) da inviare all’altra parte
Poi, su questi stream si legge e si scrive come su
qualunque altro stream di byte.
Per la scrittura occorre però abilitare la connessione per
l’output. Questo si fa attraverso il comando seguente.
•
connection.setDoOutput(true);
M. Mamei - Tecnologie e Applicazioni Web
4
ESEMPIO DI USO DI URL 1
Connettersi a un URL dato e, nell’ipotesi che
esso invii testo, visualizzarne il contenuto.
import java.net.*;
import java.io.*;
public class URLConnectionReader
{
public static void main(String[] args) throws Exception
{
URL yahoo = new URL("http://www.yahoo.it");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(yc.getInputStream()));
String inputLine;
while((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
M. Mamei - Tecnologie e Applicazioni Web
5
ESEMPIO DI USO DI URL 2
Connettersi a un URL dato, inviare una richiesta http
con paramerti e ricevere il risultato (ad esempio una
pagina web).
import java.net.*;
import java.io.*;
public class URLConnectionWriter
{
public static void main (String[] args) throws Exception
{
URL url = new URL("http://localhost/midp/hits");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(
connection.getOutputStream());
out.println("string=ciao");
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String inputLine;
while((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
M. Mamei - Tecnologie e Applicazioni Web
6
ESEMPIO DI USO DI URL 2
La servlet che fa da controparte:
import java.io.*;
import java.util.*;
import javax.servlet.*;
public class Ese1 extends GenericServlet
{
public void service(ServletRequest request,
ServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
String field = null;
String value = null;
Enumeration flds = request.getParameterNames();
while(flds.hasMoreElements())
{
field= (String)flds.nextElement();
value= request.getParameter(field);
}
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println(value+"<br>");
out.println("</body>");
out.println("</html>");
}
}
NOTA: Se avessimo la possibilitá di trasformare in forma
grafica quello che il programma legge dall’URL avremmo
praticamente realizzato un Browser Web.
M. Mamei - Tecnologie e Applicazioni Web
7
SCENARI APPLICATIVI
Queste tecniche permettono di estendere gli scenari
applicativi delle servlet e delle altre tecnologie viste fin’ora.
Non siamo più vincolati ad accedere a una servlet tramite
form html e browser.
Possiamo realizzare il programma (anche non interattivo)
che meglio si adatta alle esigenze applicative.
Questo in generale apre la strada verso gli scenari di Web
service: “…un Web service può essere definito come
un’unità di applicazione logica che offre dati e servizi ad
altre applicazioni. Queste applicazioni accedono al Web,
attraverso protocolli standard quali HTTP e XML…”
Gli scenari applicativi associati vastissimi. Basti pensare che
tutto il concetto di e-commerce routa attorno a queste
tenologie.
M. Mamei - Tecnologie e Applicazioni Web
8
MOTIVAZIONE E VANTAGGI
Perché non possiamo utilizzare server e socket come quelle
che conoscevamo già?
Interoperabilità: utilizzando tecnologie standard (http e
xml) una servlet o un client sono facilmente rivendibili in altri
contesti.
Servizi aggiuntivi: Tomcat e in generale altri container
(middleware) offrono utili servizi aggiuntivi. Considerazioni
come: multithreading, comunicazione di rete, sciurezza, etc.
vengono gestite automaticamente e in maniera separata dal
container.
Inoltre, Tomcat è un sistema “improprio” per gestire web
service di questo tipo. Noi useremo Tomcat perché è
semplice e veloce, ma esistono container specifici (ad
esempio i server J2EE) che offrono servizi ancora più
potenti.
Le tecniche che vediamo sono comunque
riutilizzabili anche con questi altri sistemi.
M. Mamei - Tecnologie e Applicazioni Web
generali
9
ESEMPIO DI APPLICAZIONE 1/3
Vediamo un esempio di applicazione Web che utilizza
queste tecnologie.
Prendiamo la ditta SkatesTown che vende skateboards.
Questa ditta mantiene lo stato del suo magazzino in un file
xml strutturato come segue:
<? xml version=”1.0”?>
<products>
<product>
<id>947-TI</id>
<name>Titanium Glider</name>
<type>skateboard</type>
<desc>Street-style titanium skateboard.</desc>
<price>129.00</price>
<inStock>36</inStock>
</product>
…
…
</products>
SkatesTown dispone poi di una servlet per controllare lo
stato dell’inventario.
La servlet richiede due parametri all’interno della sua
invocazione http: id e quantity.
id=947-TI
quantity=12
M. Mamei - Tecnologie e Applicazioni Web
10
ESEMPIO DI APPLICAZIONE 2/3
Il programma della servlet non fa altro che analizzare il file
xml relativo al magazzino e controllare l’eventuale
disponibilità di un certo numero di pezzi di un dato articolo.
La servlet risponde con una pagina html formattata come
segue:
<html>
<body>
The item is available in the requested quantity.
</body>
</html>
oppure
<html>
<body>
The requested quantity is not available.<br>
Only 4 items in stock!
</body>
</html>
Il sistema mette a disposizione due modalità di accesso.
La prima è tramite browser e form HTML. Un operatore
umano compila una form e interroga la servlet che
restituisce la pagina HTML con il risultato.
La seconda è tramite un applicazione specifica che usa gli
URL. Questa accede alla servlet e automaticamente
controlla la disponibilità di almeno 5 elementi di tutti i
prodotti.
M. Mamei - Tecnologie e Applicazioni Web
11
ESEMPIO DI APPLICAZIONE 3/3
A questo punto un'altra servlet potrebbe essere creata per
gestire gli ordini degli elementi sotto scorta. Questa
potrebbe prevedere un’interfaccia browser per operatori
umani, ma anche essere acceduta dalla applicazione URL
precedente per ordinare in modo automatico tutti gli
elementi sotto scorta.
Note varie:
La sevlet potrebbe distinguere il suo comportamento sulla
base di chi l’ha invocata (ad esempio modificando
l’invocazione URL da quella della form html). In questo
modo potrebbe rispondere HTML al browser, XML
all’applicazione.
Il database relativo al magazzino potrebbe essere un vero
db. Attraverso il meccanismo JDBC, che vedremo, un’
applicazione java può accedere a un database.
Come fa un’applicazione URL a conoscere come invocare
una servet? Che parametri devono essere passati?
Possibilità di interrogare servlet che descrivono come
invocarne altre… (WSDL)
M. Mamei - Tecnologie e Applicazioni Web
12