Napišite CGI programe na Javi

Common Gateway Interface (CGI) standard je za pisanje programa koji putem web poslužitelja mogu komunicirati s klijentom koji pokreće web preglednik. Ti programi omogućuju web programeru da pruža dinamične informacije (obično u obliku HTML-a) putem preglednika. CGI program može se napisati na bilo kojem jeziku, uključujući Javu, koji vaš web poslužitelj može izvršiti. CGI programi obično se koriste za dodavanje tražilica, aplikacija knjiga gostiju, mehanizama za upite baza podataka, interaktivnih korisničkih foruma i drugih interaktivnih aplikacija na web stranice.

U vrlo osnovnim uvjetima, CGI program mora protumačiti informacije koje su mu poslane, obraditi ih na neki način i generirati odgovor koji će se poslati natrag klijentu.

Većina unosa u CGI program prenosi se u njega kroz varijable okoline. Ovaj će članak pokazati kako poslati ove varijable okruženja u Java CGI program. Ostatak unosa (ako postoji) prenosi se u CGI program kao standardni ulaz koji vaš program može izravno pročitati.

Obrada može biti jednostavna kao dodavanje podataka datoteci ili složena kao traženje podataka iz baze podataka.

Budući da CGI program može vratiti bezbroj vrsta dokumenata, CGI program mora postaviti kratko zaglavlje (ASCII tekst) na svoj izlaz kako bi klijent znao kako protumačiti informacije koje generira. CGI programi najčešće generiraju HTML. Ispod ćete pronaći biblioteku funkcija, uključujući onu koja generira odgovarajuće zaglavlje za HTML. Nakon zaglavlja, CGI program jednostavno generira tijelo rezultata u izvornom obliku.

Prenošenje CGI okruženja u program Java

Pisanje CGI programa na Javi prilično je jednostavno učiniti nakon što shvatite probleme. Prvo i najvažnije, izvršavanje Java programa morate umotati u drugu skriptu. Dakle, stvarna skripta pozvana na vašem web poslužitelju bit će skripta ljuske Unix ili Windows batch datoteka (ili ekvivalent) koja jednostavno prenosi varijable okruženja CGI u vaš Java program.

Budući da Java više ne nudi metodu za izravni pristup varijablama okruženja ( System.getenv()metoda je onemogućena u najnovijem izdanju JDK-a), predlažem prosljeđivanje svake varijable okruženja CGI u program Java pomoću parametra -D naredbenog retka na Java interpreteru . U nastavku ću vam pokazati kako se koristi parametar -D.

Biblioteka funkcija koju donosim u nastavku pretpostavlja da ste koristili gore opisani pristup; koristi System.getProperty()metodu za pristup tim parametrima naredbenog retka. Ako vaš program treba koristiti bilo koju od varijabli okruženja CGI, možete im pristupiti na isti način. Na primjer, ako želite pristupiti varijabli okruženja SERVER_NAME, možete to učiniti na sljedeći način:

 Niz ime_poslužitelja = System.getProperty ("cgi.server_name"); 

Imajte na umu da ne prenosim sve varijable okruženja CGI u svoj Java program. Prolazim samo one glavne. Uključivanje ostalih ostavit ću kao vježbu za čitatelja.

Sljedeći primjer prikazuje datoteku skripte Unix koja se zove hello.cgipozivanje Java programa pod nazivom hello. Imajte na umu da parametar -D naredbenog retka prosljeđuje varijable okruženja CGI u Java program:

#! / 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 -PORT = SERVER_NAMEDPORT Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO zdravo 

Ovo rješenje ne funkcionira dobro na Windows 95 i NT platformama jer na naredbenom retku mogu postojati ograničenja u broju znakova. Alternativni pristup mogao bi biti jednostavno zapisivanje svake od varijabli okruženja i njihovih pridruženih vrijednosti u privremenu datoteku (naravno s jedinstvenim imenom datoteke). Zatim, možete proslijediti ime ove datoteke u svoj Java program i zatražiti da je pročita i raščlaniti parove varijable / vrijednosti okoline. Ne zaboravite izbrisati privremenu datoteku kad završite s upotrebom! Opet, ova je vježba prepuštena čitatelju.

Java CGI knjižnica

Kako bih olakšao dosadan zadatak obrade CGI ulaza, napisao sam Java klasu (stvarno biblioteku funkcija) koju možete iskoristiti za smanjivanje nekih prljavih poslova. Ova knjižnica pokušava duplicirati funkcionalnost vrlo popularne Perlove cgi-lib.plknjižnice. Dolje sam dokumentirao kod koristeći komentare u stilu javadoc, tako da možete generirati HTML dokumentaciju izravno iz koda. (Koristite javadoc cgi_lib.javaza generiranje cgi_lib.html.)

Evo izvornog koda i dokumentacije za knjižnicu.

Pisanje vašeg prvog Java CGI programa

Evo primjera koji pokazuje kako se cgi_lib.javaknjižnica može koristiti za pisanje CGI programa. Napisat ćemo jednostavan program koji obrađuje moj obrazac "Zdravo tamo". Ovaj jednostavni obrazac zatražit će od korisnika ime i adresu e-pošte. Evo obrasca ( hello.html) koji želimo obraditi:

& ltHTML> & ltHEAD> & ltTITLE & gtPozdrav i dobrodošli! & ltBODY> & ltH1 ALIGN = CENTAR & gtPozdrav i dobrodošlica & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> Kako se zovete? & ltINPUT TYPE = "text" NAME = "name"> & ltp> Koja je vaša adresa e-pošte? & ltINPUT SIZE = 40 TYPE = "text" NAME = "email"> & ltINPUT TYPE = "submit" VALUE = "Submit">. & ltP> & lthr>

Napišimo Java program za obradu obrasca "Zdravo tamo".

Prvo, moramo obavijestiti klijenta da će naš program generirati HTML. Header()Metoda u cgi_lib.javastvara niz nam treba, pa ćemo početi pozivom te metode i slanje string standardnoj se pomoću System.out.printlnsustava poziv.

// // Ispis traženog zaglavlja CGI. // System.out.println (cgi_lib.Header ());

Drugo, želimo obraditi podatke obrasca koje nam je poslao preglednik. ReadParseMetoda u cgi_lib.javase sve to rade za nas i vraća rezultat u slučaju nekog Hashtable. U ovom će slučaju Hashtable sadržavati dvije ključne vrijednosti nakon raščlanjivanja podataka obrasca. Jedno će biti polje za unos "ime", a drugo će biti polje za unos "e-pošte". Vrijednosti pridružene svakom od ovih ključeva bit će ono što je korisnik upisao u ta polja za unos na obrascu "Zdravo tamo".

// // Analizirajte podatke obrasca u tablicu raspršivanja. // Hashtable form_data = cgi_lib.ReadParse (System.in);

Sad kad smo raščlanili podatke obrasca, možemo obaviti bilo koju obradu koju želimo s podacima koji su nam poslani. Tada možemo generirati neki HTML koji ćemo poslati natrag u korisnikov preglednik. U ovom jednostavnom programu nećemo raditi obradu podataka; jednostavno ćemo ponoviti informacije koje je dostavio korisnik. Koristit ćemo getmetodu na objektu Hashtable za izdvajanje vrijednosti obrasca u nizove koje možemo koristiti u našem programu. Sljedeći primjer pokazuje kako bismo izdvojili ime koje je korisnik upisao u objekt String.

 Naziv niza = (Niz) form_data.get ("naziv"); 

Sad, stavimo sve to u jednostavan program. Evo Java aplikacije koju možemo koristiti za obradu obrasca "Zdravo tamo" ( hello.java):

uvoz java.util. *; import java.io. *; class hello {public static void main (String args []) {// // Ovdje je minimalistički CGI program koji koristi cgi_lib // // // Ispis traženog CGI zaglavlja. // System.out.println (cgi_lib.Header ()); // // Analizirajte podatke obrasca u tablicu raspršivanja. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Stvaranje vrha vraćene HTML stranice // Ime niza = (Niz) form_data.get ("ime"); System.out.println (cgi_lib.HtmlTop ("Zdravo" + ime + "!")); System.out.println ("& lth1 align = center & gtPozdrav tamo" + ime + "!"); System.out.println ("Evo parova imena / vrijednosti iz obrasca:"); // // Ispisati parove imena / vrijednosti poslanih iz preglednika. // System.out.println (cgi_lib.Variables (form_data));// // Ispis varijabli okruženja poslanih iz Unix skripte. // System.out.println ("Ovdje su CGI varijable / parovi vrijednosti" + "predani iz UNIX skripte:"); System.out.println (cgi_lib.Environment ()); // // Stvorite dno vraćene HTML stranice da biste je čisto zatvorili. // System.out.println (cgi_lib.HtmlBot ()); }}

Zaključak

Ovim uvodom u CGI programiranje na Javi trebali biste krenuti na potpuno novi način programiranja poslužiteljske strane vaših web aplikacija. Imajte na umu da CGI protokol pruža samo jedan način komunikacije između klijentskog preglednika i web poslužitelja. Jigsaw konzorcija za World Wide Web (pogledajte odjeljak Resursi u nastavku) i drugi poput Sun's Jeeves-a smišljaju bolja rješenja koja uključuju pisanje Java servleta koje možete objesiti s web poslužitelja. Ali to je tema za neki drugi dan. Zabavi se!

Pat Durante je stariji softverski inženjer u TASC, Inc. u Readingu, MA. TASC je 00 milijuna primijenjene informatičke tvrtke specijalizirana za razvoj i integraciju naprednih informacijskih sustava i usluga. Pat već četiri godine izrađuje objektno orijentirane aplikacije. Voditelj je TASC-ove Objektno orijentirane grupe za posebne interese i suosnivač TASC-ove Java Interest Group. Adresa web mjesta Pat-a je: //members.aol.com/durante.

Saznajte više o ovoj temi

  • Informacije o Common Gateway Interface (CGI) možete pronaći na:

    //hoohoo.ncsa.uiuc.edu/cgi

  • Jigsaw konzorcija World Wide Web opisan je na:

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

  • Više o Sun's Jeevesu potražite u:

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

Ovu priču, "Napišite CGI programe na Javi" izvorno je objavio JavaWorld.