Programozási űrlapok
Ha formanyomtatványokat tervez, előbb vagy utóbb létre kell hoznia egy alkalmazást a kiszolgálóoldaltól a feldolgozáshoz. Ne pánikoljon. Nincs semmi varázslatos a szerver oldalról történő programozással kapcsolatban, és ez nem túl nehéz. Némi kitartással és egy kis gyakorlat után bélyegezed a feldolgozási kérelmet.
A legfontosabb tanácsadás, amit az űrlapok programozásával kapcsolatban adhatunk, könnyen megjegyezhető - más emberek munkájának másolása. Nagyon nehéz írni egy alkalmazás-feldolgozási alkalmazást a semmiből. A futó alkalmazás másolása és módosítása az űrlap igényeihez képest sokkal könnyebb. Szerencsére a szerver-gyártók tisztában vannak ezzel, és általában a mintaformátum-feldolgozó alkalmazásokat szolgáltatják a kiszolgálóval együtt. A cgi-src könyvtárban egy kicsit szólal meg, és számos hasznos példát találsz, amelyet másolhat és alkalmazhat.
Önnek nem is kell elvárnia, hogy reprodukálja mindazt, ami hasznos a szerverhez, és nem is adhatunk teljes körű útmutatót a programozáshoz. Mindössze annyit tehetünk, hogy egyszerű példákat adunk a GET és a POST alkalmazásokra, így érezhetjük magunknak ezt a munkát és talán a megfelelő irányba tereljük.
Mielőtt elkezdenénk, vegye figyelembe, hogy nem minden kiszolgáló hívja ezeket az alkalmazásokat ugyanúgy.
A példák terjed széles osztályát szerverek bekövetkezett az eredeti HTTP-szerver létrehozása közepén az NCSA (National Center for Supercomputing Applications, a National Center for Supercomputing Applications). A nagyon népszerű és könnyen elérhető Apache szerverrel is együtt kell dolgozniuk. Minden esetben kérjük, olvassa el a szerver dokumentációját. Részletes információk találhatók a könyvekben: «CGI programozás Perl» Scott Gülich (Scott Guelich) Shishir Gundavarama (Shishir Gundavaram) és Günter Birzneksa (Gunther Birznieks) «Webmaster dióhéjban» 2 Stephen Speynauera (Stephen Spainhour) és Robert Eckstein (Robert Eckstein) által kiadott "O'Reilly" kiadó.
Egy alternatíva a CGI-programozási modell egy Java-servletov3 a könyvben leírt «Java Servlet programozás» 4, a toll a Jason Hunter (Jason Hunter) és William Crawford (William Crawford) (O'Reilly). Servlets lehet használni kezelésére egyaránt kap- és POST-formák, bár szentelt általánosabb kérdéseket. Ebben a könyvben nincsenek servlet példák.
Visszatérési eredmények
Mielőtt elkezdenénk, meg kell vitatnunk, hogy az alkalmazás hogyan végződik a szerver oldalán.
A kiszolgáló minden alkalmazása átviszi az eredményeket a kiszolgálóra (majd a felhasználóra), és hozzáadja őket az alkalmazás szabványos kimenetéhez MIME kódolású fájlként. Ezért az első kimeneti vonalnak MIME típusú leírónak kell lennie a tartalomtípus számára. Ha az alkalmazás HTML dokumentumot ad vissza, akkor az első sor:
A második sor teljesen üres legyen. Az alkalmazás visszaadhatja a másik típusú tartalmat - csak adja meg a helyes MIME-típust. A GIF-képeket például előzi meg:
A tényleges szöveg, amely nem értelmezhető HTML formátumban, visszaküldhetõ:
Ez gyakran hasznos, ha vissza kell állítanunk más parancsok kimenetét, amelyek a HTML helyett a szöveges szöveget generálják.
Amikor a www.kumquat.com szerver feldolgozza ezt az URL-t, akkor a cgi-bin könyvtárban tárolt dump-get nevű alkalmazást hív.
Minden, ami a kérdőjel után megy, átadásra kerül az alkalmazásnak paraméterként.
Továbbá, a helyzet a GET típusú URL természetével összhangban eltérő lehet. Míg az űrlapok a név / érték párjának URL-jébe kerülnek, a GET alkalmazások olyan URL-címmel hívhatók fel, amely csak az értékeket tartalmazza. Így:
ez egy érvényes hívás, melyet pluszjel (+) választ el. Ez a hívás általában akkor fordul elő, amikor egy alkalmazás egy keresődokumentumot egy címke segítségével egy alkalmazáshoz kapcsol össze. A felhasználó által a beviteli mezőbe beírt paramétereket a kiszolgálói oldalról a pluszjelvel elválasztott névtelen paraméterekként továbbítják az alkalmazásnak.
Ha GET-alkalmazást hívott meg a megadott paraméterekkel, a kiszolgáló ezeket a paramétereket egy módon továbbítja az alkalmazáshoz. A meg nem nevezett paraméterek eltérő módon vannak átadva.
A megadott paraméterek használata a GET alkalmazásokkal
Nevezett paramétereket átengedjük GET-alkalmazásokat létrehozni QUERY_STRING változó, és jelölje ki azt az értéket az egész, hogy az URL része, amelyet majd egy kérdőjel. Ha a korábbi példát vesszük, a QUERY_STRING értéke:
Az alkalmazásnak meg kell kapnia ezt a változót, és ki kell választania a név / érték párt. Szerencsére a legtöbb szerver számos szabványos programot tartalmaz, amelyek elvégzik ezt a munkát, így egy egyszerű C program, amely egyszerűen kinyomtatja a paramétereket, valami ilyesmi lehet:
#include#include
#define MAX_ENTRIES 10000
typedef struct char * val;
> bejegyzés;
char * makeword (char * vonal, char stop);
char x2c (char * mi);
void unescape_url (char * url);
void plustospace (char * str);
fő (int argc, char * argv [])
char * query_string;
/ * A környezeti változó értéke QUERY_STRING * /
query_string = getenv ("QUERY_STRING");
/ * Paraméterek kivonatolása, ütemezés táblázat készítése * /
a (num_entries = 0; query_string [0]; num_entries ++) bejegyzést [num_entries] .val = makeword (query_string, '');
plustospace (bejegyzés [num_entries] .val);
unescape_url (bejegyzés [num_entries] .val);
bejegyzések [num_entries] .name =
makeword (bejegyzés [num_entries] .val, '=');
>
/ * Adja ki a "hal" HTML * /
printf ("Tartalom-típus: szöveg / html \ n");
printf ("\ n");
printf ();
printf ();
printf ("Nevezett paraméterek \ n");
printf ("");
printf ();
printf ("A következő paramétereket adta meg: \ n");
printf ("
-
\ n "); / * Kimeneti paraméterek a felhasználótól * /
(i = 0; i \ n ");
printf ("\ n");
>
Valódi alkalmazásoknál be kell illeszteni az érvényes paraméter-feldolgozási kódokat a kiválasztásuk után és a HTML létrehozása előtt.
Természetesen meg kell változtatnod a renderelt HTML szöveget az alkalmazásod függvényében.
Névtelen paraméterek használata GET alkalmazásokkal
A paramétereket parancssori paraméterekként továbbítják az alkalmazásnak. Ezáltal az alkalmazásfejlesztés a szerver oldalán szinte triviális. Itt van egy egyszerű parancssorozat, amely paraméterértékeket nyomtat:
#
# GET típusú, felhasználó által megadott, nem nevesített paraméterek kimenete
echo "Content-type: text / html"
visszhang
echo "
echo "
echo "Nem ismert paraméterek kimenete"
echo "
echo "
echo 'A következő paramétereket állította be:'
echo "
-
'
- '$ i
endecho '
foreach i ($ *)
echo "
echo "
kilépés a 0-ból
Ismét ugyanazt az általános szabályt követjük: egy MIME tartalomtípust tartalmazó minta-dokumentum fejlécet állítunk elő, melyet a paraméterek és a szabványos befejezés követ. Ha valódi alkalmazássá alakítja, cserélje ki a foreach-hurkot olyan parancsokkal, amelyek valóban valamit tesznek.
#include#include
#define MAX_ENTRIES 10000
typedef struct char * val;
> bejegyzés;
char * makeword (char * vonal, char stop);
char * fmakeword (FILE * f, char stop, int * len);
char x2c (char * mi);
void unescape_url (char * url);
void plustospace (char * str);
fő (int argc, char * argv [])
/ * Paraméterek kivonása a stdin-ből, ütemezési táblázat létrehozása * /
(num_entries = 0;; feof (stdin); num_entries ++) bejegyzés [num_entries] .val = fmakeword (stdin, '' cl);
plustospace (bejegyzés [num_entries] .val);
unescape_url (bejegyzés [num_entries] .val);
bejegyzések [num_entries] .name =
makeword (bejegyzés [num_entries] .val, '=');
>
/ * Adja ki a "hal" HTML * /
printf ("Tartalom-típus: szöveg / html \ n");
printf ("\ n");
printf ();
printf ();
printf ("Nevezett paraméterek \ n");
printf (""); printf ();
printf ("A következő paramétereket adta meg: \ n");
printf ("
-
\ n ");
/ * Kimeneti paraméterek a felhasználótól * /
(i = 0; i \ n ");
printf ("\ n");
>
Mint más példák, ez a program nagyon alkalmas arra, hogy ellenőrizze a szerveralkalmazásnak átadott paramétereket, miközben újak vagyunk az űrlapokhoz és a hibakeresési alkalmazásokhoz. Más alkalmazások alapjául is szolgálhat, beillesztve a megfelelő feldolgozási kódot a paraméterlista létrehozása után, és megváltoztathatja a program kimenetét, hogy elküldje a felhasználó releváns eredményeit.