DOC

JAVA, JAVASCRIPT IN CGI

By Barbara Campbell,2014-04-24 14:26
6 views 0
JAVA, JAVASCRIPT IN CGI

    JAVA, JAVASCRIPT IN CGI

    Borut Gorenjak

    borut.gorenjak@uni-mb.si, http://www.kibla.org/lusers/panther/

Povzetek

Bistvo te seminarske naloge je pokazati razliko med Javo, JavaScriptom (VBScriptom) in CGI

    vmesnikom. Vsaka tema je uvodno na kratko opisana, dodani so ji tudi kakšni tekstovni

    primeri, na koncu pa še primerjava z drugimi metodami. Ker Javo kot takšno že poznamo,

    sem se malce bolj posvetil zamisli delovanja Jave in zanemaril Javo kot programski jezik.

    Zato pa je lastnost Jave lepo prikazana na šestih primerih. V JavaScriptu sem se naslonil na JavaScript kot podaljšek HTML-ja in na dveh primerih prikazal kako JavaScript vključimo v HTML dokument. Nato sledita dve primerjavi z Javo in drugimi različicami skriptnega jezika. Na koncu pa je JavaScript dopolnjen še z devetimi primeri. Ker je CGI vsem malce manj znan,

    sem temu posvetil največ pozornosti. Opisano je celotno delovanje CGI. Nato sledita dve

    primerjavi z Javo in JavaScriptom. Razlaga CGI-ja je dopolnjena z tremi primeri.

Java

Uvod

    Za javo smo že vsi slišali ampak vseeno bi ponovili njeno definicijo. Java je programski jezik,

    ki je neodvisen od platforme, na kateri teče. To pomeni, da je v bistvu neodvisna od

    kombinacije strojne opreme in operacijskega sistema. Programček, vključen na spletno stran,

    bo enako deloval na PC-ju pod Windows 95, Windows NT ali Unixom. Zakaj? Ko napišemo

    program, ga prevedemo v java bytecode. To je psevdojezik, ki omogoča hiter prenos prek

    mreže in še hitrejše izvajanje. Za izvajanje tako prevedenega programa je zadolžen poseben

    modul, ki je srce vsakega z javo združljivega brkljalnika ali operacijskega sistema. Pravimo

    mu Java VM, pri čemer VM označuje besedi Virtual Machine ali po naše "navidezen

    računalnik". Java VM prebere bytecode in jih začne izvajati. Če se za trenutek pomudimo pri VM-ju, zvemo, da je VM lahko izveden programsko ali strojno. V prihodnosti načrtujejo

    izdelavo posebnih procesorjev java (nekaj jih je že bilo videti na letošnjem Comdexu), ki bi

    strašno poenostavili in pospešili razvoj inteligentnih avtomobilov in podobnih napravic. Če so

    strojne implementacije VM-ja zaenkrat še bolj domena laboratorijev, pa se programske

    izvedenke veselo širijo. Skoraj ni več platforme, ki ne bi imela izdelan VM. Prvi VM-ji so

    delovali na principu interpreterja, podobno kot recimo spectrumov basic ali podobne

    Microsoftove igrače. Interpreter porabi zelo malo sistemskih rezerv in ga je relativno

    enostavno narediti. Njegova šibka točka pa je v tem, da je delovanje interpretiranih

    programov počasno. Zaradi tega se uveljavlja nov princip, JIT compiler. Magična beseda

    označuje prevajalnik Just-In-Time, ki tik pred zagonom programa prevede bytecode v domači

    jezik procesorja, na katerem VM gostuje (recimo x86, powerPC, sparc). Prednost tega

    pristopa je v tem, da prevedeni programi tečejo hitreje, vendar moramo to plačati z

    1

malenkostno zamudo pri začetku izvajanja. Kaj pa se zgodi, ko VM potegne class iz mreže?

    VM je v bistvu sestavljen iz treh enot: nalagalnika, preverjalnika in prevajalnika. Nalagalnik

    naloži java class iz mreže. Preverjevalnik preveri, če je class spodoben, se pravi, če je napisan

    pravilno in če njegovo izvajanje ne bo kršilo varnostnih pravil. Prevajalnik, kot že povedano,

    class prevede in zažene.

Poseben del prevajalnika so paketi java (standard java packages). Pakete si enostavno

    predstavljamo kot knjižnice rutin, ki vsebujejo okolje, v katerem javski program deluje. Java

    je objekten jezik, zato so knjižnice razširjene v objekte in vsebujejo poleg funkcij tudi

    spremenljivke in deklaracije tipov.

Poznamo sedem glavnih paketov:

    ? java.lang vsebuje definicijo jezika in glavne objekte

    ? java.util vsebuje podporne tipe in funkcije jezika

    ? java.io vsebuje vhodno/izhodne objekte

    ? java.awt je najbolj uporabljani paket in vsebuje objekte za uporabo grafičnega

    vmesnika. Od tod tudi končnica awt, ki je okrajšava za Abstract Windowing Toolkit.

    ? java.awt.image je razširitev paketa awt in vsebuje objekte za rokovanje s slikami

    ? java.net vsebuje objekte za pogovor z mrežo, kot na primer podporo za HTML

    ? java.applet vsebuje le en class, ki se uporablja za vključevanje appletov v strani

    HTML

JavaScript

Uvod

    JavaScript je novi skriptni jezik za spletne strani. Skripte napisane z JavaScriptom je možno

    vstavljati direktno v HTML dokumente. Z JavaScriptom imate zele veliko možnosti za

    zvišanje kvalitete vaših spletnik strani z najrazličnejšimi elementi. Na primer, na zelo

    enostaven način se lahko odzivate na uporabniško vpeljane dogodke. Možnosti, ki jih ponuja

    JavaScript je zelo veliko in nekaj jih boste našli tudi med primeri. Nekateri učinki, ki jih sedaj

    ponuja JavaScript, so bili včasih možni samo z CGI programi.

    Prvi brkljalnik, ki je podpiral JavaScript je bil Netscape Navigator 2.0. Sledil mu je Internet

    Explorer 3.0. Vendar pa kot ponavadi skritpe niso vedno delovale enako na obeh brkljalnikih.

    Zato je bilo nujno uvesti standard, ki bo zagotovil pravilno delovanje JavaScripta na vseh

    brklalnikih. Ta standard se je imenoval JavaScript 1.0. Do danes pa se je JavaScript že toliko

    razširil, da so uvedli že standard JavaScript 1.1. Prav tako pa je Microsoft razvil še dva nova

    skriptna jezika imenovana VBScript in JScript.

    Kako zaganjamo JavaScript?

    Kot smo že dejali je JavaScript skriptni jezik, ki ga zapišemo v HTML dokument in zato ne

    potrebuje nobenega posebnega prevajalnika. Za prevajanje skriptnega jezika poskrbi, tako kot

    tudi za HTML ukaze, brkljalnik sam. Čeprav se sliši, da je JavaScript nekaj zelo enostavnega,

    pa zahteva vseeno malo predhodnega znanja o HTML ukazih in pa še prav posebej o

    programiranju.

    Da ne bomo govorili samo teoriji, si poglejmo kako na primerih zaganjamo JavaScript. Prvi

    primer prikazuje kako lahko JavaScript zaganjamo zaporedno z HTML ukazi.

    2

<HTML> <HEAD> <TITLE>Prvi primer</TITLE> </HEAD> <BODY> To je normalni HTML dokument. <SCRIPT LANGUAGE="JavaScript"> document.write("To je JavaScript!"); </SCRIPT> </BODY> </HTML>

Na drugem primeru pa bomo pokazali, kako pišemo funkcije JavaScripta in kako jih kličemo

    v HTML dokumentu. Primer prikazuje, kako se s miškinim klikom na povezavo odpre

    opozorilno okno.

     <HTML> <HEAD> <TITLE>Prvi primer</TITLE> </HEAD> <SCRIPT LANGUAGE="JavaScript"> function PrikaziOkno() { alert("Pozdravljeni!"); return true; } </SCRIPT> <BODY> Kliknite <A HREF="" onClick="PrikaziOkno();">tukaj</A>. </BODY> </HTML>

    Na teh dveh primerih smo jasno videli, kako lahko na dva načina zaganjamo JavaScript.

    JavaScript lahko zaganjamo znotraj bloka <BODY> in pa tako, da najprej definiramo funkcije

    in jih nato kličemo v povezavi z HTML ukazi. Veliko več primerov JavaScripta lahko najdete

    na Gamelanovi spletni strani.

    Primerjava: JavaScript vs VBScript vs JScript

    Kot smo že prej omenili se je moral "vsemogočni" Microsoft tudi tukaj vmešati in narediti

    dva skriptna jezika VBScript in JScript. Microsoft je naredil komercialni skriptni jezik VBScript, ki temelji na Microsoftovem Visual Basicu. Prav ta skriptni jezik se uporablja za

    izvajanje ActiveX komponent in pa za izvajanje aktivnih spletnih strani. Zaganjanje teh skript

    je identično zaganjanju JavaScripta. Torej razlika med JavaScriptom in VBScriptom je v

    sintaksi jezika in njegovih gradnikih. Da pa ne bi zopet vsi obtoževali Microsofta, je ta naredil še en skriptni jezik imenovan JScript, ki je v bistvu JavaScript, ki ima pa dodane še nekatere

    gradnike skriptnega jezika. Torej če naredimo zaključek, JavaScript, VBScript in JScript so

    vsi skriptni jeziki, ki se razlikujejo po sintaksi skriptnega jezika, vsi pa se uporabljajo z istim

    namenom - za oveličevanje spletnih strani.

    Primerjava: Java vs JavaScript

    Čeprav sta imeni Java in JavaScript zelo podobni, je potrebo najprej opozoriti, da imamo tukaj opravka z dvema čisto ločenima zadevama. To sta dve čisto ločeni tehniki

    programiranja za internet. Java je programski jezik, medtem ko je JavaScript samo skriptni

    jezik. Razlika je ta, da lahko z Javo napišete resničen program, vendar pa na naših spletnih

    straneh pogosto potrebujemo samo določene učinke, ki pa jih lahko izvedemo kar z

    3

JavaScriptom in se nam ni potrebno ubadati z resničnim programiranjem. JavaScript je bila

    namenjena za enostavno in razumljivo uporabo. JavaScript avtorjem ni potrebno polagati

    veliko pozornosti na programiranje. Enostavno lahko rečemo, da je JavaScript zgolj podaljšek

    HTML-ja, kot pa ločen računalniški jezik. Kot smo že prej omenili JavaScript ni Java.

CGI

Uvod

    Brkljalniki, ki jih danes najpogosteje uporabljamo za uporabo storitev na Internetu, vsebujejo

    grafične uporabniške vmesnike. Če želimo, da se dokumenti v teh vmesnikih oblikujejo

    dinamično in ne več statično, potrebujemo zunanje programe. Ker je osnovna lastnost

    Interneta, da je sistemsko neodvisen, so tudi to načrtovalci HTML specifikacij zastavili zelo splošno. Tako smo dobili nov programski vmesnik, ki so ga poimenovali CGI ali Common

    Gateway Interface. Kot že samo ime pove, je CGI povezovalnik oziroma vmesnik med našim

    programom in HTML dokumentom (ta nam predstavlja le osnovni del grafičnega vmesnika). To pomeni, da lahko napišemo poljuben program v poljubnem programskem jeziku oziroma

    skripti, ki omogoča branje in pisanje preko standardnih vhodov in izhodov (v običajnem

    delovnem okolju sta to tipkovnica in monitor). Predpogoj pa je seveda, da se ta program lahko

    prevede in poganja na računalniku, na katerem teče spletni strežnik.

    Kratka zgodovina

    Začetki segajo v HTML specifikacijo 1.0. V njem je bil definiran privesek <ISINDEX>, ki je

    omogočal prikaz polja za vnos. Ta privesek je imel veliko pomanjkljivost, saj je omogočal

    samo eno vnosno polje. Poleg tega je sama specifikacija zahtevala uporabo samo v glavi

    HTML dokumenta. To sicer ni bilo vedno potrebno, saj je to delovalo tudi, če smo privesek

    <ISINDEX> vnesli v telo dokumenta. To smo si lahko tudi ogledali pri enem izmed prvih

    iskalcev HTML dokumentov, Lycosu.

    Zaradi teh omejitev so iskali boljše rešitve, ki bi omogočale elegantnejši vnos več podatkov s

    pomočjo oblikovanja zahtevnejših programov. Rešitev je bila predlagana v HTML

    specifikaciji 2.0 in sicer v obliki priveska <FORM>, ki ga že vsi dobro poznamo. Privesek

    <FORM> nam pomaga pri oblikovanju grafičnega vmesnika za naš CGI program.

    Osnove o komunikaciji odjemalec-strežnik

    Pomembno za razumevanje delovanja CGI programov je komunikacija med odjemalcem in

    strežnikom, zato bomo ta del tudi podrobneje opisali. Odjemalec in WWW strežnik vedno

    komunicirata preko HTTP (Hyper Text Transfer Protocol) protokola. Tako se sporazumevata,

    kadar uporabniki brskajo po straneh in kadar kličejo CGI programe. CGI ima v tem primeru

    posebno vlogo. Skrbi za komunikacijo med WWW strežnikom in programom, ki teče na

    strežniku. Ko uporabnik izpolni obrazec ali na kak drug način posreduje zahtevo po CGI

    programu, se izvedejo naslednji koraki:

    ? pošiljanje podatkov od uporabnika k strežniku, ? pošiljanje podatkov od strežnika k CGI programu, ? vračanje podatkov od CGI programa k strežniku.

    Pošiljanje podatkov od uporabnika k strežniku

    4

    Za pošiljanje podatkov lahko uporabimo naslednje tri možnosti: ? Podatke pošljemo kot URL poizvedovanje: URL klic: http://ime.racunalnika.si/cgi-

    bin/nas_program?parametri pošlje programske parametre "parametri" WWW strežniku.

    Strežnik nato požene program "nas_program" in mu servira podane parametre.

    ? Podatke pošljemo kot URL poizvedovanje z dodatno informacijo o poti. Na tak način

    pošljemo strežniku še dodatno informacijo o poti. Le-ta se kasneje prenese do programa in

    nam služi kot dodaten parameter. Primer: http://ime.racunalnika.si/cgi-bin/nas_program/dodatna/pot/do/datoteke?parametri

    Vse je identično kot v prvem primeru, le da smo tu dodali informacijo o poti takoj za imenom

    našega programa "nas_program". Enako kot pri prvem načinu, se tudi tu podatki prenesejo do

    samega programa s pomočjo spremenljivk okolja, ki so pojasnjene v nadaljevanju.

    ? Podatke pošljemo v obliki sporočila. Na ta način se poslani podatki ne shranijo v

    spremenljivke okolja, temveč jih mora naš program znati prebrati iz standardnega vhoda.

    Takšen način komunikacije med odjemalcem in strežnikom je mogoč s pomočjo HTML

    obrazcev.

    Naj ponovimo: pri pošiljanju podatkov strežniku ločimo naslednji obliki: ? S pomočjo spremenljivk okolja,

    ? S pomočjo sporočila, ki se pojavi na standardnem vhodu programa.

Naslednji korak je komunikacija med WWW strežnikom in CGI programom, ki se prav tako

    nahaja na strežniku v posebej zanj določenem direktoriju. Navadno je takšen direktorij

    poimenovan kot cgi-bin.

    Pošiljanje podatkov od strežnika k CGI programu

    Kadar pošiljamo podatke od strežnika k CGI programu, CGI specifikacija določa tri različne

    mehanizme, s katerimi lahko WWW strežnik pošlje dobljene parametre CGI programu.

    ? Pošlje jih kot parametre v ukazni vrstici.

    V tem primeru strežnik kliče program s parametri v ukazni vrstici. To se zgodi le v primeru uporabe klica GET, ki ga povzroči prilastek <ISINDEX>. Na takšen način so bili klicani prvi CGI programi. Tudi mnoge programe v operacijskem sistemu DOS lahko kličemo na enak

    način. Kot primer si oglejmo pogosto uporabljen program ARJ.EXE, ki ga vedno kličemo z

    dodatnimi parametri v ukazni vrstici (npr: arj.exe -va -r *.* a: )

    ? Pošlje jih na standardni vhod

    WWW strežnik pošlje parametre na standardni vhod takoj po klicu programa, zato mora biti

    branje parametrov zagotovljeno v samem programu. Opisani način se izvaja pri uporabi

    obrazcev in v POST načinu delovanja.

    ? Pošlje jih s pomočjo spremenljivk okolja.

    Spremenljivke okolja so tiste, ki so v določenem trenutku dosegljive vsem prisotnim

    programom. Preden WWW strežnik pokliče CGI program, postavi spremenljivke na

    zahtevane vrednosti.

    Vračanje podatkov od CGI programa k strežniku:

    V tem primeru WWW strežnik poslane podatke posreduje CGI programu, ki jih obdela in jih

    želi posredovati nazaj k uporabniku. Imamo več možnosti. Za večino bo najprimernejša kar

    prva.

    ? S pisanjem na standardni izhod.

    5

    Kadar WWW strežnik vrača informacijo odjemalcu, je le-ta zapisana v HTML obliki. Za tak zapis poskrbi CGI program. Vedeti moramo, da pošlje WWW strežnik podatke nazaj k

    uporabniku preko HTTP protokola. WWW strežnik doda dokumentu, ki ga prenaša s HTTP

    protokolom, posebno glavo. V tej glavi so zapisane različne informacije o datoteki, ki jo

    prenaša. Nas zanima samo ena vrstica te glave in to je vrstica: "Content-type: text/html" Tako

    brkljalniku namreč povemo, da mu pošiljamo tekstovno HTML datoteko. V primeru, da je ta

    datoteka zapisana v HTML obliki, dobimo izpis v obliki spletne strani. OPOMBA: Na tem

    mestu opozarjamo, da se glava dokumenta in jedro (samo besedilo) ločita s prazno vrstico.

    Zato moramo nujno poskrbeti, da se pri izpisu našega programa vnese za to vrstico še ena

    prazna vrstica. Programerji radi delajo to napako, zato vas nanjo še posebej opozarjamo.

    ? S posebnim imenom CGI programa.

    V tem primeru imamo na voljo posebno obliko poimenovanja CGI programa. Če naš CGI program poimenujemo z imenom, ki se začne z nph-ime_programa, ga strežnik obravnava na poseben način. Sama kratica nph, pomeni nonparsed header, kar v praksi pomeni, da moramo

    sami poskrbeti za celotno glavo dokumenta, ki ga pošiljamo po HTTP protokolu. V prejšnjem

    načinu je za vse ostale vrstice, razen tiste, v kateri smo strežniku povedali, kakšen dokument

    mu pošiljamo (Content-type), poskrbel strežnik. V tem primeru pa strežnik pošlje izhod

    našega programa direktno k odjemalcu, brez predhodnega posredovanja in dodajanja

    potrebnih vrstic v glavi dokumenta.

    Izdelava CGI programa

    Sedaj se končno lahko lotimo izdelave samega CGI programa. Spremenljivke okolja smo si

    ogledali, zato sedaj poglejmo, kako in s pomočjo katerih spremenljivk prenašamo parametre.

    Branje parametrov

    Če so bili podatki poslani na enega izmed načinov, ki se poslužuje spremenljivk okolja, se

    podatki nahajajo v spremenljivki QUERY_STRING. Naša naloga je torej prebrati to

    spremenljivko okolja, ter izluščiti poslane parametre. Če jih želimo izluščiti, moramo vedeti,

    kako so ti zapisani v spremenljivki okolja.

     Za nas so zanimive naslednje spremenljivke okolja:

     REQUEST_METOD: GET QUERY_STRING: nasi_parametri_v_URL_formatu CONTENT_TYPE: (prazno) CONTENT_LENGTH: (prazno)

Naše podatke pošljemo strežniku v URL formatu. To pomeni, da so: presledki spremenjeni v

    znake +, nealfanumerični znaki so kodirani v obliki %xx, kjer je xx šestnajstiška koda ASCII

    ustreznega znaka, med spremenljivkami in njihovimi vrednostmi je enačaj, med seboj pa so

    ločene z znakom &. (spremenljivka1=vrednost&spremenljivka2=vrednost)

Če bi poslali podatke, ki jih vpišemo v nekem obrazcu, bi sprejeli naslednjo vrstico podatkov:

     Ime=Ime+Priimek&E-mail=ime.priimek@nekje.si& Pripombe=Podal+bi+pripombo+na+to+in +to

    Iz takšne vrstice moramo sedaj v CGI programu razbrati ustrezne podatke. Seveda ni nujno,

    da je uporabnik vpisal vse podatke, lahko da je kakšnega tudi izpustil. Praznih polj se

    običajno ne prenaša zaradi optimizacije prenosa podatkov. To sicer vedno ne velja, saj se

    včasih prenesejo tudi prazna polja, odvisno od aplikacije in strežnikov. Vendar je treba prazna

    polja upoštevati že pri razvijanju CGI programa.

    6

Glavni del programa

    Sprejete podatke lahko poljubno obdelujemo. Hitrost ni vprašanje, saj je naša povezava med

    odjemalcem in strežnikom najpočasnejši člen v verigi. Zato se pogosto uporabljajo tudi razni

    skriptni jeziki, ki so sicer počasnejši, vendar pa zagotavljajo 100% prenosljivost med

    različnimi operacijskimi sistemi in omogočajo elegantnejšo realizacijo izpisov. Na žalost pa

    ima vsak, ki ima dostop do cgi-bin direktorija, možnost pregleda celotnega programa. To je lahko neprijetno, sploh če so v tem direktoriju zapisana tudi kakšna dostopna gesla. Vse te

    slabosti in prednosti nato pretehtamo, ter se, glede na našo aplikacijo, odločimo, v katerem

    programskem jeziku bomo zakodirali naš CGI program. S tem nam sedaj preostane samo še

    izpis obdelanih podatkov, ki jih želimo vrniti uporabniku.

    Pošiljanje odgovora

    Pri pošiljanju odgovora na poslane podatke moramo najprej poslati naslednjo vrstico:

     Content-type: text/html OPOMBA: Obvezno ji mora slediti prazna vrstica!

S tema vrsticama povemo odjemalcu, da bo prejel HTML dokument. Vendar to ne velja takrat,

    ko poimenujemo naš CGI program s nph-ime_programa. Ta način smo že opisali v poglavju o vračanju podatkov WWW strežniku. Če si želimo olajšati delo s tem, da CGI program ne bo

    imel posebne oblike imena, bomo to izvedli na že omenjen način. To je glavni del, ki ga

    moramo obvezno poslati. Temu sledi lahko poljuben HTML dokument, ki ga preberemo iz

    datoteke in zamenjamo vnaprej pripravljene ključne besede z vrednostmi, ki smo jih prejeli od

    odjemalca (njegovo ime...) ali pa celoten HTML dokument tvorimo kar s CGI programom. To

    zadnje je najpogosteje uporabljeno v praksi, saj tako tvorimo kompleksen program, ki poskrbi

    za izpis vnosnega obrazca, procesiranje podatkov in končni izpis rezultata.

    Primerjava: Java vs CGI

    Kot smo opazili je potrebno tako za Javo kot tudi za CGI programe imeti malce predznanja o

    programskem jeziku. Skupna značilnost obeh je, da moramo program pisati neodvisno od

    našega HTML dokumenta. Torej program moramo najprej napisati in ga nato še prevesti z

    ustreznim prevajalnikom. Pri čemer lahko Java programčke razvijamo na katerem koli

    opearcijskem sistemu, medtem ko mora biti CGI program preveden oziroma prirejen za

    operacijski sistem, na katerem teče spletni strežnik. Razlika je še v tem, da si Java applet

    rezervira določen prostor v brkljalniku in se tam tudi izvaja. CGI program pa je program, ki v

    bistvu generira izpise HTML kode in se v glavnem uporablja za prenose podatkov preko

    strani, za delo z datotekami (števci, iskalniki, knjiige gostov). Vendar pa je izvajanje obeh

    dokaj počasno, zato ju danes zamenjujejo tehnike kot so ActiveX, dynamic HTML in aktivne spletne strani.

    Primerjava: JavaScript vs CGI

    Pri JavaScriptu zopet ne moremo govoriti o pravem programiranju, saj je to kot smo že

    omenili le razširitev HTML-ja. Znano pa je, da se je JavaScript razvil kasneje kot CGI in da

    se je razvil ravno zaradi CGI-ja. Kajti včasih je bilo potrebno za vse najmanjše programske podrobnosti pisati CGI programe, danes pa večino teh stvari lahko opravimo že kar z

    JavaScriptom. Poleg tega pa je JavaScript vidneje hitrejši od CGI programov. Kakorkoli že,

    če želite svoje domače strani polepšati, skušajte najprej poseči za JavaScriptom in šele nato za

    Javo in CGI-jem.

    Reference oz. literatura

    7

? WIN.INI 1997 Februar Priloga: CGI programiranje

    ? JOKER letnik 1997, številka 42,43 – Uvod v Javo

    ? CD (Ministrstvo za šolstvo in šport Republike Slovenije, Projekta Tempus-CoLoS )

    ? Razne vsebine iz svetovnega spleta

    8

Report this document

For any questions or suggestions please email
cust-service@docsford.com