© 2013 All rights reserved.
1

Java: jednoduchý internetový prohlížeč

Vytvořit v Javě internetový prohlížeč, pouze se základními funkcemi, je opravdu velmi jednoduché. Uděláme si prohlížeč, který zvládne zobrazit zadanou HTML stránku, umožní klikat na odkazy a přecházet tak na další stránky, nebo třeba odesílat formuláře.
java web browser

Pro vytvoření opravdu jednoduchého webového prohlížeče můžeme využít implementace HyperlinkListener, který umožní pracovat se Hypertextovým obsahem.

Co všechno bude náš prohlížeč umožňovat:

  • zadat a přejít na požadovanou URL adresu
  • odchytit výjimku při kliknutí na odkaz a přejít na něj
  • možnost vrátit se na předchozí stránku (back)

Samozřejmě, při impmenetaci HyperlinkListener, musíme počítat s jistými omezeními, a určitě během tohoto krátkého tutoriálu nevytvoříme plnohodnotný prohlížeč, který bude zvládat javascript, veškeré formátování pomocí CSS zobrazovat správně nebo podporovat Flash.

Námi vytvořený editor bude mít pouze těchto několik základních funkcí, které je samozřejmě možno dle libosti doplnit.

Grafické rozhraní editoru

Ve stručnosti popíšu grafické rozhraní, které bude náš editor obsahovat, a které součásti budou potřeba.

Základem editoru je samozřejmě plocha pro zobrazení obsahu HTML stránky. Pro tyto potřeby využijeme JEditorPane, kterému nastavíme pomocí setContentType hodnotu „text/html“. Tím v něm můžeme zobrazovat HTML kód.

Dále je potřeba vytvořit formulář pro zadání URL adresy a v našem případě ještě dvě tlačítka. Jedno pro přechod na zadanou URL adresu a druhé pro návrat zpět.

Pro zadání URL adresy nám bude stačit obyčejný JTextField.

Jako poslední věc si doplníme GUI o stavový řádek, ve kterém budeme vypisovat základní informace o běhu a načítání stránek.

Bez dalšího zdržování uvedu rovnou celé grafické rozhraní, které je velmi jednoduché. Uvedu jej včetně všech listenerů, jejichž obslužné funkce doplním dále:

Obslužné funkce

Pokud jste si pročetli kód rozhraní, vidíte v něm dvakrát volanou funkci LoadHtmlPage().

Funkce je volána při stisku jednoho ze dvou tlačítek, kdy v prvním případě je volána s proměnnou LastUrl, která značí předchozí URL adresu a podruhé po stisku tlačítka Vpřed, s parametrem obsahu hodnoty textového pole pro URL adresu.

Funkce LoadHtmlPage má jednoduchý úkol. V první řadě zkontroluje hodnotu zadané URL adresy, která do ní vstupuje jako String proměnná. Provede kontrolu na délku, která nesmí být nulová a kontroluje, jestli URL adresa začíná řetězcem http://. V případě že nezačíná, řetězec o tuto hodnotu doplní:

Nakonec funkce vytvoří proměnnou typu URL a volá funkci GoToPage(), která načte požadovanou adresu.

Funkce GoToPage() se stará o načtení stránky, hodnoty ze vstupní proměnné typu URL a její zobrazení v editoru.

Funkce ze všeho nejdřív nastaví kurzor myši na hodnotu WAIT_CURSOR, pokusí se načíst danou URL adresu a nastaví hodnotu titulku a stavového řádku.

Po jejím načtení opět vrací kurzor do původního stravu:

Poslední metoda, kterou potřebujeme napsat je samozřejmě hyperlinkUpdate, volaný v konstruktoru, a který zachycuje výjimky při například klikání na webu.

Metoda kontroluje, zda bylo kliknuto levým tlačítkem myši a v případě že ano, volá opět metodu LoadHtmlPage, a přejde na danou URL adresu:

Tím je hotový základ editoru, který umožňuje procházet weby.

Závěrem

Jak bylo uvedeno již v úvodu, cílem nebylo vytvořit plně funkční prohlížeč, ale pouze základ, který umožní procházet webem. V současném stavu by nebyl problém dopsat funkce pro pamatování celé historie, umožnit kromě návratu zpět i posun vpřed, zobrazovat obrázky, které v tomto stavu díky odeslané a nastavené hodnotě ContentType nejdou a podobně.

Zdrojový kód

Nakonec ještě zdrojový kód celého programu

Comments (1)

Zdravim, pekny priklad
mam jeden dotaz: nevim proc nefunguje v tomto prohlizeci zobrazovani URL pro Google napr.:
http://www.google.cz/search?q=neco

Shodou okolnosti delam na jinem projektu a mam stejny problem, server hlasi chybu "403 Forbidden"

diky za radu

Add comment

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836