e mail gorazd kos izum si namesto uvoda java je dodobra razburkala svet programerstva ko je bil v ospredje postavljen koncept objektne tehnologije se nobenemu programskemu jeziku ni uspelo v tako hitrem casu pridobiti na svojo stran toliko programerjev sibka tocka jave kar pa kot kaze programerjev ne moti je v tem da se od svojega nastanka do danes nenehno spreminja oz dopolnjujejo se njene knjiznice spomnimo se da so si programerji ne dolgo tega npr pri graficnih vmesnikih pomagali s knjiznicami awt danes pa je mogoce uporabiti tudi swing lahko bi rekli da se stanje pocasi umirja in kje vse lahko javo uporabimo seveda je najbolj uporabna in najmocnejsa na internetu in na z njim povezanem svetovnem spletu kljub temu da je bila na zacetku namenjena predvsem za uporabo na strani odjemalca applets pa se njena uporaba vedno pogosteje omenja tudi v zvezi s spletnim streznikom uporabljamo lahko strezniske programcke servlets v novejsem casu pa so zaceli propagirati tudi javine strezniske strani jsp java server pages ki so neke vrste odgovor na vse bolj popularne aktivne strezniske strani asp active server pages strezniski programcek kaj je to pa si malce podrobneje poglejmo kaj je javin strezniski programcek to je programcek ki se izvaja na strani spletnega streznika po definiciji je to modul ki tece znotraj servisov orientiranih na zahtevo odgovor request response oriented in jih na nek nacin tudi razsirja strezniski programcki lahko tako uspesno zamenjajo vmesnik cgi common gateway interface seveda mora streznik vsebovati jvm java virtual machine sicer nam taksen programcek ne koristi streznikov ki podpirajo strezniske programcke je vedno vec vendar o tem malce kasneje izhod iz strezniskega programcka je lahko koda html lahko pa programcek komunicira s programckom appletom na strani odjemalca slika kje se nahaja strezniski programcek slika kje se nahaja strezniski programcek ko smo se ze dotaknili vmesnika cgi poglejmo zakaj so strezniski programcki boljsi prva stvar ki jo obljublja ze java je write once run anywhere napisi enkrat in pozeni kjerkoli druga tudi zelo koristna stvar pa je ta da se na spletnem strezniku strezniski programcek pri prvem klicu nalozi in se za vsak naslednji klic tvori le nova nit medtem ko se pri vmesniku cgi za vsako zahtevo kreira nov proces strezniski programcek kako deluje princip delovanja lahko v grobem razdelimo na sest korakov gl slika delovanje strezniskega programcka uporabnik s pomocjo brskalnika zahteva doloceno informacijo spletni streznik sprejme zahtevo ce se zahteva strezniski programcek se nalozi ce prej se ni bil nalozen pri pri zahtevi po strezniskem programcku se poklice metoda init logika je enaka kot pri programckih applets tam se metoda init izvede samo ob inicializaciji strezniski programcek sprejme zahtevo http in glede na tip zahteve se sprozijo razlicne metode doget kadar gre za zahteve get ali za pogojni get ter za zahteve head dopost kadar gre za zahteve post doput kadar gre za zahteve put dodelete kadar gre za zahteve delete za nas sta najbolj zanimivi in uporabni metodi doget in dopost v strezniskem programcku pa lahko uporabimo bodisi eno izmed njiju bodisi obe hkrati v primerjavi z vmesnikom cgi je dobra stran strezniskega programcka ta da s pomocjo metod getparametervalues in getparameternames dobimo vrednosti in imena parametrov ne glede na zahtevo pri cgi ju pa smo do vrednosti in imen parametrov dostopali glede na zahtevi post in get pri zahtevi get lahko preberemo niz tudi s pomocjo metode getquerystring in dobimo niz kot smo ga bili vajeni pri cgi ju pri zahtevi post pravtako tudi pri put in delete lahko izbiramo med dvema nacinoma ce pricakujemo tekstovne podatke jih preberemo s pomocjo razreda bufferedreader in njegove metode getreader ce pa pricakujemo binarne podatke podatke preberemo s pomocjo razreda servletinputstream in metode getinputstream strezniski programcek posreduje podatke kodo html ali kaj drugega in vrne zahtevo strezniku streznik posreduje podatke uporabniku slika delovanje strezniskega programcka slika delovanje strezniskega programcka imamo se druge metode ki so ze definirane in jih je mogoce predefinirati ali tudi ne ce jih ne predefiniramo dobimo rezultat null v nadaljevanju jih bomo omenili le nekaj metoda init ki smo jo omenili zgoraj se zazene le pri nalaganju strezniskega programcka ki ga streznik nalozi ob prvi zahtevi za predefiniranje metode init je priporocljivo da se znotraj te metode klice metoda super init klicati jo moramo takoj na zacetku da se najprej sprozi inicializacija v nadrazredu sele nato nasa inicializacija public void init servletconfig config throws servletexception super init config nasa inicializacija connections zanimiva je tudi metoda getservletinfo nekateri programcki in programi namrec izpisejo informacijo o strezniskem programcku eden taksnih je orodje za nadzor strezniskih programckov priporocljivo je da napisemo kratek opis strezniskega programcka ime avtorja po moznosti tudi verzijo public string getservletinfo return opis servleta avtor gorazd kos verzija v pri odjavi unload strezniskega programcka se na koncu vedno klice metoda destroy ce pri pisanju strezniskega programcka nimamo posebnih zahtev je bolje da te metode ne predefiniramo sirsa okolica strezniskih programckov jdk java development kit je ze vkljuceval knjiznico za izdelavo strezniskih programckov kasneje so jo izlocili in sedaj spada v java standard extension v bodoce naj bi jo vkljucili v j ee java enterprise edition danes potrebujemo za pisanje strezniskih programckov jsdk java servlet development kit v trenutku nastajanja tega clanka je na voljo verzija izdan pa je tudi ze osnutek verzije draft http www javasoft com products servlet index html pri nalaganju verzije z interneta dobimo tudi vsa potrebna navodila za instalacijo in implementacijo strezniskih programckov jsdk servlet api vsebuje paketa javax servlet in javax servlet http drugi osnovi razredi v jsdk so se servlet vsebuje metode ki so predefinirane za strezniske programcke metoda init httpservlet abstraktni razred ki razsirja razred genericservlet vsebuje metode kot so doget dopost getservletinfo in mnoge druge ki nam pomagajo pri pridobivanju podatkov o zahtevi http httpservletrequest vmesnik ki razsirja vmesnik servletrequest dejansko predstavlja definicijo objekta kjer s pomocjo metod httpservlet dobimo podatke o zahtevi httpservletresponse vmesnik ki razsirja vmesnik servletresponse nastavimo vzglavje za http in vracamo podatke iz strezniskega programcka strezniske programcke lahko pisemo tako kot vsak javin programcek z navadnim urejevalnikom besedil pomagamo si lahko tudi z orodji za pisanje kot sta brolandov jbuilder ali ibm ov visualage for java ki imata ze pripravljene predloge za pisanje strezniskih programckov med spletnimi strezniki ki podpirajo strezniske programcke najdemo java web server http jserv javasoft com products webserver index html jigsaw http www w org jigsaw apache http www apache org netscape enterprise server http developer netscape com docs manuals enterprise html drugi ce naletimo na spletni streznik ki nima svojega jvm ga lahko razsirimo s pomocjo ibm ovega streznika websphere application server http www software ibm com webservers na ibm ovih spletnih straneh pise da nudi podporo naslednjim spletnim streznikom ibm http server apache server domino netscape fasttrack server ms internet information server drugi pustimo teorijo kaj pravi praksa pogledali bomo dva primera prvega bolj podrobno drugi pa bo sluzil samo za prikaz kaj vse je mogoce poceti s strezniskimi programcki ime prvega ki smo ga poimenovali firstservlet je ze samo po sebi dovolj zgovorno primer prikazuje osnove kreiranja strezniskega programcka preverjen je tudi nacin predifiniranja metode init poglejmo si izvorno kodo import javax servlet import javax servlet http import java io import java util public class firstservlet extends httpservlet initialize global variables int connections public void init servletconfig config throws servletexception super init config nasa inicializacija connections service the request public void doget httpservletrequest request httpservletresponse response t hrows servletexception ioexception servletoutputstream out response getoutputstream response setcontenttype text html string rhost request getremotehost string radd request getremoteaddr string path request getpathtranslated if path null path nbsp enumeration headnames request getheadernames enumeration parametri request getparameternames httputils neki new httputils stringbuffer requrl neki getrequesturl request out println html head title test servleta title head out print body hello world from servlet out print integer tostring connections out println table border cellpadding cellspacing tr td remote add ress td td out println radd out println td tr tr td remote host td td out println rhost out println td td tr tr td path td td out println path while headnames hasmoreelements string name string headnames nextelement out println td tr tr td out println name out println td td string value request getheader name out println value out println td tr tr td requested url td td out println requrl tostring while parametri hasmoreelements string name string parametri nextelement out println td tr tr td out println name out println td td string value request getparametervalues name int i value length out println velikost polja i br for int x x i x out println value br out println td tr table out println body html out close get servlet information public string getservletinfo return firstservlet informacija n avtor gorazd kos n verzija vidimo da imamo globalno spremenljivko connections ki jo v metodi init inicializiramo v metodi doget pa jo pri vsaki zahtevi inkrementiramo s tem smo dokazali trditev da se metoda init res klice samo prvic pri nalaganju strezniskega programcka v metodi doget smo iz knjiznice jsdk klicali tudi razne standarnde metode kot so getremotehost getremoteaddress getrequestedurl getparameternames getparametervalues idr strezniski programcek najdemo na uri http ntw gorazdk izum si servlet firstservlet iz zgornjega je razvidno da smo implementirali metodo doget vrednosti parametrov dobimo s pomocjo zahteve http ntw gorazdk izum si servlet firstservlet parameter vrednos t parameter vrednost oziroma na podoben nacin drugi strezniski programcek je primer racunanja tecajev in deluje s pomocjo zahteve post kar pomeni da smo uporabili metodo dopost podatki o tecajih so shranjeni na disku v datotekah ko programcek razbere podatke iz forme html se klice metoda ki izracuna tecaj na dolocen dan uri http ntw gorazdk izum si mdl zakljucek izkusnje pri razvoju strezniskih programckov so pokazale da se pogosto pojavljajo problemi prav pri razhroscevanju zato je treba poiskati primeren nacin razhroscevanja in morda bi z razvojem lastnih razredov httpservletresponse in httpservletrequest to tudi dosegli strezniski programcki bodo zanimivi tudi v bodoce saj imajo veliko pozitivnih lastnosti kot npr so objektno orientirani nalozijo se le pri prvem klicu so vecnitni so neodvisni od spletnega streznika in od operacijskega sistema napovedujejo da bodo v prihodnje strezniski programcki na strani spletnega streznika mocno povezani z xml na strani odjemalca cisto na koncu bi zelel omeniti se projekt jakarta http jakarta apache org delovno skupino za razvoj implementacije javinih strezniskih programckov in javinih strezniskih strani jsp zlasti na spletnem strezniku apache viri john hunt data is served application development advisor january february str kyle brown gary craig greg hester and peter jakab using server side java successfully java report june str java servlet api http java sun com products servlet java web server servlet tutorial http jserv java sun com products java server documentation w ebserver servlets servlet tutorial html ibm websphere dokumentacija http www software ibm com webservers the jakarta project http jakarta apache org rick schultz java platform update overview and roadmap konferenca javaone http industry java sun com javaone pdfs e pdf james duncan davidson java servlet api konferenca javaone http industry java sun com javaone pdfs e pdf vase mnenje o prispevku splosno odlicen vreden branja ni vreden branja dolzina predolg ravno prav prekratek strokovnost prevec strokoven ravno prav prevec splosen opombe vase ime priimek e posta podjetje