Programiranje

Kako začeti s strežniško Javo

Strežniška Java (SSJ), včasih imenovana tudi strežniški programčki ali programčki na strežniški strani, je močan hibrid vmesnika Common Gateway Interface (CGI) in strežniškega API-ja nižje ravni, kot sta NSAPI iz Netscape in ISAPI iz Microsofta.

Ta članek ponuja uvod in navodila po korakih za izvajanje Netscape-a strežniške Jave, ki jo Netscape imenuje strežniški programčki (SSA).

SSA lahko delujejo kot skript CGI. Prejema dobili in objava zahteva in vrne spletno stran (običajno v obliki HTML), vendar se SSJ dinamično naloži v strežnik, kot je NSAPI / ISAPI. To odpravlja zamude pri zagonu, ki smo jih pričakovali od CGI. Omogoča tudi SSJ, da med izvajanjem ohranja nekaj svojega stanja, na primer ohranja odprto povezavo z bazo podatkov.

SSA se izvršijo sami peskovnik, ki zagotavlja varnost, ki jo pričakujemo od Jave. Na primer zrušeni programček ne bo zrušil celotnega strežnika, kot se lahko zgodi pri programiranju NSAPI / ISAPI. Ta dodatna varnost omogoča tudi nalaganje programčkov za izvajanje na strežniku - tako kot se na strani odjemalca prenesejo programčki Java na strani odjemalca.

Morda je najpomembnejši vidik SSA ta, da so napisani v Javi sami po sebi neodvisni od platforme in objektno usmerjeni.

Zgodovina

Vse večje število strežnikov podpira java na strani strežnika, vključno s strežnikoma Netscape FastTrack 2.0 in Enterprise 2.0, Java Web Server (prej imenovan Jeeves) Java, Jigsaw World Wide Web Consortium, WebLogic T3Server, Oracle's Webserver in Peak Technologies 'ExpressO. Vsak od teh strežnikov uporablja drugačen Java API na strani strežnika, ki od razvijalcev zahteva, da za vsak strežnik, ki ga bodo uporabljali, napišejo različne programe.

Podrobnosti o Netscapeu: pripravite strežnik

Preden ustvarite svoj prvi strežniški programček za strežnike Netscape, morate pripraviti strežnik. Strežnika Enterprise in FastTrack sta v podpori SSA enaka.

Začnite tako, da vklopite tolmač Java strežnika. To lahko storite v upravitelju strežnikov v razdelku »Programi -> Java«. Kliknite gumb Da, da omogočite tolmač Java. Upravitelj strežnikov vas bo vprašal za "Imenik Java-programčka", kamor lahko namestite podporne datoteke SSA in mesto vseh datotek razreda SSA. Zagotavlja privzeto lokacijo. Na Unixovih strojih je to / usr / ns-home / plugins / java / applets. Na računalnikih z operacijskim sistemom Windows je C: \ Program Files \ Netscape \ Server \ plugins \ Java \ applets (Opomba: V tem vnosnem polju Netscape ponavadi meša in poravna poševnice nazaj in poševnice naprej. Ne skrbite, Netscape dve vrsti poševnic obravnava na enak način.) Če je mogoče, vzemite privzeti imenik programčka. Če se odločite za prilagajanje namesto privzetega, izberite imenik nekje pod korenskim strežnikom in kopirajte vse datoteke s privzete lokacije na svoje mesto po meri. Shranite in uporabite svoje spremembe, pri čemer ne pozabite ustaviti strežnika in ga znova zagnati, da bodo spremembe začele veljati.

Čas je za eksperimentiranje!

Na tej točki bi lahko lahko eksperimentirali z apleti, ki jih ponuja Netscape. Usmerite brskalnik na // servername / server-java / FormApplet? Abc = xyz & 123 = 789. Applet Obrazec bi moral videti, da je podatke o "pridobivanju" obdelal in vrnil v HTML.

Če se prikaže napaka strežnika, preverite dnevnik napak strežnika (/ usr / ns-home / httpd-ime gostitelja / dnevniki / napake ali C: \ Program Files \ Netscape \ Server \ httpd-hostname \ logs \ napake). Če piše, da ne more zagnati tolmača Java, je verjetno, da vaš CLASSPATH zmede Netscape. Poskusite zagnati strežnik v okolju brez CLASSPATH.

Še en programček, ki ga je treba preizkusiti, je na // servername / server-java / Connect; naložiti in prikazati mora //www.meer.net/barn/index.html. Applet Connect vzpostavi povezavo z vtičnico za pridobitev strani, kar lahko povzroči strežniško napako, če je strežnik za požarnim zidom. Za naslednji korak predpostavimo, da je požarni zid blokiral vtičnico. Uredili bomo kodo programčka Connect za dostop do druge strani na drugem spletnem strežniku.

Datoteka Connect.java je na voljo v "Imeniku programčka Java." (Najdemo ga tudi spodaj.) Najprej uvozi netscape.server.applet. *.

uvoz netscape.server.applet. *; 

Ta paket vsebuje osnovne razrede za razvoj programčkov na strani strežnika. Najpomembnejši razred v tem paketu je HttpApplet, superrazred za vse programčke na strani strežnika. Kot lahko vidite v povezavi (spodaj), je edini način, ki ga mora uporabiti programček na strani strežnika, teči metoda. Ta metoda se prikliče vsakič, ko programček prejme "zadetek". The teči metoda za Connect odpre vtičnico "gostitelju" in pridobi "zahtevo", preden izhod preusmeri na odjemalca. Spremeniti želimo spremenljivko "gostitelj", tako da se sklicuje na stroj, viden iz našega spletnega strežnika. Prav tako bomo želeli spremeniti spremenljivko "request", tako da se bo sklicevala na stran novega "gostitelja".

uvoz netscape.server.applet. *; uvoz java.io.PrintStream; uvoz java.io.InputStream; import java.io.OutputStream; uvoz java.io.DataInputStream; uvoz java.net.Socket; razred Connect podaljša HttpApplet {public void run () vrže izjemo {String host = "www.meer.net"; // spremenimo to int port = 80; Zahteva za niz = "GET /barn/index.html HTTP / 1.0 \ n"; // tudi ta vtičnica s = nova vtičnica (gostitelj, vrata); OutputStream os = s.getOutputStream (); PrintStream op = novo PrintStream (os); op.println (zahteva); InputStream je = sam (); DataInputStream di = novo DataInputStream (je); Vrvica; if (returnNormalResponse ("text / html")) {PrintStream out = getOutputStream (); out.println ("& lth1 & gtData na" + gostitelj + "vrata" + vrata + ""); out.println (" zahteva: "+ zahteva +"
"); while ((vrstica = di.readLine ())! = null) out.println (vrstica);}}}

Ko spremenite »gostitelja« in »zahtevo«, je naslednji korak ponovna sestava Connect.

V operacijskem sistemu Windows uporabite standardni prevajalnik javac z nastavljeno potjo razredov, da vključite serv2_0.zip. javac -classpath .. \ classes \ serv2_0.zip Connect.java.

Pod Unixom Netscape ponuja prevajalnik Java (javac) v imeniku nad imenikom Java applet. Ta javac je pravzaprav skript, ki kliče java sun.tools.javac.Main narediti prevajanje. V nekaterih sistemih sun.tools.javac.Main prevajalnik uporablja nove metode 1.1 JDK, kot je java.lang.Character.isJavaLetterOrDigit (), ki lahko razvijalcem brez 1.1 JDK povzroči precej težav. Popolnoma dobra alternativa je uporaba standardnega prevajalnika Javaca, ki ste ga vedno uporabljali, javac -classpath ../classes/serv2_0.zip Connect.java. Če želite uporabiti priloženi javačev skript, preprosto zamenjajte "javac"z"../javac."

Med tem prevajanjem boste morda videli napako, ki pravi:

Connect.java:1: Paketa netscape.server.applet ni bilo mogoče najti pri uvozu. uvoz netscape.server.applet. *; ^ 1 napaka 

Te napake ni treba skrbeti. Datoteka razreda je ustvarjena normalno in bo delovala v redu. Tej napaki se lahko izognete, če v izjavah za uvoz odstranite nadomestne znake.

V okviru Unixa Netscape v datoteki Java programček ponuja datoteko make za obdelavo prevajanja programčkov. Na žalost makefile uporablja nadomestni znak '%', ki je razširitev mk / nmake in ni vedno na voljo. Koda težave je prikazana spodaj.

% .class:% .java ../javac -classpath ../classes/serv2_0.zip $ *. java 

Druga možnost je uporaba pravila .suffixes. Uredite prvo vrstico datoteke make:

.SUFFIXES: .java .class in ciljne vrstice% .class zamenjajte z .java.class: javac -classpath ../classes/serv2_0.zip $ < 

Morda boste opazili, da sem odstranil ../ tako da bo makefile poklical standardni prevajalnik javac. Če želite preizkusiti to novo datoteko make, znova shranite datoteko Connect.java in poskusite z »make«.

Če bi zdaj znova naložili // servername / server-java / Connect stran, bi še vedno videli stran "Barn". Razredi Java so naloženi v strežnik ob zagonu s funkcijo init v datoteki obj.conf. Če želite naložiti nove spremembe, morate zaustaviti strežnik in ga znova zagnati. V nekaterih sistemih morate za zaustavitev in zagon uporabiti Server Manager. Ponovni zagon ukazne vrstice včasih povzroči "napako strežnika" za nadaljnje zahteve za programčke. Ko ste ustavili in zagnali strežnik, znova poskusite programček Connect. Netscape bi moral naložiti novo kodo Connect za prikaz strani, ki ste jo izbrali.

Zares se lotimo API-ja

Čestitamo! Pravkar ste zbrali in preizkusili svojo prvo kodo Java na strani strežnika. Zdaj pa nekaj načinov, ki so vam na voljo.

Z naslednjimi metodami lahko opravite večino svojega dela:

PrintStream getOutputStream () vrže IOException; 

vrne a PrintStream, s pomočjo katerega lahko stranki natisnete svoj odgovor. Nadomešča System.out.

Hashtable getFormData () vrže IOException; 

vrne Hashtable, ki shranjuje pare ime-vrednost zahteve HTTP. Nizi vrednosti so dekodirani iz njihove oblike, kodirane z URI. Vrže IOException če ni podatkov o obrazcu.

String getFormField (String fieldName) vrže IOException; 

Lahko uporabiš getFormField za pridobivanje samo enega polja. Tudi vrže IOException če ni podatkov o obrazcu.

boolean returnNormalResponse (String contentType) vrže IOException; 

zažene odgovor HTTP z vrsto vsebine, ki ste jo določili s svojim parametrom. Vrne se true, če je bila to zahteva "get" ali "post" in false, če je bila zahteva "head".

public boolean returnErrorResponse (String contentType, int status, String razlog) vrže IOException javni logični returnErrorResponse (String contentType, int status) vrže IOException 

zažene odgovor HTTP, da sporoči napako. Potrebuje vrsto vsebine, stanje (na primer HttpApplet.BAD_REQUEST, ki predstavlja standardno kodo napake 400), in neobvezen niz z razlogom za napako.

Obstaja na desetine drugih metod, ki jih lahko uporabite pri razvoju strežniških programčkov. Netscape namesti API vodnik s svojimi strežniki. Vodnik najdete na /usr/ns-home/bin/httpd/admin/html/manual/pg/javapi.htm pod Unixom ali na C: \ Program Files \ Netscape \ Server \ bin \ httpd \ admin \ html \ manual \ pg \ javapi.htm v sistemu Windows.

Pozdravljen, svet!

Zdaj pa uporabimo vse, kar smo se naučili, da napišemo (uganili ste!) Programček Hello World na strani strežnika. Naslednji programček pozdravlja Svet razen če a cilj podano je polje - v tem primeru se namesto tega pozdravi cilj.

uvoz netscape.server.applet.HttpApplet; import java.io.IOException; uvoz java.io.PrintStream; razred Hello razširja HttpApplet {/ * Privzeto pozdravimo "World" * / String helloTarget = "World"; / * run () se pokliče za obdelavo zahteve * / public void run () vrže izjemo {/ * getOutputStream () nam omogoča pogovor s stranko * / PrintStream out = getOutputStream (); / * Uporabite getFormField (), da ugotovite, ali se želimo pozdraviti z nekom, ki ni "Svet". * / String formTarget = null; poskusite {formTarget = getFormField ("target"); if (formTarget! = null) {helloTarget = formTarget; }} catch (IOException e) {/ * Ne upoštevamo izjem, ki jih povzroča "manjkajoči niz poizvedbe" * / if (! e.getMessage (). startWith ("manjkajoči niz poizvedbe")) {handleException (e, out) ; }} / * Pozdravi * / if (returnNormalResponse ("text / html")) {try {out.println ("Hello," + helloTarget + "!"); } catch (izjema e) {handleException (e, out); }}} private void handleException (izjema e, PrintStream out) {try {returnErrorResponse ("text / html", SERVER_ERROR, "Vržena izjema"); } catch (IOException ioe) {} // poskusimo natisniti izvirno izjemo out.print ("& lth1>"); out.print (e); out.print ("\ n "); out.print (" & ltpre> "); e.printStackTrace (out); // treba je določiti alternativni PrintStream out.print ("
"); vrnitev;}}

Ta podrazredi programčkov na strani strežnika iz netscape.server.applet.HttpApplet in preglasi teči () kot vsi programčki na strani strežnika pod Netscapeom. Hitro dobi svoj izhodni tok s klicem na getOutputStream, ki ga bo uporabil za tiskanje "Hello" (ali pa za tiskanje razloga za napako). Kliče getFormField da preveri, ali obstaja alternativni cilj za uporabo, nato pa vrne običajen odgovor "text / html" in na koncu dejansko opravi tiskanje "Hello". Upoštevajte, da preverja vrnjeno vrednost iz returnNormalResponse () pokliče in ne naredi nič, če vrne false. Če tega ne storite, boste podatke vrnili celo za glavo zahteve.

$config[zx-auto] not found$config[zx-overlay] not found