1 / 16

Hämta data mha URLer Föreläsning 7

Innehåll Klassen URL Arbeta med URLer, exempel. 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. Speciella referenser (som används i här) Harold , dvs kursboken ”Java Network Programming”

uriah
Download Presentation

Hämta data mha URLer Föreläsning 7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Innehåll Klassen URL Arbeta med URLer, exempel Hämta data mha URLerFöreläsning 7 Se också Harold då beskrivningen där är ganska fullständig. Se också Tut som är ganska rättfram. • 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 http://java.sun.com/docs/books/tutorial/networking/urls/index.html

  2. 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. 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. 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. ... 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. 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. …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. … 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. Några exempel • Nu följer tre exempel på lite olika användning av URLer • Hämta innehållet från vad som pekas ut av en URL och skriv det antingen på skärmen eller på en fil • Skriv information om innehållet i den URL som pekas ut • Använd en URL och mailto: för att skicka elektronisk post

  10. 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- ochutmatningsströmmar Skapa URL öppna inström välj typ avutström(fil ellerterminal)

  11. ... kopiera innehållet till utström 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 <URL> [<filename>]"); } finally { try { in.close(); out.close(); } catch (Exception e) {} } } } stäng alltid strömmarna

  12. 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. ... Om det är en HTTP- anslutning skriv ut lite mer info 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(newURL(args[0])); } catch (Exception e) { System.err.println(e); System.err.println("Usage: java GetURLInfo <url>"); } } } Skapa URL och skriv ut info

  14. 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. ... Skapa en ”mailto:-url” Vi vill skriva på “URLen” så vi använder enURLConnection 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 + "\" <" + System.getProperty("user.name") + "@" + InetAddress.getLocalHost().getHostName() + ">"); out.println("To: " + to); out.println("Subject: " + subject); out.println(); // vi avslutar med en tom rad (som indikerar att brevhuvudet är klart) Anslut Utmatnings- ström skapas Skriv sidhuvud ”på URLen”

  16. ... Be användaren skriva brev- kroppen 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 [<mailhost>]"); } } } Läs brevkropp och skriv den på ”URLen”

More Related