Programovanie

Píšte programy CGI v jazyku Java

Common Gateway Interface (CGI) je štandard pre písanie programov, ktoré môžu interagovať prostredníctvom webového servera s klientom, na ktorom je spustený webový prehľadávač. Tieto programy umožňujú vývojárovi webu dodávať dynamické informácie (zvyčajne vo forme HTML) prostredníctvom prehľadávača. Program CGI môže byť napísaný v ľubovoľnom jazyku vrátane jazyka Java, ktorý môže vykonávať váš webový server. Programy CGI sa bežne používajú na pridávanie vyhľadávacích nástrojov, aplikácií návštevných kníh, databázových dotazovacích strojov, interaktívnych fór používateľov a ďalších interaktívnych aplikácií na webové stránky.

Program CGI musí vo veľmi základných pojmoch interpretovať informácie, ktoré mu boli zaslané, nejakým spôsobom ich spracovať a vygenerovať odpoveď, ktorá bude zaslaná späť klientovi.

Väčšina vstupov do programu CGI sa do neho odovzdáva prostredníctvom premenných prostredia. Tento článok predvedie, ako poslať tieto premenné prostredia do programu Java CGI. Zvyšok vstupu (ak existuje) je odovzdaný do programu CGI ako štandardný vstup, ktorý je možné načítať priamo z vášho programu.

Spracovanie môže byť také jednoduché ako priloženie informácií k súboru alebo také zložité ako vyžiadanie údajov z databázy.

Pretože program CGI dokáže vrátiť nespočetné množstvo typov dokumentov, musí program CGI na svoj výstup umiestniť krátku hlavičku (text ASCII), aby klient vedel, ako interpretovať informácie, ktoré generuje. Najčastejšie programy CGI generujú HTML. Ďalej nájdete knižnicu funkcií, vrátane tej, ktorá generuje príslušnú hlavičku pre HTML. Za hlavičkou program CGI jednoducho vygeneruje telo výstupu v pôvodnej podobe.

Prenesenie prostredia CGI do programu Java

Napísať program CGI v jazyku Java je celkom ľahké, ak pochopíte problémy. Najdôležitejšie je predovšetkým zabaliť vykonávanie programu Java do iného skriptu. Skutočným skriptom vyvolaným na vašom webovom serveri bude teda skript Unixového shellu alebo dávkový súbor Windows (alebo ekvivalent), ktorý jednoducho odovzdá premenné prostredia CGI do vášho programu Java.

Pretože Java už neposkytuje metódu priameho prístupu k premenným prostredia (súbor System.getenv () Metóda bola v najnovšom vydaní JDK zakázaná), navrhujem odovzdať každú premennú prostredia CGI do programu Java pomocou parametra -D príkazového riadku na interprete Java. Nižšie vám ukážem, ako používať parameter -D.

Knižnica funkcií, ktoré uvádzam nižšie, predpokladá, že ste použili vyššie popísaný prístup; používa System.getProperty () metóda prístupu k týmto parametrom príkazového riadku. Ak váš program potrebuje použiť ktorúkoľvek z premenných prostredia CGI, môžete k nim pristupovať rovnakým spôsobom. Napríklad ak chcete získať prístup k premennej prostredia SERVER_NAME, môžete to urobiť nasledovne:

 Reťazec server_name = System.getProperty ("cgi.server_name"); 

Uvedomte si, že neprechádzam všetko premenných prostredia CGI do môjho Java programu. Míňam iba tie hlavné. Zaradenie ostatných nechám ako cvičenie pre čitateľa.

Nasledujúci príklad ukazuje súbor skriptu Unix s názvom ahoj.cgi vyvolanie programu Java s názvom Ahoj. Všimnite si, že parameter príkazového riadku -D prenáša premenné prostredia CGI do programu Java:

#! / bin / sh java -Dcgi.content_type = $ CONTENT_TYPE -Dcgi.content_length = $ CONTENT_LENGTH -Dcgi.request_method = $ REQUEST_METHOD -Dcgi.query_string = $ QUERY_STRING -Dcgi.server_name = $ SERVER_NAME_D = $ SERVER_NAME -D = $ SERVER_NAME -D Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO ahoj 

Toto riešenie nefunguje dobre na platformách Windows 95 a NT, pretože v príkazovom riadku môžu byť obmedzené počty znakov. Alternatívnym prístupom by mohlo byť jednoducho zapísať každú z premenných prostredia a s nimi spojené hodnoty do dočasného súboru (samozrejme s jedinečným názvom súboru). Potom môžete vložiť názov tohto súboru do svojho programu Java a nechať ho prečítať a analyzovať páry premenných / hodnôt prostredia. Po dokončení používania nezabudnite dočasný súbor odstrániť! Toto cvičenie je opäť ponechané na čitateľa.

Knižnica Java CGI

Aby som uľahčil namáhavú úlohu pri spracovávaní vstupov CGI, napísal som triedu Java (skutočne knižnicu funkcií), ktorú môžete použiť na obmedzenie špinavej práce. Táto knižnica sa pokúša duplikovať funkcie veľmi populárneho Perlu cgi-lib.pl knižnica. Nižšie uvedený kód som zdokumentoval pomocou komentárov v štýle javadoc, aby ste mohli priamo z kódu vygenerovať dokumentáciu HTML. (Použite javadoc cgi_lib.java generovať cgi_lib.html.)

Tu je zdrojový kód a dokumentácia pre knižnicu.

Písanie vášho prvého programu Java CGI

Tu je príklad, ktorý ukazuje, ako cgi_lib.java knižnica sa dá použiť na napísanie CGI programu. Napíšeme jednoduchý program, ktorý spracuje môj formulár „Hello There“. Tento jednoduchý formulár vyzve používateľa na zadanie mena a e-mailovej adresy. Tu je formulár (ahoj.html), ktoré chceme spracovať:

& ltHTML> & ltHEAD> & ltTITLE & gtAhoj a Vitajte! & ltBODY> & ltH1 ALIGN = CENTRUM & gtAhoj a vitajte & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> Ako sa voláš? & ltINPUT TYPE = "text" NAME = "name"> & ltp> Aká je vaša e-mailová adresa? & ltINPUT SIZE = 40 TYPE = "text" NAME = "email"> & ltINPUT TYPE = "submit" VALUE = "Submit" & gt. & ltP> & lthr>

Poďme napísať program Java na spracovanie formulára „Hello There“.

Najskôr musíme klienta informovať, že náš program bude generovať HTML. The Hlavička () metóda v cgi_lib.java vytvorí reťazec, ktorý potrebujeme, takže začneme tým, že túto metódu zavoláme a reťazec pošleme štandardne pomocou znaku System.out.println systémové volanie.

 // // Vytlačte požadovanú hlavičku CGI. // System.out.println (cgi_lib.Header ()); 

Po druhé, chceme spracovať údaje formulára, ktoré nám poslal prehliadač. The ReadParse metóda v cgi_lib.java robí všetko, čo pre nás pracuje, a vráti výsledok v inštancii Hashtable. V takom prípade bude hashtable obsahovať dve kľúčové hodnoty po analýze údajov formulára. Jedným bude vstupné pole „meno“ a druhým bude vstupné pole „e-mail“. Hodnoty spojené s každým z týchto kľúčov budú akékoľvek, čo používateľ zadal do týchto vstupných polí vo formulári „Hello There“.

 // // Analyzuje údaje formulára do tabuľky Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); 

Teraz, keď sme analyzovali údaje formulára, môžeme s údajmi, ktoré nám boli zaslané, vykonať akékoľvek spracovanie, ktoré by sme chceli. Potom môžeme vygenerovať nejaký kód HTML, ktorý sa odošle späť do prehliadača používateľa. V tomto jednoduchom programe nebudeme robiť žiadne spracovanie údajov; jednoducho zopakujeme informácie poskytnuté používateľom. Budeme používať dostať metóda na objekte Hashtable na extrahovanie hodnôt formulára do reťazcov, ktoré môžeme použiť v našom programe. Nasledujúci príklad ukazuje, ako by sme extrahovali meno, ktoré používateľ zadal do objektu String.

 Názov reťazca = (Reťazec) form_data.get ("meno"); 

Poďme to všetko spojiť do jednoduchého programu. Tu je aplikácia Java, ktorú môžeme použiť na spracovanie formulára „Hello There“ (ahoj.java):

import java.util. *; import java.io. *; trieda ahoj {public static void main (String args []) {// // Toto je minimalistický program CGI, ktorý používa cgi_lib // // // Vytlačí požadovanú hlavičku CGI. // System.out.println (cgi_lib.Header ()); // // Analyzuje údaje formulára do tabuľky Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Vytvorenie hornej časti vrátenej stránky HTML // Názov reťazca = (Reťazec) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Hello Hello" + meno + "!")); System.out.println ("& lth1 align = center & gt Ahoj" + meno + "!"); System.out.println (" Tu sú páry mien / hodnôt z formulára: "); // // Vytlačte páry mien a hodnôt odoslané z prehliadača. // System.out.println (cgi_lib.Variables (form_data)); // // Tlač premenných prostredia odoslaných zo skriptu Unix. // System.out.println ("Tu sú páry premenných / hodnôt prostredia CGI" + "odovzdané zo skriptu UNIX:") ; System.out.println (cgi_lib.Environment ()); // // Vytvorte spodok vrátenej stránky HTML, aby ste ju úplne zavreli. // System.out.println (cgi_lib.HtmlBot ());}} 

Záver

S týmto úvodom do programovania CGI v Jave by ste mali byť na ceste k úplne novému spôsobu programovania vašich webových aplikácií na strane servera. Pamätajte, že protokol CGI poskytuje iba jeden spôsob komunikácie medzi prehľadávačom klienta a webovým serverom. Skladačka World Wide Web Consortium (pozri časť Zdroje nižšie) a ďalšie, ako napríklad Sun's Jeeves, prichádzajú s lepšími riešeniami, ktoré zahŕňajú písanie servletov Java, ktoré môžete zavesiť na svojom webovom serveri. Ale to je téma na iný deň. Bavte sa!

Pat Durante je senior softvérový inžinier v spoločnosti TASC, Inc. v Readingu, MA. TASC je 00 miliónov spoločností v oblasti aplikovaných informačných technológií, ktorá sa špecializuje na vývoj a integráciu pokročilých informačných systémov a služieb. Pat sa venuje konštrukcii objektovo orientovaných aplikácií už štyri roky. Je vodcom objektovo orientovanej špeciálnej záujmovej skupiny TASC a spoluzakladateľ záujmovej skupiny Java TASC. Adresa Patovej webovej stránky je: //members.aol.com/durante.

Získajte viac informácií o tejto téme

  • Informácie o rozhraní Common Gateway (CGI) nájdete na adrese:

    //hoohoo.ncsa.uiuc.edu/cgi

  • Skladačka World Wide Web Consortium je opísaná na:

    //www.w3.org/pub/WWW/Skladačka

  • Viac informácií o Sun's Jeeves nájdete na:

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

Tento príbeh, „Písanie programov CGI v Jave“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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