Programování

Psát programy CGI v Javě

Rozhraní Common Gateway (CGI) je standard pro psaní programů, které mohou komunikovat prostřednictvím webového serveru s klientem, na kterém je spuštěn webový prohlížeč. Tyto programy umožňují vývojáři webu doručovat dynamické informace (obvykle ve formě HTML) prostřednictvím prohlížeče. Program CGI lze psát v jakémkoli jazyce, včetně jazyka Java, který lze spustit na vašem webovém serveru. Programy CGI se běžně používají k přidávání vyhledávačů, aplikací návštěvních knih, databázových dotazovacích strojů, interaktivních fór uživatelů a dalších interaktivních aplikací na webové stránky.

Stručně řečeno, program CGI musí interpretovat informace, které mu byly zaslány, nějakým způsobem je zpracovat a vygenerovat odpověď, která bude odeslána zpět klientovi.

Většina vstupu do programu CGI se do něj předává prostřednictvím proměnných prostředí. Tento článek předvede, jak tyto proměnné prostředí odeslat do programu Java CGI. Zbytek vstupu (pokud existuje) je předán do programu CGI jako standardní vstup, který lze číst přímo vaším programem.

Zpracování může být stejně jednoduché jako připojení informací k souboru nebo tak složité jako vyžádání dat z databáze.

Protože program CGI může vrátit nesčetné množství typů dokumentů, musí program CGI umístit na svůj výstup krátkou hlavičku (text ASCII), aby klient věděl, jak interpretovat informace, které generuje. Programy CGI nejčastěji generují HTML. Níže najdete knihovnu funkcí včetně té, která generuje příslušnou hlavičku pro HTML. Po záhlaví program CGI jednoduše vygeneruje tělo výstupu v jeho nativní podobě.

Předání prostředí CGI do programu Java

Psaní programu CGI v Javě je poměrně snadné, jakmile pochopíte problémy. Nejdůležitější je především zabalit provádění programu Java do jiného skriptu. Skutečný skript vyvolaný na vašem webovém serveru bude tedy unixový skript prostředí nebo dávkový soubor Windows (nebo ekvivalent), který jednoduše předá proměnné prostředí CGI do vašeho programu Java.

Vzhledem k tomu, že Java již neposkytuje metodu přímého přístupu k proměnným prostředí (soubor System.getenv () Metoda byla v nejnovější verzi JDK zakázána), navrhuji předat každou proměnnou prostředí CGI do programu Java pomocí parametru příkazového řádku -D na interpretovi Java. Níže ukážu, jak použít parametr -D.

Knihovna funkcí, kterou poskytuji níže, předpokládá, že jste použili výše popsaný přístup; používá System.getProperty () metoda přístupu k těmto parametrům příkazového řádku. Pokud váš program potřebuje použít některou z proměnných prostředí CGI, můžete k nim přistupovat stejným způsobem. Například pokud chcete získat přístup k proměnné prostředí SERVER_NAME, můžete to udělat následovně:

 Řetězec server_name = System.getProperty ("cgi.server_name"); 

Uvědomte si, že neprojdu Všechno proměnných prostředí CGI do mého Java programu. Předávám jen ty hlavní. Začlenění ostatních ponechám jako cvičení pro čtenáře.

Následující příklad ukazuje soubor skriptu Unix s názvem ahoj.cgi vyvolání Java programu s názvem Ahoj. Všimněte si, že parametr příkazového řádku -D předává proměnné prostředí CGI do programu Java:

$ Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO ahoj 

Toto řešení nefunguje dobře na platformách Windows 95 a NT, protože na příkazovém řádku mohou existovat limity počtu povolených znaků. Alternativním přístupem může být jednoduše zapsat každou z proměnných prostředí a jejich přidružené hodnoty do dočasného souboru (samozřejmě s jedinečným názvem souboru). Poté můžete předat název tohoto souboru do svého programu Java a nechat jej přečíst a analyzovat páry proměnných / hodnot prostředí. Po dokončení používání nezapomeňte dočasný soubor smazat! Toto cvičení je opět ponecháno na čtenáři.

Knihovna Java CGI

Abych usnadnil zdlouhavý úkol zpracování vstupů CGI, napsal jsem třídu Java (opravdu knihovnu funkcí), kterou můžete využít k omezení některých špinavých prací. Tato knihovna se pokouší duplikovat funkce ve velmi populárním Perlu cgi-lib.pl knihovna. Níže uvedený kód jsem zdokumentoval pomocí komentářů ve stylu javadoc, abyste mohli přímo z kódu generovat dokumentaci HTML. (Použití javadoc cgi_lib.java vygenerovat cgi_lib.html.)

Zde je zdrojový kód a dokumentace pro knihovnu.

Psaní prvního programu Java CGI

Zde je příklad, který ukazuje, jak cgi_lib.java Knihovna může být použita k napsání CGI programu. Napíšeme jednoduchý program, který zpracuje můj formulář „Hello There“. Tento jednoduchý formulář vyzve uživatele k zadání jména a e-mailové adresy. Tady je formulář (ahoj.html), které chceme zpracovat:

& ltHTML> & ltHEAD> & ltTITLE & gtAhoj a vítejte! & ltBODY> & ltH1 ALIGN = CENTRUM & gtAhoj a vítejte & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> Jak se jmenujete? & ltINPUT TYPE = "text" NAME = "name"> & ltp> Jaká je vaše e-mailová adresa? & ltINPUT SIZE = 40 TYPE = "text" NAME = "email"> & ltINPUT TYPE = "submit" VALUE = "Odeslat" & gt. & ltP> & lthr>

Pojďme napsat program Java pro zpracování formuláře „Hello There“.

Nejprve musíme klienta informovat, že náš program bude generovat HTML. The Záhlaví () metoda v cgi_lib.java vytvoří řetězec, který potřebujeme, takže začneme voláním této metody a odesláním řetězce standardně pomocí System.out.println systémové volání.

 // // Vytiskněte požadovanou hlavičku CGI. // System.out.println (cgi_lib.Header ()); 

Za druhé, chceme zpracovat údaje formuláře, které nám poslal prohlížeč. The ReadParse metoda v cgi_lib.java dělá vše, co pro nás funguje, a vrátí výsledek v instanci Hashtable. V tomto případě bude Hashtable obsahovat dvě klíčové hodnoty po analýze dat formuláře. Jedním bude vstupní pole „jméno“ a druhým vstupní pole „e-mail“. Hodnoty spojené s každým z těchto klíčů budou jakékoli, co uživatel zadal do těchto vstupních polí ve formuláři „Hello There“.

 // // Parse the form data into a Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); 

Nyní, když jsme analyzovali data formuláře, můžeme s daty, která nám byla zaslána, provést jakékoli zpracování, které bychom chtěli. Pak můžeme vygenerovat nějaký HTML, který se odešle zpět do prohlížeče uživatele. V tomto jednoduchém programu nebudeme s daty provádět žádné zpracování; jednoduše zopakujeme informace poskytnuté uživatelem. Budeme používat dostat metoda na objektu Hashtable k extrakci hodnot formuláře do řetězců, které můžeme použít v našem programu. Následující příklad ukazuje, jak bychom extrahovali název, který uživatel zadal do objektu String.

 Název řetězce = (řetězec) form_data.get ("name"); 

Pojďme to všechno spojit do jednoduchého programu. Zde je aplikace Java, kterou můžeme použít ke zpracování formuláře „Hello There“ (ahoj.java):

import java.util. *; importovat java.io. *; třída ahoj {public static void main (String args []) {// // Zde je minimalistický program CGI, který používá cgi_lib // // // Tisk požadované hlavičky CGI. // System.out.println (cgi_lib.Header ()); // // Parse the form data into a Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Vytvořte horní část vrácené stránky HTML // Název řetězce = (Řetězec) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Hello There" + name + "!")); System.out.println ("& lth1 align = center & gt Ahoj" + jméno + "!"); System.out.println (" Zde jsou páry název / hodnota z formuláře: "); // // Vytiskne páry název / hodnota odeslané z prohlížeče. // System.out.println (cgi_lib.Variables (form_data)); // // Tisk proměnných prostředí odeslaných ze skriptu Unix. // System.out.println ("Zde jsou páry proměnných / hodnot prostředí CGI" + "předané ze skriptu UNIX:") ; System.out.println (cgi_lib.Environment ()); // // Vytvořte spodní část vrácené stránky HTML, abyste ji čistě zavřeli. // System.out.println (cgi_lib.HtmlBot ());}} 

Závěr

S tímto úvodem do programování CGI v Javě byste měli být na cestě ke zcela novému způsobu programování webových aplikací na straně serveru. Mějte na paměti, že protokol CGI poskytuje pouze jeden způsob komunikace mezi klientským prohlížečem a webovým serverem. Skládačka World Wide Web Consortium (viz část Zdroje níže) a další, jako je Sun's Jeeves, přicházejí s lepšími řešeními, která zahrnují psaní servletů Java, které můžete zavěsit na svůj webový server. Ale to je téma na jiný den. Bavte se!

Pat Durante je senior softwarový inženýr ve společnosti TASC, Inc. v Readingu, MA. TASC je společnost využívající informační technologie ve výši 00 milionů, která se specializuje na vývoj a integraci pokročilých informačních systémů a služeb. Pat konstruuje objektově orientované aplikace již čtyři roky. Je vedoucím Objektově zaměřené speciální zájmové skupiny TASC a spoluzakladatelem zájmové skupiny Java TASC. Patova webová adresa je: //members.aol.com/durante.

Další informace o tomto tématu

  • Informace o rozhraní Common Gateway (CGI) najdete na adrese:

    //hoohoo.ncsa.uiuc.edu/cgi

  • Skládačka World Wide Web Consortium je popsána na:

    //www.w3.org/pub/WWW/Jigsaw

  • Další informace o Sun's Jeeves naleznete na:

    //www.javasoft.com/products/jeeves/index.html

Tento příběh „Psaní programů CGI v Javě“ původně publikoval JavaWorld.