Presentation laddar. Vänta.

Presentation laddar. Vänta.

Next previous Innehåll Klassen URL Arbeta med URLer, exempel Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming"

Liknande presentationer


En presentation över ämnet: "Next previous Innehåll Klassen URL Arbeta med URLer, exempel Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming""— Presentationens avskrift:

1 next previous Innehåll Klassen URL Arbeta med URLer, exempel Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming" Tut, dvs SUNs tutorial (~kurs) om URLer på nätet, se http://java.sun.com/docs/books/tutorial/networking/urls/index.html http://java.sun.com/docs/books/tutorial/networking/urls/index.html Hämta data mha URLer Föreläsning 7 För mer info se tex Harold, Hall eller Tut (den senare är ganska rättfram). För mer info se tex Harold, Hall eller Tut (den senare är ganska rättfram).

2 previous next 2 Nätverk och internet grunder 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 gt = new URL(”http://www.gt.kth.se/"); En URL kan skapas relativt en annan URL ip = new URL(gt, ”education/kurspm/4K1525/default.html"); Generellt kan vi ange både protokoll, webplats, fil och portnummer separat URL nada = new URL(”http”, ” www.gt.kth.se”, 80, ”education/kurspm/4K1525/default.html");

3 previous next 3 Nätverk och internet grunder 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 Nätverk och internet grunder 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 Nätverk och internet grunder... 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 Nätverk och internet grunder 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 Nätverk och internet grunder …exempel med indirekt URLConnection... Man kan öppna en läsström med 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 Nätverk och internet grunder … 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 Nätverk och internet grunder 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 Nätverk och internet grunder 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 Nätverk och internet grunder... 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 Nätverk och internet grunder 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 Nätverk och internet grunder... 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 Nätverk och internet grunder 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 Nätverk och internet grunder... 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 Nätverk och internet grunder... 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 Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming""

Liknande presentationer


Google-annonser