Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Relevanta dokument
Innehåll. Socketar. Klient och serverprogrammering: Socketar Föreläsning 9. Klienter och servrar (som sagts tidigare ) Varför socketar

10 Kommunikation i Java

Lösningar för tenta 2 DAT043,

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Språkkonventioner och redigering av tal.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

JAVAUTVECKLING LEKTION 7

Fördjupad Java. Undantagshantering. Fel

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Att skriva till och läsa från terminalfönstret

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsnings 9 - Exceptions, I/O

Föreläsning 14. Filhantering

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

F4. programmeringsteknik och Matlab

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

Föreläsning 5 Meddelandesändning med TCP

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Kap J 7-1 Mer om arv. (superklass) (subklass)

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Objektorienterad programmering i Java

Lösningsförslag till tentamen

Föreläsning 3. Stack

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Objektorienterad Programmering (TDDC77)

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

FÖRSLAG TILL LÖSNINGAR, TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2, , kl

Laborationer, moment 4 5

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Innehåll Appletar i Java

F5 Meddelandesändning med TCP

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

Föreläsning 5 Meddelandesändning med TCP

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Internetprogrammering En kort Introduktion

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Tentamen Nätverksprogrammering Lösningsförslag

Björn Eiderbäck Kort om grundläggande nätverkskoncept Internet Socketar

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

Datakommunikation och Internet

Laborationer, moment 4 5

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

System.out.println("Jaså du har "+ antaldollar + " stycken.");

Föreläsning 3. Stack

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Programmeringsteknik för Bio1 och I1. Dagens program. Så här tillämpar vi det på J-uppgifterna. Allmänna programmeringstips. Övningsgrupp 3 (Sal E33)

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

Objektorienterad programutveckling, fk

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Kopiering av objekt i Java

Tentamen Nätverksprogrammering Lösningsförslag

Input. Programmering. Andra källor

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lösningsförslag till tentamen

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

F2 Java I/O - strömmar Meddelandesändning med TCP

Tentamen Programmering fortsättningskurs DIT950

1 Grafiska komponenter, händelsehantering

DAT043 Objektorienterad Programmering

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 9-10 Innehåll

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

List.java. List.java. Printed by Tom Smedsaas

Tentamen , Grundläggande programmering i Java

Lösningsförslag till tentamen

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

OOP Objekt-orienterad programmering

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Parallellism, återblick

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Transkript:

Hämta data mha Föreläsning 2b För För mer mer info info se se tex texharold, Hall Halleller Tut Tut (den (den senare senare är är ganska ganska rättfram). Innehåll Klassen URL Arbeta med, exempel Hur hittar jag info om protokoll? Lite info om laborationerna kompilera, köra, (bas-) exempel Referenser Harold, Java Network Programming, Elliotte Harold Ince, Developing Distributed and E-commerce Applications Hall, "CORE Web Programming" Tut, dvs SUNs tutorial (~kurs) om på nätet, se http://java.sun.com/docs/books/tutorial/networking/urls/index.html previous next Klassen URL I Java finns det en klass java.net.url som hanterar 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.nada.kth.se/"); En URL kan skapas relativt en annan URL ip = new URL(gt, "kurser/kth/2d1390/default.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/2d1390/default.html"); previous next 2 Björn Eiderbäck 1999-2003 1

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 previous next 3 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 Läs innehållet och i det här fallet casta till lämplig typ try{ content = (BufferedInputStream)url.getContent(); catch(ioexception e) { Skapa läsström Läs radvis BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); String line; while((line = readline(buffer))!= null) System.out.println(line); previous next 4 Björn Eiderbäck 1999-2003 2

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 previous next 5 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 previous next 6 Björn Eiderbäck 1999-2003 3

exempel med indirekt URLConnection Man kan öppna en läsström med openstream() 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(); previous next 7 vi kan också använda URLConnection mer explicit 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) previous next 8 Björn Eiderbäck 1999-2003 4

Några exempel Nu följer tre exempel på lite olika användning av 1 Hämta innehållet från vad som pekas ut av en URL och skriv det antingen på skärmen eller på en fil 2 Skriv information om innehållet i den URL som pekas ut 3 Använd en URL och mailto: för att skicka elektronisk post previous next 9 Hämta innehållet i en URL public class GetURL { public static void main(string[] args) { Deklarera in- och InputStream in = null; utmatningsströmmar OutputStream out = null; try { if ((args.length!= 1) && (args.length!= 2)) throw new IllegalArgumentException("Wrong number of arguments"); Skapa URL öppna inström välj typ av utström (fil eller terminal) URL url = new URL(args[0]); in = url.openstream(); if (args.length == 2) out = new FileOutputStream(args[1]); else out = System.out; previous next 10 Björn Eiderbäck 1999-2003 5

kopiera innehållet till utström stäng alltid strömmarna 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) { previous next 11 Skriv information om URL via URLConnection import java.util.date; public class GetURLInfo { public static void printinfo(url url) throws IOException { Använd URLConnection c = url.openconnection(); URLConnection 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())); previous next 12 Björn Eiderbäck 1999-2003 6

Om det är en HTTPanslutning 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()); Skapa URL och skriv ut info 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 <url>"); previous next 13 Skicka e-post via en URL Om maildator angiven så public class SendMail { tala om det för systemet public static void main(string[] args) { try { if (args.length >= 1) System.getProperties().put("mail.host", args[0]); Inmatningsström från terminal BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); Be användaren om brevhuvud System.out.print("From: "); String from = in.readline(); System.out.print("To: "); String to = in.readline(); System.out.print("Subject: "); String subject = in.readline(); Notera att likheten med att skicka brev i ett vanligt program för elektronisk post OBS i Lab 3 ska ni inte göra så här utan använda socketar och SMTP! previous next 14 Björn Eiderbäck 1999-2003 7

Skapa en mailto:-url URL u = new URL("mailto:" + to); URLConnection c = u.openconnection(); Vi vill skriva på URLen så vi använder en URLConnection c.setdoinput(false); // Ingen inmatning från URLen c.setdooutput(true); // men däremot utmatning till den System.out.println("Connecting"); System.out.flush(); Anslut Utmatningsström skapas c.connect(); PrintWriter out = new PrintWriter(new OutputStreamWriter(c.getOutputStream())); Skriv sidhuvud på URLen 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) previous next 15 Be användaren skriva brevkroppen Läs brevkropp och skriv den på URLen 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>]"); previous next 16 Björn Eiderbäck 1999-2003 8

Vi ser också på SUNs tutorial om http://java.sun.com/docs/books/tutorial/networking/index.html Och speciellt http://java.sun.com/docs/books/tutorial/networking/urls/index.html previous next 17 Hur hittar jag info om protokoll? Vi tittar på RFC (Request For Comments) Tex via http://www.ietf.org/rfc.hml Vi tittar kort på tex SMTP, IMAP, NNTP Några länkar från boken kan vi också besöka previous next 18 Björn Eiderbäck 1999-2003 9