Java е език за програмиране от високо ниво, който още от самото си създаване е бил силно ориентиран към работа с Интернет. Извличането на ресурси от WWW с Java може да бъде изключително лесно, ако използваме класа java.net.URL, но преди да видим как става това, нека си изясним какво е това URL.
Какво е URL
Както при пощенските услуги, за доставяне на някаква поща е необходим адреса на получателя (държава, град, улица, номер и т.н.), така и в Интернет, в рамките на глобалната разпределена информационна система World Wide Web (WWW), за достъп до някакъв ресурс е необходим неговият адрес. Адресите на ресурси във WWW се наричат URL. URL е съкращение от Uniform Resource Locator – единен адрес на ресурс и има следния формат:
protocol://host[:port]/[resource]
Protocol е протоколът, по който е достъпен ресурсът. Може да бъде http, ftp, https и др.
Host е IP адресът или името на машината, от която е достъпен ресурсът, примерно www.nakov.com или 208.185.127.162.
Port е незадължително поле, което указва номера на порта на машината, зададена в полето host, примерно 80 или 8080. Ако номер на порт не е зададен, се използва портът по подразбиране за дадения протокол, например 80 за HTTP, 21 за FTP, 443 за HTTPS и т.н.
Resource е пълното име на искания ресурс, като се включва и пътя до него. Ако не е зададен, се използва подразбиращият се ресурс. Например ако URL-ът на ресурса, който искаме да извлечем, е http://www.nakov.com/about/CV-Svetlin-Nakov.html, протоколът е http, хостът е www.nakov.com, портът не е зададен и се подразбира че е стандартния за http – 80, а ресурсът е /about/CV-Svetlin-Nakov.html, като /about/ е пътят до ресурса, а CV-Svetlin-Nakov.html е името му. Пътят /about/ до ресурса се нарича още виртуална директория на Web-сървъра.
Как можем да извлечем в Java ресурс по даден URL
Всички ние всекидневно използваме URL адреси за достъп до различни сайтове докато си сърфираме из Интернет. Когато използваме стандартен Web-браузър, обикновено пишем в полето за адрес URL адреса на сайта, който искаме да посетим и натискаме бутона за извличане на зададения адрес.
Когато работим с Java нещата са подобни – отваряме URL връзка като създаваме обект от класа java.net.URL, задаваме адреса на ресурса, от който се интересуваме и го извличаме използвайки стандартен входен поток. Да илюстрираме това с един малък пример – програма, която извлича документа http://www.nakov.com/about/CV-Svetlin-Nakov.html и го отпечатва на стандартния изход:
RetrieveURLExample.java
|
import java.net.*;
import java.io.*;
public class RetrieveURLExample {
public static void main(String[] args) throws IOException {
URL url = new URL(
"http://www.nakov.com/about/CV-Svetlin-Nakov.html");
BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null)
System.out.println(line);
in.close();
}
}
|
Кодът е съвсем кратък и ясен – създаваме обект от класа URL, като му подаваме адреса на ресурса, до който искаме да установим достъп, след което отваряме входен поток за четене на този ресурс с метода openStream() и от този поток прочитаме целия ресурс ред по ред. В случая разчитаме, че ресурсът е текстов документ и затова го четем с текстов поток. Ако трябваше да извлечем ресурс, който не е текстов, примерно картинка, трябваше да го четем с бинарен поток.
Класът URL, заедно с класа URLConnection могат да се използват не само за четене на ресурси, но и за писане в ресурси. При писане в ресурс на сървъра, който предоставя този ресурс се изпраща записаната от нас информация, оформена съгласно протокола, по който е достъпен този ресурс. Ето един пример как може да се направи това:
AltaVistaSearch.java
|
import java.io.*;
import java.net.*;
public class AltaVistaSearch {
public static void main(String[] args)
throws Exception {
URL url = new URL("http://www.altavista.com/search");
// Send request
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(
connection.getOutputStream());
String query =
URLEncoder.encode("Svetlin Nakov", "UTF-8");
out.println("q=" + query);
out.close();
// Retrieve response
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null)
System.out.println(line);
in.close();
}
}
|
В примера се осъществява достъп до търсачката AltaVista, като й се задава да търси фразата „Svetlin Nakov”. Понеже търсачката работи по протокол HTTP, е необходимо всичко, което й се изпраща, да се кодира съгласно HTTP стандарта, така че да бъде разпознато коректно от Web сървъра. За целта се използва класа URLEncoder, с който параметрите се кодират по стандарта за URL. След това се отваря изходен поток към ресурса, през който на заявката й се подават кодираните параметри и накрая се отваря входен поток за четене от ресурса за да се прочете резултатът от извършеното в AltaVista търсене. За писане в URL се използва обект от класа URLConnection, който се взима с метода openConnection().
Писането писане в URL ресурс, достъпен по протокол HTTP на практика означава да се изпрати HTTP POST заявка към дадения ресурс, като се дава възможност да се изпратят и параметри. В нашия пример на сървъра www.altavista.com му се задава HTTP POST заявка, която съдържа адреса на динамичния ресурс /search, на който се задава един единствен параметър с име q и стойност Svetlin Nakov, кодирана в UTF-8.
|
Национална академия по разработка на софтуер
|
Лекторите
» Светлин Наков е преподавател по съвременни софтуерни технологии в СУ “Св. Климент Охридски”.
Той е автор на десетки научни и технически публикации и няколко книги, свързани с разработката на софтуер, заради което е търсен лектор и консултант.
През 2004 г. получава наградата "Джон Атанасов" от президента на България Георги Първанов за приноса му към развитието на информационните технологии и информационното общество.
» Мартин Кулов е изпълнителен директор във фирма “Код Атест”, където разработва проекти за повишаване качеството на софтуерните продукти в България чрез автоматизация на процесите и внедряване на системи за управление на качеството.
Мартин е опитен лектор и сертифициран от Майкрософт разработчик по програмите MCSD и MCSD.NET.
|
Академията
» Национална академия по разработка на софтуер (НАРС) е център за професионално обучение на софтуерни специалисти.
» НАРС провежда задълбочени курсове по разработка на софтуер и съвременни софтуерни технологии.
» Предлагани специалности:
.NET Enterprise Developer
Java Enterprise Developer
» Качествено обучение с много практически упражнения
» Завършвате само за 3 месеца.
» Гарантирана работа след успешно завършване!
» Професионална сертификация!
» БЕЗПЛАТНО!
Учите безплатно, плащате като завършите и започнете работа.
Стипендии от софтуерни фирми.
|
http://academy.devbg.org
|
Сподели с приятели: |