Programmering

Skriv CGI-programmer i Java

Common Gateway Interface (CGI) er en standard for å skrive programmer som kan samhandle via en webserver med en klient som kjører en nettleser. Disse programmene tillater en webutvikler å levere dynamisk informasjon (vanligvis i form av HTML) via nettleseren. Et CGI-program kan skrives på hvilket som helst språk, inkludert Java, som kan kjøres av webserveren din. CGI-programmer brukes ofte til å legge til søkemotorer, gjestebokapplikasjoner, databasespørsmotorer, interaktive brukerfora og andre interaktive applikasjoner til nettsteder.

Helt grunnleggende må et CGI-program tolke informasjonen som sendes til den, behandle informasjonen på en eller annen måte og generere et svar som vil bli sendt tilbake til klienten.

Det meste av innspillene til et CGI-program sendes til det gjennom miljøvariabler. Denne artikkelen vil demonstrere hvordan du sender disse miljøvariablene til et Java CGI-program. Resten av inngangen (hvis noen) sendes til et CGI-program som standardinngang som kan leses direkte av programmet ditt.

Behandlingen kan være så enkel som å legge til informasjon i en fil eller så komplisert som å be om data fra en database.

Siden et CGI-program kan returnere et mylder av dokumenttyper, må et CGI-program plassere en kort overskrift (ASCII-tekst) på utdataene slik at klienten vet hvordan den skal tolke informasjonen den genererer. Vanligvis genererer CGI-programmer HTML. Nedenfor finner du et bibliotek med funksjoner, inkludert et som genererer riktig overskrift for HTML. Etter overskriften genererer et CGI-program ganske enkelt utdataelementet i sin opprinnelige form.

Å overføre CGI-miljøet til Java-programmet

Å skrive et CGI-program i Java er ganske enkelt å gjøre når du forstår problemene. Først og fremst må du pakke utførelsen av Java-programmet i et annet skript. Så, det faktiske skriptet påkalt på webserveren din vil være et Unix-skallskript eller en Windows-batchfil (eller tilsvarende) som ganske enkelt sender CGI-miljøvariablene til Java-programmet.

Siden Java ikke lenger gir en metode for å få tilgang til miljøvariabler direkte ( System.getenv () metoden har blitt deaktivert i den siste versjonen av JDK), foreslår jeg at du overfører hver CGI-miljøvariabel til Java-programmet ved hjelp av -D kommandolinjeparameteren på Java-tolken. Jeg vil vise deg hvordan du bruker -D parameteren nedenfor.

Funksjonsbiblioteket jeg gir nedenfor forutsetter at du har brukt fremgangsmåten beskrevet ovenfor; den bruker System.getProperty () metode for å få tilgang til disse kommandolinjeparametrene. Hvis programmet ditt trenger å bruke noen av CGI-miljøvariablene, kan du få tilgang til dem på samme måte. Hvis du for eksempel vil få tilgang til miljøvariabelen SERVER_NAME, kan du gjøre det som følger:

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

Vær oppmerksom på at jeg ikke går forbi alle av CGI-miljøvariablene i Java-programmet mitt. Jeg passerer bare de store. Jeg overlater inkluderingen av de andre som en øvelse for leseren.

Følgende eksempel viser en Unix-skriptfil kalt hei.cgi påkaller et Java-program kalt Hallo. Merk at -D kommandolinjeparameteren overfører CGI-miljøvariablene til Java-programmet:

#! / 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_NAVN = server_navn Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO hei 

Denne løsningen fungerer ikke bra på Windows 95- og NT-plattformene fordi det kan være begrensninger på antall tegn som er tillatt på kommandolinjen. En alternativ tilnærming kan være å skrive hver av miljøvariablene og tilhørende verdier til en midlertidig fil (med et unikt filnavn, selvfølgelig). Deretter kan du sende navnet på denne filen til Java-programmet og få den til å lese den filen og analysere miljøvariabel / verdipar. Ikke glem å slette den midlertidige filen når du er ferdig med å bruke den! Igjen overlates denne øvelsen til leseren.

Et Java CGI-bibliotek

For å lette den kjedelige oppgaven med å behandle CGI-inngangene, har jeg skrevet en Java-klasse (egentlig et bibliotek med funksjoner) som du kan bruke til å kutte ned på noe av det skitne arbeidet. Dette biblioteket prøver å duplisere funksjonaliteten i den veldig populære Perl cgi-lib.pl bibliotek. Jeg har dokumentert koden nedenfor ved hjelp av kommentarer i javadoc-stil, slik at du kan generere HTML-dokumentasjon direkte fra koden. (Bruk javadoc cgi_lib.java å generere cgi_lib.html.)

Her er kildekoden og dokumentasjonen for biblioteket.

Skriver ditt første Java CGI-program

Her er et eksempel som viser hvordan cgi_lib.java biblioteket kan brukes til å skrive et CGI-program. Vi skriver et enkelt program som behandler skjemaet "Hei der". Dette enkle skjemaet vil be brukeren om navn og e-postadresse. Her er skjemaet (hei.html) som vi ønsker å behandle:

& ltHTML> & ltHEAD> & ltTITLE & gt Hallo og velkommen! & ltBODY> & ltH1 ALIGN = SENTRUM & gt Hallo og velkommen & lthr> & ltFORM METODE = "POST" ACTION = "/ cgi-bin / hello.cgi"> Hva heter du? & ltINPUT TYPE = "text" NAME = "name"> & ltp> Hva er e-postadressen din? & ltINPUT SIZE = 40 TYPE = "text" NAME = "email"> & ltINPUT TYPE = "send inn" VALUE = "Send" & gt. & ltP> & lthr>

La oss skrive et Java-program for å behandle "Hello There" -skjemaet.

Først må vi fortelle klienten at programmet vårt genererer HTML. De Overskrift() metode i cgi_lib.java oppretter strengen vi trenger, så vi begynner med å ringe den metoden og sende strengen til standard ut ved hjelp av System.out.println systemanrop.

 // // Skriv ut nødvendig CGI-overskrift. // System.out.println (cgi_lib.Header ()); 

For det andre ønsker vi å behandle skjemadataene som nettleseren sender oss. De LesParse metode i cgi_lib.java gjør alt som fungerer for oss og returnerer resultatet i en forekomst av en Hashtable. I dette tilfellet vil Hashtable inneholde to nøkkelverdier etter analyse av skjemadataene. Den ene vil være "navn" inndatafeltet og den andre vil være "e-post" inndatafeltet. Verdiene som er knyttet til hver av disse tastene, vil være uansett hva brukeren skrev inn i disse inntastingsfeltene i "Hello There" -skjemaet.

 // // Parse skjemadataene til en Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); 

Nå som vi har analysert skjemadataene, kan vi gjøre den behandlingen vi ønsker med dataene som sendes til oss. Deretter kan vi generere litt HTML for å sende tilbake til brukerens nettleser. I dette enkle programmet skal vi ikke behandle dataene. vi skal bare ekko tilbake informasjonen som er gitt av brukeren. Vi skal bruke metode på Hashtable-objektet for å trekke ut skjemaverdiene i strenger som vi kan bruke i vårt program. Følgende eksempel viser hvordan vi skulle trekke ut navnet som brukeren skrev inn i et strengobjekt.

 String name = (String) form_data.get ("name"); 

La oss nå sette alt sammen i et enkelt program. Her er et Java-program som vi kan bruke til å behandle "Hello There" -skjemaet (hei.java):

importer java.util. *; importer java.io. *; class hallo {public static void main (String args []) {// // Her er et minimalistisk CGI-program som bruker cgi_lib // // // Skriv ut ønsket CGI-topptekst. // System.out.println (cgi_lib.Header ()); // // Parse skjemadataene til en Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Opprett toppen av den returnerte HTML-siden // String name = (String) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Hei der" + navn + "!"); System.out.println ("& lth1 align = center & gt Hallo der" + navn + "!"); System.out.println (" Her er navn / verdipar fra skjemaet: "); // // Skriv ut navn / verdipar sendt fra nettleseren. // System.out.println (cgi_lib.Variables (form_data)); // // Skriv ut miljøvariablene som er sendt inn fra Unix-skriptet. // System.out.println ("Her er CGI-miljøvariablene / verdiparene" + "sendt inn fra UNIX-skriptet:") ; System.out.println (cgi_lib.Environment ()); // // Opprett bunnen av den returnerte HTML-siden for å lukke den rent. // System.out.println (cgi_lib.HtmlBot ());}} 

Konklusjon

Med denne introduksjonen til CGI-programmering i Java, bør du være på vei til en helt ny måte å programmere serversiden av webapplikasjonene dine på. Husk at CGI-protokollen bare gir en måte å kommunisere mellom en klientleser og en webserver. World Wide Web Consortium's Jigsaw (se ressursseksjonen nedenfor) og andre som Sun's Jeeves, kommer med bedre løsninger, som innebærer å skrive Java-servlets som du kan henge av webserveren din. Men det er et tema for en annen dag. Ha det gøy!

Pat Durante er senior programvareingeniør i TASC, Inc. i Reading, MA. TASC er et 00 millioner anvendt informasjonsteknologiselskap som spesialiserer seg på utvikling og integrering av avanserte informasjonssystemer og tjenester. Pat har konstruert objektorienterte applikasjoner i fire år. Han er leder for TASCs Object Oriented Special Interest Group og medstifter av TASCs Java Interest Group. Pats nettadresse er: //members.aol.com/durante.

Lær mer om dette emnet

  • Informasjon om Common Gateway Interface (CGI) finner du på:

    //hoohoo.ncsa.uiuc.edu/cgi

  • World Wide Web Consortium's Jigsaw er beskrevet på:

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

  • For mer om Sun's Jeeves, se:

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

Denne historien, "Skriv CGI-programmer i Java", ble opprinnelig utgitt av JavaWorld.

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