Programovanie

Ako začať so serverom Java

Serverová Java (SSJ), niekedy nazývaná aj servlety alebo applety na strane servera, je silným hybridom rozhrania Common Gateway Interface (CGI) a programovania serverového API na nižšej úrovni - napríklad NSAPI od Netscape a ISAPI od Microsoftu.

Tento článok poskytuje úvod do podrobných pokynov pre implementáciu servera Java na strane servera, ktorú Netscape nazýva applety na strane servera (SSA).

SSA môžu fungovať ako skript CGI. Prijíma dostať a príspevok požaduje a vracia webovú stránku (zvyčajne vo forme HTML), ale SSJ sa načítava dynamicky na server ako NSAPI / ISAPI. To eliminuje oneskorenia pri spustení, ktoré sme od CGI očakávali. Umožňuje tiež SSJ udržiavať časť svojho stavu medzi popravami, napríklad udržiavať otvorené pripojenie k databáze.

SSA sa vykonávajú samy pieskovisko, ktorá poskytuje zabezpečenie, ktoré sa od Java očakáva. Napríklad havarujúci applet nezrúti celý server, čo sa môže stať pri programovaní NSAPI / ISAPI. Toto pridané zabezpečenie tiež umožňuje nahrávať applety na vykonávanie na serveri - rovnako ako sa sťahujú applety Java na vykonanie na klientovi.

Asi najdôležitejším aspektom SSA je to, že sú napísané v jazyku Java a sú inherentne nezávislé na platforme a objektovo orientované.

História

Rastúci počet serverov podporuje Javu na strane servera, vrátane serverov Netscape FastTrack 2.0 a Enterprise 2.0, Java Web Server JavaSoft (predtým nazývaný Jeeves), Jigsaw z World Wide Web Consortium, T3Server od WebLogic, Webserver od Oracle a ExpressO od Peak Technologies. Každý z týchto serverov používa iné rozhranie Java API na strane servera, čo vyžaduje, aby vývojári napísali rôzne programy pre každý server, ktorý budú používať.

Podrobnosti Netscape: Pripravte svoj server

Pred vytvorením prvého appletu na strane servera pre servery Netscape je potrebné pripraviť server. Servery Enterprise a FastTrack sú z hľadiska podpory SSA identické.

Začnite zapnutím tlmočníka Java na serveri. Môžete to urobiť zo Správcu serverov v časti „Programy -> Java“. Kliknutím na tlačidlo Áno povolíte interpret jazyka Java. Správca servera vás požiada o „adresár appletu Java“, ktorý je miestom na vloženie podporných súborov SSA, ako aj o umiestnenie všetkých súborov triedy SSA. Poskytuje predvolené umiestnenie. Na počítačoch Unix to je / usr / ns-home / pluginy / java / applety. Na počítačoch so systémom Windows to je C: \ Program Files \ Netscape \ Server \ plugins \ Java \ applety (Poznámka: V tomto vstupnom poli má Netscape tendenciu kombinovať spätné a lomítka. Nebojte sa, Netscape zaobchádza s dvoma typmi lomítok rovnako.) Ak je to možné, vezmite si predvolený adresár appletu. Ak sa rozhodnete namiesto predvoleného nastavenia prispôsobiť, nezabudnite zvoliť adresár niekde pod koreňom servera a skopírovať všetky súbory z predvoleného umiestnenia do svojho vlastného umiestnenia. Uložte a použite svoje zmeny. Nezabudnite server zastaviť a znova spustiť, aby sa zmeny prejavili.

Čas experimentovať!

V tomto okamihu by ste mali byť schopní experimentovať s appletmi poskytnutými programom Netscape. Nasmerujte prehliadač na // servername / server-java / FormApplet? Abc = xyz & 123 = 789. Mali by ste vidieť, že údaje „get“ sú spracované a vrátené v HTML appletom formulára.

Ak sa vyskytne chyba servera, skontrolujte chybový protokol servera (/ usr / ns-home / httpd-hostname / logs / errors alebo C: \ Program Files \ Netscape \ Server \ httpd-hostname \ logs \ errors). Ak sa hovorí, že nemôže spustiť interpret jazyka Java, pravdepodobnou príčinou je skutočnosť, že váš server CLASSPATH mätie program Netscape. Skúste server spustiť v prostredí bez CLASSPATH.

Ďalším appletom, ktorý môžete vyskúšať, je // servername / server-java / Connect; mal by sa načítať a zobraziť //www.meer.net/barn/index.html. Applet Pripojiť vytvorí soketové pripojenie s cieľom načítať stránku, ktorá môže vygenerovať chybu servera, ak je váš server za bránou firewall. V ďalšom kroku predpokladajme, že soket zablokoval firewall. Upravíme kód appletu Pripojiť, aby sme získali prístup na inú stránku na inom webovom serveri.

Súbor Connect.java je k dispozícii v „adresári appletu Java“. (Nachádza sa tiež nižšie.) Najskôr importuje server netscape.server.applet. *.

import netscape.server.applet. *; 

Tento balík obsahuje základné triedy pre vývoj appletov na strane servera. Najdôležitejšia trieda v tomto balíku je HttpApplet, nadtrieda pre všetky applety na strane servera. Ako vidíte v časti Connect (nižšie), jedinou metódou, ktorú je potrebné implementovať na strane servera, je applet bežať metóda. Táto metóda sa vyvolá vždy, keď applet prijme „prístup“. The bežať metóda pre pripojenie otvorí soket na „hostiteľa“ a načíta „požiadavku“ pred presmerovaním výstupu na klienta. Chceme zmeniť premennú „hostiteľa“, aby odkazovala na stroj viditeľný z nášho webového servera. Budeme tiež chcieť zmeniť premennú „žiadosť“, aby odkazovala na stránku nového „hostiteľa“.

import netscape.server.applet. *; import java.io.PrintStream; import java.io.InputStream; import java.io.OutputStream; import java.io.DataInputStream; import java.net.Socket; class Connect extends HttpApplet {public void run () throws Exception {String host = "www.meer.net"; // zmeniť tento int port = 80; Žiadosť o reťazec = "ZÍSKAŤ /barn/index.html HTTP / 1.0 \ n"; // aj toto Socket s = new Socket (host, port); OutputStream os = s.getOutputStream (); PrintStream op = nový PrintStream (os); op.println (požiadavka); InputStream je = sam (); DataInputStream di = nový DataInputStream (je); Šnúrka; if (returnNormalResponse ("text / html")) {PrintStream out = getOutputStream (); out.println ("& lth1 & gtData na" + hostiteľ + "port" + port + ""); out.println (" požiadavka: "+ požiadavka +"
"); while ((line = di.readLine ())! = null) out.println (line);}}}

Po vykonaní zmien „hostiteľ“ a „žiadosť“ je ďalším krokom prekompilovanie aplikácie Connect.

V systéme Windows použite svoj štandardný kompilátor javac s nastavenou cestou triedy classpath tak, aby obsahoval serv2_0.zip. javac -classpath .. \ classes \ serv2_0.zip Connect.java.

V systéme Unix poskytuje Netscape kompilátor Java (javac) v adresári nad adresárom appletu Java. Tento javac je vlastne skript, ktorý volá java sun.tools.javac.Hlavne urobiť kompiláciu. V niektorých systémoch sun.tools.javac.Hlavne kompilátor používa nové metódy 1.1 JDK ako napr java.lang.Character.isJavaLetterOrDigit (), čo môže vývojárom bez verzie 1.1 JDK spôsobiť dosť veľký problém. Úplne vynikajúcou alternatívou je použitie štandardného kompilátora javac, ktorý ste vždy používali, javac -classpath ../classes/serv2_0.zip Connect.java. Ak chcete použiť poskytnutý skript javac, stačí nahradiť „javac„s“../javac."

Počas tejto kompilácie sa môže zobraziť chyba, ktorá hovorí:

Connect.java:1: Balík netscape.server.applet sa pri importe nenašiel. import netscape.server.applet. *; ^ 1 chyba 

Tejto chyby sa netreba obávať. Súbor triedy sa vytvorí normálne a bude fungovať dobre. Tejto chybe sa môžete vyhnúť, ak vo svojich výpisoch z importu odstránite zástupné znaky.

V systéme Unix poskytuje Netscape makefile v adresári appletu Java na spracovanie kompilácie appletu. Makefile bohužiaľ používa zástupný znak '%', čo je prípona mk / nmake a nie je vždy k dispozícii. Kód problému je uvedený nižšie.

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

Alternatívou je použitie pravidla .suffixes. Upravte prvý riadok súboru makefile tak, aby bol:

.PORUCHY: .java .class a cieľové riadky% .class nahraďte .java.class: javac -classpath ../classes/serv2_0.zip $ < 

Môžete si všimnúť, že som odstránil ../ aby makefile vyvolal štandardný kompilátor javac. Ak chcete vyskúšať tento nový súbor makefile, znova uložte súbor Connect.java a skúste príkaz „make“.

Ak by ste práve teraz znova načítali stránku // servername / server-java / Connect, stále by sa vám zobrazila stránka „Stodola“. Je to preto, že triedy Java sa na server načítajú v čase spustenia pomocou funkcie init v súbore obj.conf. Ak chcete načítať nové zmeny, musíte server zastaviť a potom ho znova spustiť. V niektorých systémoch musíte na zastavenie a spustenie použiť Správcu serverov. Reštartovanie príkazového riadku má niekedy za následok „chybu servera“ pre nasledujúce požiadavky appletu. Po zastavení a spustení servera skúste znova aplet Pripojiť. Netscape mal načítať nový kód Connect, aby zobrazil stránku, ktorú ste vybrali.

Berme to s API vážne

Blahoželáme! Práve ste skompilovali a otestovali svoj prvý kód Java na strane servera. Teraz uvedieme niekoľko metód, ktoré máte k dispozícii.

Pomocou nasledujúcich metód môžete urobiť väčšinu svojej práce:

PrintStream getOutputStream () vyvolá IOException; 

vracia a PrintStream, pomocou ktorého môžete vytlačiť svoju odpoveď klientovi. Nahrádza System.out.

Hashtable getFormData () vyvolá IOException; 

vráti Hashtable ukladajúci páry mien-hodnota požiadavky HTTP. Hodnotové reťazce sú dekódované z ich formy kódovanej URI. Vrhá to Výnimka IO ak neexistujú údaje formulára.

String getFormField (String fieldName) vyvolá IOException; 

Môžeš použiť getFormField na získanie iba jedného poľa. To tiež hodí Výnimka IO ak neexistujú údaje formulára.

boolean returnNormalResponse (String contentType) vyvolá IOException; 

spustí odpoveď HTTP s typom obsahu nastaveným tak, ako určíte jeho parametrom. Vráti hodnotu true, ak išlo o požiadavku „získať“ alebo „post“, a hodnotu true, ak išlo o požiadavku „head“.

public boolean returnErrorResponse (String contentType, int status, String reason) hodí IOException public boolean returnErrorResponse (String contentType, int status) hodí IOException 

spustí odpoveď HTTP na nahlásenie chyby. Trvá to typ obsahu, stav (napr HttpApplet.BAD_REQUEST, ktorý predstavuje štandardný chybový kód 400) a voliteľný reťazec udávajúci dôvod chyby.

Pri vývoji vašich appletov na strane servera môžete použiť desiatky ďalších metód. Netscape inštaluje sprievodcu rozhraním API na svoje servery. Sprievodcu nájdete na /usr/ns-home/bin/httpd/admin/html/manual/pg/javapi.htm pod Unixom alebo na C: \ Program Files \ Netscape \ Server \ bin \ httpd \ admin \ html \ manual \ pg \ javapi.htm pod Windows.

Ahoj Svet!

Teraz použijeme všetko, čo sme sa naučili, na napísanie (uhádli ste!) Servera Hello World na strane servera. Nasledujúci applet pozdravuje používateľa Svet pokiaľ a cieľ je dané pole - v takom prípade namiesto toho pozdraví cieľ.

import netscape.server.applet.HttpApplet; import java.io.IOException; import java.io.PrintStream; class Hello extends HttpApplet {/ * V predvolenom nastavení pozdravujeme „World“ * / String helloTarget = "World“; / * run () je vyvolaný na vybavenie žiadosti * / public void run () vyvolá výnimku {/ * getOutputStream () nám umožňuje hovoriť s klientom * / PrintStream out = getOutputStream (); / * Použite getFormField () na zistenie, či máme pozdraviť * niekoho iného ako „svet“. * / String formTarget = null; try {formTarget = getFormField ("target"); if (formTarget! = null) {helloTarget = formTarget; }} catch (IOException e) {/ * Budeme ignorovať výnimky spôsobené „chýbajúcim reťazcom dopytu“ * / if (! e.getMessage (). startWith („chýbajúci reťazec dopytu“)) {handleException (e, out) ; }} / * Pozdravte * / if (returnNormalResponse ("text / html")) {try {out.println ("Hello," + helloTarget + "!"); } catch (Výnimka e) {handleException (e, out); }}} private void handleException (Exception e, PrintStream out) {try {returnErrorResponse ("text / html", SERVER_ERROR, "Exception thrown"); } catch (IOException ioe) {} // skúste vytlačiť pôvodnú výnimku out.print ("& lth1>"); výtlačok (e); out.print ("\ n "); out.print (" & ltpre> "); e.printStackTrace (out); // musí byť zadaný alternatívny PrintStream out.print ("
"); vrátiť;}}

Táto podtrieda appletu na strane servera z netscape.server.applet.HttpApplet a prepíše run () rovnako ako všetky applety na strane servera v rámci Netscape. Rýchlo získa výstupný prúd volaním na getOutputStream, ktorú použije na vytlačenie „Ahoj“ (alebo na vytlačenie dôvodu poruchy). Volá getFormField skontrolovať, či existuje alternatívny cieľ, ktorý sa má použiť, a potom vráti normálnu odpoveď „text / html“ a nakoniec vykoná skutočnú prácu s tlačou „Dobrý deň“. Všimnite si, že kontroluje návratovú hodnotu z returnNormalResponse () volať a nič neurobiť, ak vráti hodnotu false. Ak to neurobíte, vrátite údaje dokonca aj za hlava žiadosti.

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