Programavimas

Parašykite CGI programas Java kalba

„Common Gateway Interface“ (CGI) yra standartas, skirtas rašyti programas, kurios gali sąveikauti per interneto serverį su klientu, valdančiu žiniatinklio naršyklę. Šios programos leidžia žiniatinklio kūrėjui pateikti dinaminę informaciją (paprastai HTML pavidalu) per naršyklę. CGI programą galima parašyti bet kuria kalba, įskaitant „Java“, kurią gali vykdyti jūsų tinklo serveris. CGI programos paprastai naudojamos paieškos sistemoms, svečių knygų programoms, duomenų bazių užklausų varikliams, interaktyvių vartotojų forumams ir kitoms interaktyvioms programoms pridėti prie svetainių.

Kalbant labai paprastai, CGI programa turi interpretuoti jai atsiųstą informaciją, kažkaip apdoroti informaciją ir sugeneruoti atsakymą, kuris bus išsiųstas atgal klientui.

Didžioji dalis įvesties į CGI programą perduodama į ją per aplinkos kintamuosius. Šiame straipsnyje bus parodyta, kaip šiuos aplinkos kintamuosius siųsti į „Java CGI“ programą. Likusi įvestis (jei yra) perduodama į CGI programą kaip standartinė įvestis, kurią jūsų programa gali perskaityti tiesiogiai.

Apdorojimas gali būti toks pat paprastas kaip informacijos pridėjimas prie failo arba toks pat sudėtingas kaip duomenų prašymas iš duomenų bazės.

Kadangi CGI programa gali pateikti begalę dokumentų tipų, CGI programa turi ant savo išvesties įdėti trumpą antraštę (ASCII tekstą), kad klientas žinotų, kaip interpretuoti jos sukurtą informaciją. Dažniausiai CGI programos generuoja HTML. Žemiau rasite funkcijų biblioteką, įskaitant tą, kuri sugeneruoja tinkamą HTML antraštę. Po antraštės CGI programa tiesiog sugeneruoja išvesties turinį savo gimtąja forma.

CGI aplinkos perkėlimas į „Java“ programą

Parašyti CGI programą Java yra gana lengva, kai suprasite problemas. Visų pirma, jūs turite apvynioti „Java“ programos vykdymą kitame scenarijuje. Taigi, jūsų žiniatinklio serveryje tikrasis scenarijus bus „Unix“ apvalkalo scenarijus arba „Windows“ paketinis failas (arba lygiavertis), kuris tiesiog perduoda CGI aplinkos kintamuosius į jūsų „Java“ programą.

Kadangi Java nebeteikia metodo, kaip tiesiogiai pasiekti aplinkos kintamuosius ( System.getenv () metodas buvo išjungtas naujausiame JDK leidime), siūlau kiekvieną CGI aplinkos kintamąjį perduoti „Java“ programai, naudojant „Java“ vertėjo komandinės eilutės parametrą. Aš jums parodysiu, kaip naudoti toliau nurodytą parametrą -D.

Funkcijų, kurias pateikiu žemiau, bibliotekoje daroma prielaida, kad jūs naudojote aukščiau aprašytą metodą; jis naudoja System.getProperty () metodas pasiekti tuos komandinės eilutės parametrus. Jei jūsų programai reikia naudoti bet kurį iš CGI aplinkos kintamųjų, galite juos pasiekti taip pat. Pvz., Jei norite pasiekti „SERVER_NAME“ aplinkos kintamąjį, galite tai padaryti taip:

 String server_name = System.getProperty ("cgi.serverio_vardas"); 

Žinok, kad aš nepraeinu visi CGI aplinkos kintamųjų į mano „Java“ programą. Aš praeinu tik pagrindinius. Kitų įtraukimą paliksiu skaitytojo mankšta.

Šiame pavyzdyje rodomas „Unix“ scenarijaus failas, vadinamas labas.cgi iškviesdama „Java“ programą, vadinamą Sveiki. Atkreipkite dėmesį, kad komandinės eilutės parametras -D perduoda CGI aplinkos kintamuosius į „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_ERVER_PORT Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO labas 

Šis sprendimas neveikia „Windows 95“ ir „NT“ platformose, nes komandinėje eilutėje gali būti leidžiamų simbolių skaičiaus apribojimai. Alternatyvus būdas gali būti tiesiog įrašyti visus aplinkos kintamuosius ir su jais susijusias reikšmes į laikiną failą (žinoma, su unikaliu failo pavadinimu). Tada galite perduoti šio failo pavadinimą į savo „Java“ programą, paprašyti ją perskaityti tą failą ir išanalizuoti aplinkos kintamųjų / reikšmių poras. Nepamirškite ištrinti laikino failo, kai baigsite jį naudoti! Vėlgi, šis pratimas paliekamas skaitytojui.

„Java“ CGI biblioteka

Kad palengvintumėte varginančią CGI įvesties apdorojimo užduotį, parašiau „Java“ klasę (iš tikrųjų funkcijų biblioteką), kurią galite naudoti norėdami sumažinti kai kuriuos nešvarius darbus. Ši biblioteka bando pakartoti labai populiaraus „Perl“ funkcionalumą cgi-lib.pl biblioteka. Aš dokumentavau žemiau pateiktą kodą naudodamas javadoc stiliaus komentarus, kad galėtumėte generuoti HTML dokumentaciją tiesiai iš kodo. (Naudokite javadoc cgi_lib.java generuoti cgi_lib.html.)

Čia yra bibliotekos šaltinio kodas ir dokumentai.

Pirmosios „Java“ CGI programos rašymas

Štai pavyzdys, parodantis, kaip cgi_lib.java biblioteka gali būti naudojama CGI programai rašyti. Parašysime paprastą programą, kuri apdoros mano formą „Sveiki!“. Ši paprasta forma paprašys vartotojo įvesti vardą ir el. Pašto adresą. Čia yra forma (labas.html), kuriuos norime apdoroti:

& ltHTML> & ltHEAD> & ltTITLE & gtSveiki ir Sveiki! & ltBODY> & ltH1 ALIGN = CENTRAS & gtSveiki, Sveiki! & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> Koks jūsų vardas? & ltINPUT TYPE = "text" NAME = "name"> & ltp> Koks jūsų el. pašto adresas? & ltINPUT SIZE = 40 TYPE = "tekstas" NAME = "el. paštas"> & ltINPUT TYPE = "pateikti" VALUE = "Pateikti" & gt. & ltP> & lthr>

Parašykime „Java“ programą, kad apdorotume formą „Sveiki!“.

Pirmiausia turime pranešti klientui, kad mūsų programa generuos HTML. Antraštė () metodas cgi_lib.java sukuria mums reikalingą eilutę, todėl pradėsime nuo to metodo iškvietimo ir naudodami System.out.println sistemos skambutis.

 // // Atspausdinkite reikiamą CGI antraštę. // System.out.println (cgi_lib.Header ()); 

Antra, norime apdoroti formos duomenis, kuriuos mums atsiuntė naršyklė. „ReadParse“ metodas cgi_lib.java daro viską, kas mums tinka, ir grąžina rezultatą „Hashtable“ pavyzdžiu. Tokiu atveju, analizuojant formos duomenis, „Hashtable“ bus dvi pagrindinės vertės. Vienas bus įvesties laukas „vardas“, kitas - „el. Pašto“ įvesties laukas. Vertės, susietos su kiekvienu iš šių raktų, bus bet kokios, kurias vartotojas įvedė į tuos įvesties laukus formoje „Sveiki!“.

 // // Analizuokite formos duomenis į „Hashtable“. // Hashtable form_data = cgi_lib.ReadParse (System.in); 

Dabar, kai analizuojame formos duomenis, galime atlikti bet kokį norimą apdorojimą naudodamiesi mums atsiųstais duomenimis. Tada galime sugeneruoti šiek tiek HTML, kurį norite nusiųsti atgal į vartotojo naršyklę. Šioje paprastoje programoje mes neketiname apdoroti duomenų; mes tiesiog atkartosime vartotojo pateiktą informaciją. Mes ketiname naudoti gauti metodas Hashtable objekte išgauti formos reikšmes į eilutes, kurias galime naudoti savo programoje. Šis pavyzdys rodo, kaip mes išskleisime vardą, kurį vartotojas įvedė į String objektą.

 Stygos pavadinimas = (String) form_data.get ("vardas"); 

Suveskime visa tai į paprastą programą. Čia yra „Java“ programa, kurią galime naudoti „Hello There“ formai apdoroti (labas.java):

importuoti java.util. *; importuoti java.io. *; class hello {public static void main (String args []) {// // Čia pateikiama minimalistinė CGI programa, naudojanti cgi_lib // // // Spausdinti reikiamą CGI antraštę. // System.out.println (cgi_lib.Header ()); // // Analizuokite formos duomenis į „Hashtable“. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Sukurkite grąžinto HTML puslapio viršų // String name = (String) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Sveiki, ten" + vardas + "!")); System.out.println ("& lth1 lygiuoti = centras & gtSveikas ten" + vardas + "!"); System.out.println (" Čia pateikiamos pavadinimo / vertės poros iš formos: "); // // Spausdinti iš naršyklės atsiųstas vardo / vertės poras. // System.out.println (cgi_lib.Variables (form_data)); // // Spausdinti aplinkos kintamuosius, atsiųstus iš „Unix“ scenarijaus. // System.out.println („Čia yra CGI aplinkos kintamieji / reikšmių poros„ + “, perduoti iš UNIX scenarijaus:") ; System.out.println (cgi_lib.Environment ()); // // Sukurkite grąžinamo HTML puslapio apačią, kad jis būtų švariai uždarytas. // System.out.println (cgi_lib.HtmlBot ());}} 

Išvada

Turėdami šį CGI programavimo „Java“ įvadą, turėtumėte žengti į visiškai naują būdą, kaip programuoti savo interneto programų serverio pusę. Atminkite, kad CGI protokolas suteikia tik vieną būdą bendrauti tarp kliento naršyklės ir žiniatinklio serverio. „World Wide Web Consortium“ „Jigsaw“ (žr. Toliau pateiktą skyrių „Ištekliai“) ir kiti, pavyzdžiui, „Sun's Jeeves“, siūlo geresnius sprendimus, kurie apima „Java“ servletų rašymą, kuriuos galite pakabinti savo interneto serveryje. Bet tai yra kitos dienos tema. Pasilinksmink!

Pat Durante yra vyresnysis programinės įrangos inžinierius TASC, Inc., Reading, MA. TASC yra 00 milijonų taikomųjų informacinių technologijų įmonė, kuri specializuojasi pažangių informacinių sistemų ir paslaugų kūrime ir integravime. Pat jau ketverius metus kuria objektines programas. Jis yra TASC „Object Oriented Special Interest Group“ vadovas ir „TASC Java“ interesų grupės įkūrėjas. Pat interneto svetainės adresas yra: //members.aol.com/durante.

Sužinokite daugiau apie šią temą

  • Informaciją apie „Common Gateway Interface“ (CGI) galite rasti:

    //hoohoo.ncsa.uiuc.edu/cgi

  • „World Wide Web Consortium“ dėlionė aprašyta:

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

  • Daugiau apie „Sun's Jeeves“ rasite:

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

Šią istoriją „Rašykite CGI programas Java“ iš pradžių paskelbė „JavaWorld“.

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