• Nem Talált Eredményt

Internetes erőforrások elérése

In document Szoftverfejlesztés II. (Pldal 104-109)

7. A hálózatkezelés osztályai

7.2.4 Internetes erőforrások elérése

Az internetes erőforrásokat különböző protokollokon keresztül lehet elér-ni. Ilyen protokoll pl. az FTP (File Transfer Protocol), és a HTTP (HyperText Transfer Protocol) is. Ezeket az erőforrásokat el lehet érni az egységes erőforrásazonosítókon (Uniform Resource Locator – URL) keresztül. Az URL nem csak fájlokra mutathat, hanem pl. adatbázis lekérdezesekre is. Az URL ma-gában foglalja:

 a számítógép nevét, amelyen az erőforrás található

 a protokollazonosítót, amelyen keresztül az erőforrás elérhető

 az erőforrás azonosítására szolgáló részeket

Például a http://www.ektf.hu/index.php erőforrás URL-jéből látható, hogy a http-protokollon keresztül, a www.ektf.hu hoszton (számítógépen) hivatko-zunk az index.php fájlra. Javában az URL-ek kezelésére és műveletek végzésére az URL, URLConnection és HttpURLConnection osztályok használható-ak. Mindkét osztály alkalmas arra, hogy beolvassuk az URL tartalmát (vagyis amit kimenetként generál), de az URLConnection-nel az erőforrásnak jóval több jellemzőjéhez lehet hozzáférni és lehetőség van az erőforrás felé adatkül-désre (pl. HTTP POST).

Az URL osztály

Egy URL objektum lehetővé teszi egy hálózati erőforrás elérését. URL ob-jektum létrehozása a legegyszerűbben az őt leíró URL sztring segítségével tehe-tő meg. Pl.

1 URL u1=new URL("http://www.ektf.hu/index.php");

Az ilyen formában megadott URL-t abszolút URL-nek nevezzük. Létrehoz-hatunk URL-objektumokat relatív URL-ekkel is. Ilyenkor az egyik URL-objektumot használjuk fel arra, hogy egy másikat előállítsunk. Az első paramé-ter a bázis URL (vagy alap URL), a második egy sztring, amely a bázison belüli erőforrásra hivatkozik.

1 URL ekf=new URL("http://www.ektf.hu");

2 URL startPage=new URL(ekf,"index.php");

Amennyiben nem ismerjük a teljes URL-t, csak az összetevőit, akkor hasz-nálhatjuk még ezt a fajta megadási módot is, ahol első paraméter a protokoll, majd a hoszt, portszám és az erőforrás elérési útja.

1 URL ekf=new

URL("http","www.ektf.hu",80,"index.php");

Az URL-objektumok komponenseit lekérdezhetjük a következő metódu-sokkal:

 String getProtocol(): az URL protokoll komponense

 String getHost(): az URL hoszt komponense

 int getPort(): az URL portja, -1-et ad, ha a port nincs beállítva

 String getFile(): az URL fájlneve

 String getRef(): az URL horgonya (pl. index.html#top esetén a top)

A boolean sameFile(URL u) metódus true-t ad vissza, ha az ak-tuális és a paraméterben megadott URL ugyanazt az erőforrást azonosítja.

Az URL-lel megadott erőforráshoz többféleképpen férhetünk hozzá:

 Object getContent(): többnyire egy InputStream folyamot ad vissza (Object típusként), amelyen keresztül hozzáférhetünk az URL tartalmához

 InputStream openStream(): egy InputStream-et ad vissza, amellyel kiolvasható az URL tartalma

 URLConnection openConnection(): egy URLConnection-t ad vissza, amellyel hozzáférhetünk az erőforrás jellemzőihez is

Nézzük meg a gyakorlatban, hogy tudjuk egy URL tartalmát kiolvasni. Az URL openStream metódusát fogjuk használni, és egy InputStreamReader-t közbeiktatva egy BufferedReader objektumon keresztül soronként fogjuk olvasni azt és fájlba írni:

1 URL ekf=new URL("http://java.sun.com");

2 BufferedReader input=new BufferedReader(new InputStreamReader(ekf.openStream()));

3 FileWriter output=new FileWriter("java.html");

4 String line;

5 while ((line=input.readLine())!=null) { 6 output.write(line);

7 }

8 output.close();

9 input.close();

Az URLConnection osztály

Az URLConnection osztály több lehetőséget biztosít, mint az URL osz-tály. Amennyiben már van URL-objektumunk, akkor annak az openConnection metódusával hozhatunk létre az URL-re vonatkozó URLConnection objektumot. Az URL-lel azonosított erőforrás tartalmához 3-féleképpen férhetünk hozzá:

 Object getContent(): az URL tartalmát adja vissza

 InputStream getInputStream(): egy InputStream-et ad vissza, amelyen keresztül olvashatjuk az URL tartalmát

 OutputStream getOutputStream(): egy OutputStream-en keresztül írhatunk az URL tartalmára (pl. HTML űrlapok esetén)

A következő példában FTP-n keresztül töltünk le egy állományt:

1 URL local=new URL("ftp://localhost/eloadas.pptx");

2 FileOutputStream output=new FileOutputStream(local. getFile());

3 URLConnection conn=local.openConnection();

4 InputStream input=conn.getInputStream();

5 byte[] buffer=new byte[1024];

6 int bytesRead;

7 while ((bytesRead=input.read(buffer))!=-1) { 8 output.write(buffer,0,bytesRead);

9 }

10 output.close();

11 input.close();

Az URLConnection objektum esetén a következő hasznos metódusok állnak rendelkezésre, ezek főként HTTP URL-ek esetén hasznosak, mivel http-fejléc alapján működnek:

 String getContentEncoding(): az erőforrás karakterkészletét adja vissza

 String getContentLength(): az erőforrás méretét adja vissza

 String getContentType(): az erőforrás típusát adja vissza

 long getDate(): az erőforrás letöltésének dátuma

 long getLastModified(): az erőforrás utolsó módosításának dátuma

 String getHeaderField(String field): az argumentum-ban megadott (field) http fejléc értékét adja vissza

 void setDoOutput(boolean b): true-t megadva jelezzük, hogy írásra is használjuk az URLConnection objektumot

 void setUseCaches(boolean b): true-t megadva az URL talmát gyorsítótárazza, így újraletöltés esetén a cache-ből kapjuk a tar-talmát

Nézzük meg a már jól ismert prímtényezős felbontásos példánkat olyan módon, hogy a felbontandó számot egy PHP szkriptnek fogjuk elküldeni HTTP POST segítségével, majd a szkript előállítja a felbontást, és ezt fogja a progra-munk visszaolvasni. A Java kód a következő:

1 URL url=new

URL("http://localhost/java/index.php");

2 URLConnection conn=url.openConnection();

3 conn.setDoOutput(true);

4 OutputStreamWriter output=new

OutputStreamWriter(conn.getOutputStream());

5 output.write("value=12");

6 output.close();

7 BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream()));

8 String line;

9 while ((line = input.readLine()) != null) { 10 System.out.println(line);

11 }

12 input.close();

A PHP kód pedig így néz ki:

1 function primeResolution($value) { 2 $i=2;

3 $result='';

4 while ($value!=1) {

5 while ($value % $i==0) { 6 $result.=$i.' ';

7 $value/=$i;

8 } 9 $i++;

10 }

11 return $result;

12 }

13 if (isset($_POST['value'])) {

14 echo primeResolution($_POST['value']);

15 }else{

16 echo 'hibas formatum';

17 }

7.3 ÖNELLENŐRZŐ KÉRDÉSEK

1. Jellemezze az összeköttetés-alapú és összeköttetés-mentes hálózato-kat, mondjon rá konkrét protokollmegvalósításokat!

2. Milyen osztályok állnak rendelkezésre Javában az előbbi két kommuni-káció megvalósítására?

3. Milyen lehetőségek vannak az internetes erőforrások elérésére?

In document Szoftverfejlesztés II. (Pldal 104-109)