Presentation laddar. Vänta.

Presentation laddar. Vänta.

Next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming”

Liknande presentationer


En presentation över ämnet: "Next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming”"— Presentationens avskrift:

1 next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming” Tut, dvs SUNs tutorial (~kurs) om URLer på nätet, se Hämta data mha URLer Föreläsning 7 Se också Harold då beskrivningen där är ganska fullständig. Se också Tut som är ganska rättfram. Se också Harold då beskrivningen där är ganska fullständig. Se också Tut som är ganska rättfram.

2 previous next 2 Hämta data mha URLer Klassen URL I Java finns det en klass java.net.URL som hanterar URLer Med denna klass kan man enkelt hämta filer från webservrar En absolut URL skapas på följande sätt URL nada = new URL(”http://www.nada.kth.se/"); En URL kan skapas relativt en annan URL ip = new URL(nada, ”kurser/kth/2D4334/index.html"); Generellt kan vi ange både protokoll, webplats, fil och portnummer separat URL nada = new URL(”http”, ”www.nada.kth.se”, 80, ”kurser/kth/2D4334/index.html");

3 previous next 3 Hämta data mha URLer Kastande av undantag vid konstruktion av URL … Då vi skapar en URL måste vi ta hand om undantaget MalformedURLException Så vi konstruerar en URL på följande sätt try { URL myURL = new URL(...) } catch (MalformedURLException e) {... // felhantering här... } dvs ta alltid ta hand om undantaget

4 previous next 4 Hämta data mha URLer Läsa data mha av URL … Vi kan med hjälp av en URL direkt be om innehållet i den fil den pekar ut –använd metoden getContent() –Observera att getContent() returnerar ett objekt som beror av innehållet, eller fallerar om den inte kan tolka vad som finns där try{ content = (BufferedInputStream)url.getContent(); } catch(IOException e) {} BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); String line; while((line = readLine(buffer)) != null) System.out.println(line); Läs innehållet och i det här fallet ”casta” till lämplig typ Skapa läsström Läs radvis

5 previous next 5 Hämta data mha URLer... där readLine kan se ut ungefär så här: public String readLine(BufferedReader b) { String line = null; try{ line = b.readLine(); } catch(IOException e) {} return line; } Mer generellt kan vi läsa innehållet via en URLConnection, se nästa sida

6 previous next 6 Hämta data mha URLer Läsa och skriva mha URLConnection... Om vi från en URL skapar en instans av en subklass till den abstrakta klassen URLConnection. Denna instans ger oss möjlighet att kontrollera vad som skall hända i lite mer detalj –Bland annat kan vi förutom läsa information från URLen också där det är möjligt skriva information till den –Vissa metoder i URL använder en URLConnection för att ”lösa sina uppgifter”, tex metoden getContent() –Se paketet sun.net.www.protocol för konkreta klasser, bland andra FtpURLConnection HttpURLConnection MailToURLConnection

7 previous next 7 Hämta data mha URLer …exempel med indirekt URLConnection... Man kan öppna en läsström men openStream() import java.net.*; import java.io.*; public class URLReader { public static void main(String[] args) throws Exception { URL nada = new URL("http://www.nada.kth.se/"); BufferedReader in = new BufferedReader( new InputStreamReader(nada.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); }

8 previous next 8 Hämta data mha URLer … vi kan också använda URLConnection mer explicit import java.net.*; import java.io.*; public class URLConnectionReader { public static void main(String[] args) throws Exception { URL nada = new URL("http://www.nada.kth.se/"); URLConnection nc = nada.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( nc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } Om vi vill skriva kan vi använda URLConnections:s getOutputStream() (se Tut)

9 previous next 9 Hämta data mha URLer Några exempel Nu följer tre exempel på lite olika användning av URLer 1Hämta innehållet från vad som pekas ut av en URL och skriv det antingen på skärmen eller på en fil 2Skriv information om innehållet i den URL som pekas ut 3Använd en URL och mailto: för att skicka elektronisk post

10 previous next 10 Hämta data mha URLer Hämta innehållet i en URL import java.io.*; import java.net.*; public class GetURL { public static void main(String[] args) { InputStream in = null; OutputStream out = null; try { if ((args.length != 1) && (args.length != 2)) throw new IllegalArgumentException("Wrong number of arguments"); URL url = new URL(args[0]); in = url.openStream(); if (args.length == 2) out = new FileOutputStream(args[1]); else out = System.out; Deklarera in- och utmatningsströmmar Skapa URL öppna inström välj typ av utström (fil eller terminal)

11 previous next 11 Hämta data mha URLer... byte[] buffer = new byte[4096]; int bytes_read; while((bytes_read = in.read(buffer)) != -1) out.write(buffer, 0, bytes_read); } catch (Exception e) { System.err.println(e); System.err.println("Usage: java GetURL [ ]"); } finally { try { in.close(); out.close(); } catch (Exception e) {} } kopiera innehållet till utström stäng alltid strömmarna

12 previous next 12 Hämta data mha URLer Skriv information om URL via URLConnection import java.net.*; import java.io.*; import java.util.Date; public class GetURLInfo { public static void printinfo(URL url) throws IOException { URLConnection c = url.openConnection(); c.connect(); System.out.println(" Content Type: " + c.getContentType()); System.out.println(" Content Encoding: " + c.getContentEncoding()); System.out.println(" Content Length: " + c.getContentLength()); System.out.println(" Date: " + new Date(c.getDate())); System.out.println(" Last Modified: " + new Date(c.getLastModified())); System.out.println(" Expiration: " + new Date(c.getExpiration())); Använd URLConnection

13 previous next 13 Hämta data mha URLer... if (c instanceof HttpURLConnection) { HttpURLConnection h = (HttpURLConnection) c; System.out.println(" Request Method: " + h.getRequestMethod()); System.out.println(" Response Message: " + h.getResponseMessage()); System.out.println(" Response Code: " + h.getResponseCode()); } public static void main(String[] args) { try {printinfo(new URL(args[0])); } catch (Exception e) { System.err.println(e); System.err.println("Usage: java GetURLInfo "); } Om det är en HTTP- anslutning skriv ut lite mer info Skapa URL och skriv ut info

14 previous next 14 Hämta data mha URLer Skicka e-post via en URL import java.io.*; import java.net.*; public class SendMail { public static void main(String[] args) { try { if (args.length >= 1) System.getProperties().put("mail.host", args[0]); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("From: "); String from = in.readLine(); System.out.print("To: "); String to = in.readLine(); System.out.print("Subject: "); String subject = in.readLine(); Om maildator angiven så tala om det för systemet Inmatningsström från terminal Be användaren om brevhuvud Notera att likheten med att skicka brev i ett vanligt program för elektronisk post

15 previous next 15 Hämta data mha URLer... URL u = new URL("mailto:" + to); URLConnection c = u.openConnection(); c.setDoInput(false); // Ingen inmatning från URLen c.setDoOutput(true); // men däremot utmatning till den System.out.println("Connecting..."); System.out.flush(); c.connect(); PrintWriter out = new PrintWriter(new OutputStreamWriter(c.getOutputStream())); out.println("From: \"" + from + "\" "); out.println("To: " + to); out.println("Subject: " + subject); out.println(); // vi avslutar med en tom rad (som indikerar att brevhuvudet är klart) Utmatnings- ström skapas Anslut Skapa en ”mailto:-url” Skriv sidhuvud ”på URLen” Vi vill skriva på “URLen” så vi använder en URLConnection

16 previous next 16 Hämta data mha URLer... System.out.println("Enter the message. " + "End with a '.' on a line by itself."); String line; for(;;) { line = in.readLine(); if ((line == null) || line.equals(".")) break; out.println(line); } out.close(); System.out.println("Message sent."); System.out.flush(); } catch (Exception e) { System.err.println(e); System.err.println("Usage: java SendMail [ ]"); } Läs brevkropp och skriv den på ”URLen” Be användaren skriva brev- kroppen


Ladda ner ppt "Next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming”"

Liknande presentationer


Google-annonser