Programování

Jak začít s Javou na straně serveru

Java na straně serveru (SSJ), někdy nazývaná servlety nebo applety na straně serveru, je silným hybridem rozhraní Common Gateway Interface (CGI) a programování API serveru na nižší úrovni - například NSAPI od Netscape a ISAPI od Microsoftu.

Tento článek poskytuje úvod do podrobných pokynů k implementaci prostředí Netscape v prostředí Java na straně serveru, které Netscape nazývá applety na straně serveru (SSA).

SSA mohou fungovat jako skript CGI. Přijímá dostat a pošta požaduje a vrací webovou stránku (obvykle ve formě HTML), ale SSJ se načítá dynamicky na server jako NSAPI / ISAPI. To eliminuje zpoždění při spuštění, které jsme od CGI očekávali. Umožňuje také SSJ udržovat část svého stavu mezi popravy, například udržovat otevřené připojení k databázi.

Jednotky SSA se provádějí samy pískoviště, který poskytuje zabezpečení, které člověk od Javy očekává. Například havarující applet nezruinuje celý server, jak se to může stát při programování NSAPI / ISAPI. Toto přidané zabezpečení také umožňuje nahrání appletů k provedení na server - stejně jako ke stažení appletů Java na straně klienta k provedení na klientovi.

Snad nejdůležitějším aspektem SSA je to, že napsané v Javě jsou ze své podstaty nezávislé na platformě a objektově orientované.

Dějiny

Rostoucí počet serverů podporuje Javu na straně serveru, včetně serverů Netscape FastTrack 2.0 a Enterprise 2.0, Java Web Server JavaSoft (dříve nazývaný Jeeves), Jigsaw World Wide Web Consortium, T3Server WebLogic, Webserver Oracle a ExpressO společnosti Peak Technologies. Každý z těchto serverů používá jiné rozhraní API Java na straně serveru, což vyžaduje, aby vývojáři psali různé programy pro každý server, který budou používat.

Podrobnosti Netscape: Připravte svůj server

Před vytvořením prvního appletu na straně serveru pro servery Netscape musíte server připravit. Servery Enterprise a FastTrack mají stejnou podporu SSA.

Začněte tím, že zapnete serverový tlumočník Java. To lze provést ve Správci serveru v části Programy -> Java. Kliknutím na tlačítko Ano povolíte interpret jazyka Java. Správce serveru vás požádá o "adresář appletu Java", což je místo pro umístění podpůrných souborů SSA a umístění všech souborů třídy SSA. Poskytuje výchozí umístění. Na unixových počítačích to je / usr / ns-home / pluginy / java / applety. Na počítačích se systémem Windows ano C: \ Program Files \ Netscape \ Server \ plugins \ Java \ applety (Poznámka: V tomto vstupním poli má Netscape tendenci kombinovat zpětná a lomítka. Nedělejte si starosti, Netscape zachází se dvěma typy lomítek stejným způsobem.) Pokud je to možné, použijte výchozí adresář appletu. Pokud se rozhodnete místo výchozího nastavení upravit, ujistěte se, že jste vybrali adresář někde pod kořenem serveru a že zkopírujete všechny soubory z výchozího umístění do svého vlastního umístění. Uložte a použijte změny, nezapomeňte server zastavit a znovu jej spustit, aby se změny projevily.

Je čas experimentovat!

V tomto okamžiku byste měli být schopni experimentovat s applety poskytovanými Netscape. Nasměrujte prohlížeč na // název_serveru / server-java / FormApplet? Abc = xyz & 123 = 789. Měli byste vidět, že data „get“ jsou zpracována a vrácena v HTML appletem Form.

Pokud se zobrazí chyba serveru, zkontrolujte protokol chyb serveru (/ usr / ns-home / httpd-hostname / logs / errors nebo C: \ Program Files \ Netscape \ Server \ httpd-hostname \ logs \ errors). Pokud říká, že nemůže spustit interpreta Java, je pravděpodobné, že váš CLASSPATH je matoucí Netscape. Zkuste spustit server v prostředí bez CLASSPATH.

Další applet, který můžete vyzkoušet, je // servername / server-java / Connect; mělo by se načíst a zobrazit //www.meer.net/barn/index.html. Applet Connect naváže soketové připojení za účelem načtení stránky, což může generovat chybu serveru, pokud je váš server za bránou firewall. V dalším kroku předpokládejme, že brána firewall zablokovala soket. Upravíme kód appletu Connect, abychom získali přístup na jinou stránku na jiném webovém serveru.

Soubor Connect.java je k dispozici v „adresáři appletu Java“. (Najdete ji také níže.) Nejprve importuje netscape.server.applet. *.

importovat netscape.server.applet. *; 

Tento balíček obsahuje základní třídy pro vývoj appletů na straně serveru. Nejdůležitější třída v tomto balíčku je HttpApplet, nadtřída pro všechny applety na straně serveru. Jak vidíte v Connectu (níže), jedinou metodou, kterou je potřeba implementovat applet na straně serveru, je běh metoda. Tato metoda je vyvolána pokaždé, když applet obdrží „přístup“. The běh metoda pro připojení otevře soket na „hostiteli“ a načte „požadavek“ před přesměrováním výstupu na klienta. Chceme změnit proměnnou „hostitel“, aby odkazovala na stroj viditelný z našeho webového serveru. Budeme také chtít změnit proměnnou „request“, aby odkazovala na stránku nového „hostitele“.

importovat netscape.server.applet. *; import java.io.PrintStream; importovat java.io.InputStream; importovat java.io.OutputStream; import java.io.DataInputStream; import java.net.Socket; třída Connect rozšiřuje HttpApplet {public void run () vyvolá výjimku {String host = "www.meer.net"; // změnit tento int port = 80; String request = "ZÍSKAT /barn/index.html HTTP / 1.0 \ n"; // i to Socket s = new Socket (host, port); OutputStream os = s.getOutputStream (); PrintStream op = nový PrintStream (os); op. println (požadavek); InputStream je = sam (); DataInputStream di = nový DataInputStream (je); Řetězec; if (returnNormalResponse ("text / html")) {PrintStream out = getOutputStream (); out.println ("& lth1 & gtData na" + hostitel + "port" + port + ""); out.println (" požadavek: "+ požadavek +"
"); while ((line = di.readLine ())! = null) out.println (line);}}}

Po provedení změn „hostitel“ a „požadavek“ je dalším krokem překompilování aplikace Connect.

V systému Windows použijte standardní kompilátor javac se sadou classpath, která obsahuje serv2_0.zip. javac -classpath .. \ classes \ serv2_0.zip Connect.java.

Pod Unixem poskytuje Netscape kompilátor Java (javac) v adresáři nad adresářem appletu Java. Tento javac je ve skutečnosti skript, který volá java sun.tools.javac.Hlavní provést kompilaci. Na některých systémech sun.tools.javac.Hlavní překladač používá nové metody 1.1 JDK, jako je java.lang.Character.isJavaLetterOrDigit (), což může vývojářům bez 1.1 JDK způsobit docela problém. Skvělou alternativou je použití standardního kompilátoru javac, který jste vždy používali, javac -classpath ../classes/serv2_0.zip Connect.java. Pokud chcete použít poskytnutý skript javac, stačí nahradit „javac„s“../javac."

Během této kompilace se může zobrazit chyba, která říká:

Connect.java:1: Balíček netscape.server.applet nebyl při importu nalezen. importovat netscape.server.applet. *; ^ 1 chyba 

Této chyby se nemusíte obávat. Soubor třídy je vytvořen normálně a bude fungovat dobře. Této chybě se můžete vyhnout, pokud ve svých příkazech k importu odstraníte zástupné znaky.

Pod Unixem poskytuje Netscape makefile v adresáři appletu Java pro zpracování kompilace appletu. Makefile bohužel používá zástupný znak '%', což je přípona mk / nmake a není vždy k dispozici. Kód problému je uveden níže.

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

Alternativou je použití pravidla .suffixes. Upravte první řádek makefile na:

.SUFFIXES: .java .class a nahradit cílové řádky% .class .java.class: javac -classpath ../classes/serv2_0.zip $ < 

Můžete si všimnout, že jsem odstranil ../ takže makefile vyvolá standardní kompilátor javac. Chcete-li otestovat tento nový makefile, znovu uložte soubor Connect.java a zkuste „make“.

Pokud byste právě teď znovu načetli stránku // servername / server-java / Connect, stále by se vám zobrazila stránka „Barn“. Důvodem je, že třídy Java jsou načteny na server v době spuštění prostřednictvím funkce init v souboru obj.conf. Chcete-li načíst nové změny, musíte server zastavit a znovu spustit. V některých systémech musíte k zastavení a spuštění použít Správce serveru. Restartování příkazového řádku někdy vede k „chybě serveru“ pro následující požadavky appletu. Jakmile zastavíte a spustíte server, zkuste znovu applet Připojit. Netscape měl načíst nový Connect kód pro zobrazení stránky, kterou jste vybrali.

Pojďme to s API myslet vážně

Gratulujeme! Právě jste sestavili a otestovali svůj první kód Java na straně serveru. Nyní uvádíme několik metod, které máte k dispozici.

S následujícími metodami můžete dělat většinu své práce:

PrintStream getOutputStream () vyvolá IOException; 

vrací a PrintStream, kterou můžete použít k vytištění vaší odpovědi klientovi. Nahrazuje to System.out.

Hashtable getFormData () vyvolá IOException; 

vrací Hashtable s uložením dvojic název-hodnota požadavku HTTP. Řetězce hodnot jsou dekódovány z jejich formy kódované URI. Hází to IOException pokud nejsou k dispozici žádné údaje formuláře.

String getFormField (String fieldName) vyvolá IOException; 

Můžeš použít getFormField pro načtení pouze jednoho pole. Také to hodí IOException pokud nejsou k dispozici žádná data formuláře.

boolean returnNormalResponse (String contentType) vyvolá IOException; 

spustí odpověď HTTP s typem obsahu nastaveným tak, jak zadáte pomocí jeho parametru. Vrátí true, pokud se jednalo o požadavek „get“ nebo „post“, a false, pokud se jednalo o požadavek „head“.

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

spustí odpověď HTTP za účelem nahlášení chyby. Trvá typ obsahu, stav (například HttpApplet.BAD_REQUEST, což představuje standardní chybový kód 400) a volitelný řetězec udávající důvod chyby.

Při vývoji vašich appletů na straně serveru můžete použít desítky dalších metod. Netscape nainstaluje průvodce API na své servery. Průvodce najdete na /usr/ns-home/bin/httpd/admin/html/manual/pg/javapi.htm pod Unixem nebo na C: \ Program Files \ Netscape \ Server \ bin \ httpd \ admin \ html \ manual \ pg \ javapi.htm pod Windows.

Ahoj světe!

Nyní použijeme vše, co jsme se naučili, k napsání (uhodli jste!) Hello World na straně serveru. Následující applet pozdravuje Svět pokud a cílová je zadáno pole - v tom případě místo toho pozdraví cíl.

import netscape.server.applet.HttpApplet; import java.io.IOException; import java.io.PrintStream; třída Hello rozšiřuje HttpApplet {/ * Ve výchozím nastavení pozdravujeme „World“ * / String helloTarget = "World“; / * run () je vyvolán pro zpracování požadavku * / public void run () vyvolá výjimku {/ * getOutputStream () nám umožňuje mluvit s klientem * / PrintStream out = getOutputStream (); / * Pomocí getFormField () zjistěte, zda máme pozdravit * někoho jiného než „svět“. * / String formTarget = null; try {formTarget = getFormField ("target"); if (formTarget! = null) {helloTarget = formTarget; }} catch (IOException e) {/ * Budeme ignorovat výjimky způsobené "chybějícím řetězcem dotazu" * / if (! e.getMessage (). startsWith ("chybějící řetězec dotazu")) {handleException (e, out) ; }} / * Řekněte ahoj * / if (returnNormalResponse ("text / html")) {try {out.println ("Hello," + helloTarget + "!"); } catch (Výjimka e) {handleException (e, out); }}} private void handleException (Exception e, PrintStream out) {try {returnErrorResponse ("text / html", SERVER_ERROR, "Exception thrown"); } catch (IOException ioe) {} // pokusit se vytisknout původní výjimku out.print ("& lth1>"); out.print (e); out.print ("\ n "); out.print (" & ltpre> "); e.printStackTrace (out); // musí být zadán alternativní PrintStream out.print ("
"); vrátit se; } }

Tato podtřída appletu na straně serveru z netscape.server.applet.HttpApplet a přepíše běh() metoda stejně jako všechny applety na straně serveru v Netscape. Rychle získává svůj výstupní proud s voláním na getOutputStream, kterou použije k vytištění „Ahoj“ (nebo k vytištění důvodu selhání). To volá getFormField zkontrolovat, zda existuje alternativní cíl, který se má použít, a poté vrátí normální odpověď „text / html“ a nakonec provede skutečnou práci s tiskem „Dobrý den“. Všimněte si, že kontroluje návratovou hodnotu z returnNormalResponse () volání a nedělá nic, pokud vrátí hodnotu false. Pokud tak neučiníte, vrátíte data i pro hlava žádosti.

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