כתוב תוכניות CGI בג'אווה

ממשק השער המשותף (CGI) הוא תקן לכתיבת תוכניות שיכולות לתקשר באמצעות שרת אינטרנט עם לקוח שמפעיל דפדפן אינטרנט. תוכניות אלה מאפשרות למפתח אתרים להעביר מידע דינמי (בדרך כלל בצורה של HTML) באמצעות הדפדפן. ניתן לכתוב תוכנית CGI בכל שפה, כולל Java, שניתן לבצע על ידי שרת האינטרנט שלך. תוכניות CGI משמשות בדרך כלל להוספת מנועי חיפוש, יישומי ספרים אורחים, מנועי שאילתת מסדי נתונים, פורומים של משתמשים אינטראקטיביים ויישומים אינטראקטיביים אחרים לאתרי אינטרנט.

במונחים בסיסיים מאוד, על תוכנית CGI לפרש את המידע שנשלח אליה, לעבד את המידע בצורה כלשהי, וליצור תגובה שתישלח בחזרה ללקוח.

רוב הקלט לתוכנית CGI מועבר אליה באמצעות משתני סביבה. מאמר זה ידגים כיצד לשלוח משתני סביבה אלה לתוכנית Java CGI. שאר הקלט (אם בכלל) מועבר לתוכנית CGI כקלט רגיל שניתן לקרוא ישירות על ידי התוכנית שלך.

העיבוד יכול להיות פשוט כמו הוספת מידע לקובץ או מורכב כמו בקשת נתונים ממסד נתונים.

מכיוון שתוכנית CGI יכולה להחזיר מספר עצום של סוגי מסמכים, על תוכנית CGI להציב כותרת קצרה (טקסט ASCII) על הפלט שלה, כך שהלקוח יידע לפרש את המידע שהיא מייצרת. לרוב, תוכניות CGI מייצרות HTML. להלן תמצא ספריית פונקציות הכוללת אחת שמייצרת את הכותרת המתאימה ל- HTML. בעקבות הכותרת, תוכנית CGI פשוט מייצרת את גוף הפלט בצורתו המקורית.

העברת סביבת CGI לתוכנית Java

די קל לבצע כתיבת תוכנית CGI בג'אווה ברגע שאתה מבין את הבעיות. בראש ובראשונה, עליך לעטוף את הביצוע של תוכנית Java בתוך סקריפט אחר. לכן, הסקריפט המופעל בפועל בשרת האינטרנט שלך יהיה סקריפט של מעטפת Unix או קובץ אצווה של Windows (או שווה ערך) שמעביר את משתני סביבת CGI לתוכנית Java שלך.

מכיוון שג'אווה כבר לא מספקת שיטה לגשת ישירות למשתני הסביבה ( System.getenv()השיטה הושבתה במהדורה האחרונה של ה- JDK), אני מציע להעביר כל משתנה של סביבת CGI לתוכנית Java באמצעות פרמטר שורת הפקודה -D על המתורגמן. . אני אראה לך כיצד להשתמש בפרמטר -D להלן.

ספריית הפונקציות שאני מספק להלן מניחה שהשתמשת בגישה שתוארה לעיל; היא משתמשת System.getProperty()בשיטה כדי לגשת לפרמטרים אלה של שורת הפקודה. אם התוכנית שלך צריכה להשתמש באחד ממשתני הסביבה CGI, תוכל לגשת אליהם באותה הדרך. לדוגמה, אם ברצונך לגשת למשתנה הסביבה SERVER_NAME, תוכל לעשות זאת באופן הבא:

 מחרוזת server_name = System.getProperty ("cgi.server_name"); 

שים לב שאני לא מעביר את כל משתני סביבת ה- CGI לתוכנית Java שלי. אני עובר רק את הגדולות. אשאיר את הכללת האחרים כתרגיל עבור הקורא.

הדוגמה הבאה מציגה קובץ סקריפט של Unix הנקרא hello.cgiהפעלת תוכנית Java הנקראת hello. שים לב שפרמטר שורת הפקודה -D מעביר את משתני סביבת CGI לתוכנית 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. Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO שלום 

פתרון זה אינו פועל היטב בפלטפורמות Windows 95 ו- NT מכיוון שעלולות להיות מגבלות על מספר התווים המותרים בשורת הפקודה. גישה חלופית עשויה להיות פשוט לכתוב כל אחד ממשתני הסביבה והערכים הקשורים אליהם לקובץ זמני (עם שם קובץ ייחודי, כמובן). לאחר מכן, תוכל להעביר את שמו של קובץ זה לתוכנת Java שלך ולקרוא אותו לקרוא ולנתח את צמדי המשתנה / הערך הסביבתיים. אל תשכח למחוק את הקובץ הזמני כשתסיים להשתמש בו! שוב, תרגיל זה מותיר לקורא.

ספריית Java CGI

כדי להקל על המשימה המייגעת של עיבוד תשומות ה- CGI, כתבתי מחלקה של Java (באמת ספריית פונקציות) בה תוכלו להשתמש כדי לצמצם חלק מהעבודה המלוכלכת. ספרייה זו מנסה לשכפל את הפונקציונליות cgi-lib.plבספריית פרל הפופולרית ביותר . תיעדתי את הקוד למטה באמצעות הערות בסגנון javadoc כדי שתוכל ליצור תיעוד HTML ישירות מהקוד. (השתמש javadoc cgi_lib.javaכדי ליצור cgi_lib.html.)

הנה קוד המקור ותיעוד הספרייה.

כותב את תוכנית ה- Java CGI הראשונה שלך

הנה דוגמה שמראה כיצד cgi_lib.javaניתן להשתמש בספרייה לכתיבת תוכנית CGI. נכתוב תוכנית פשוטה שמעבדת את הטופס שלי "שלום שם". טופס פשוט זה יבקש מהמשתמש שם וכתובת אימייל. הנה הטופס ( hello.html) אותו אנו מעוניינים לעבד:

& ltHTML> & ltHEAD> & ltTITLE & gt שלום וברוך הבא! & ltBODY> & ltH1 ALIGN = CENTRE & gt שלום וברוך הבא & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> איך קוראים לך? & ltINPUT TYPE = "text" NAME = "name"> & ltp> מהי כתובת הדוא"ל שלך? & ltINPUT SIZE = 40 TYPE = "text" NAME = "email"> & ltINPUT TYPE = "submit" VALUE = "Submit">. & ltP> & lthr>

בואו נכתוב תוכנית Java לעיבוד הטופס "Hello There".

ראשית, עלינו ליידע את הלקוח שהתוכנית שלנו תייצר HTML. Header()השיטה cgi_lib.javaיוצרת מחרוזת שאנחנו צריכים, כך נתחיל ידי קורא השיטה הזו ולהעביר את המחרוזת החוצה סטנדרטי באמצעות System.out.printlnקריאת המערכת.

// // הדפיסו את כותרת ה- CGI הנדרשת. // System.out.println (cgi_lib.Header ());

שנית, אנו רוצים לעבד את נתוני הטופס שנשלחו אלינו על ידי הדפדפן. ReadParseהשיטה cgi_lib.javaעושה את כל העבודה הזו בשבילנו ומחזיר את תוצאת מופע של Hashtable. במקרה זה, ה- Hashtable יכיל שני ערכי מפתח לאחר ניתוח נתוני הטופס. האחד יהיה שדה הקלט "שם" והשני יהיה שדה הקלט "דוא"ל". הערכים המשויכים לכל אחד ממפתחות אלה יהיו כל מה שהמשתמש הקליד בשדות הקלט האלה בטופס "שלום שם".

// // מנתח את נתוני הטופס ל- Hashtable. // פורמט נתונים Hashtable = cgi_lib.ReadParse (System.in);

כעת לאחר שניתחנו את נתוני הטופס, אנו יכולים לעשות כל עיבוד שנרצה עם הנתונים שנשלחו אלינו. אז נוכל ליצור קצת HTML כדי לשלוח חזרה לדפדפן המשתמש. בתוכנית פשוטה זו אנו לא מתכוונים לבצע עיבוד עם הנתונים; אנו פשוט הולכים להדהד את המידע המסופק על ידי המשתמש. אנו הולכים להשתמש getבשיטה על האובייקט Hashtable כדי לחלץ את ערכי הטופס למחרוזות בהם נוכל להשתמש בתוכנית שלנו. הדוגמה הבאה מראה כיצד היינו מחלצים את השם שהמשתמש הקליד לאובייקט מחרוזת.

 שם מחרוזת = (מחרוזת) form_data.get ("שם"); 

עכשיו, בואו נרכיב את כל זה בתוכנית פשוטה. הנה יישום Java שבו נוכל להשתמש כדי לעבד את הטופס "Hello There" ( hello.java):

ייבא java.util. *; ייבא java.io. *; class hello {public static void main (String args []) {// // הנה תוכנית CGI מינימליסטית המשתמשת ב- cgi_lib // // // הדפיסו את כותרת ה- CGI הנדרשת. // System.out.println (cgi_lib.Header ()); // // מנתח את נתוני הטופס ל- Hashtable. // פורמט נתונים Hashtable = cgi_lib.ReadParse (System.in); // // צור את החלק העליון של דף ה- HTML שהוחזר // שם מחרוזת = (מחרוזת) form_data.get ("שם"); System.out.println (cgi_lib.HtmlTop ("שלום לך" + שם + "!"); System.out.println ("& lth1 align = center & gt שלום שם" + שם + "!"); System.out.println ("הנה צמדי השם / ערך מהטופס:"); // // הדפיסו את זוגות השמות / הערכים שנשלחו מהדפדפן. // System.out.println (cgi_lib.Variables (form_data));// // הדפיסו את המשתנים הסביבתיים שנשלחו מתסריט ה- Unix. // System.out.println ("הנה משתני הסביבה CGI / זוגות הערך" + "שהועברו מתסריט UNIX:"); System.out.println (cgi_lib.Environment ()); // // צור את החלק התחתון של דף ה- HTML שהוחזר כדי לסגור אותו בצורה נקייה. // System.out.println (cgi_lib.HtmlBot ()); }}

סיכום

עם מבוא זה לתכנות CGI בג'אווה, עליכם להיות בדרך חדשה לגמרי לתכנת את צד השרת של יישומי האינטרנט שלכם. זכור כי פרוטוקול CGI מספק רק דרך אחת לתקשר בין דפדפן לקוח לשרת אינטרנט. הפאזל של קונסורציום הרשת העולמית (ראה סעיף משאבים בהמשך) ואחרים כמו Jeeves של Sun, מגיעים לפתרונות טובים יותר הכוללים כתיבת סרוולטים של Java שתוכלו לנתק את שרת האינטרנט שלכם. אבל זה נושא ליום אחר. תעשה חיים!

פט דוראנטה הוא מהנדס תוכנה בכיר ב- TASC, Inc. ברידינג, MA. TASC הינה חברת טכנולוגיית מידע יישומית המונה 00 מיליון איש המתמחה בפיתוח ואינטגרציה של מערכות ושירותי מידע מתקדמים. פאט הנדסה יישומים מונחים עצמים מזה ארבע שנים. הוא המוביל של קבוצת האינטרסים המיוחדים של TASC ומייסד את קבוצת האינטרסים של TASC בג'אווה. כתובת אתר האינטרנט של פאט היא: //members.aol.com/durante.

למידע נוסף על נושא זה

  • מידע על ממשק השער המשותף (CGI) ניתן למצוא בכתובת:

    //hoohoo.ncsa.uiuc.edu/cgi

  • הפאזל של קונסורציום הרשת העולמית מתואר בכתובת:

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

  • למידע נוסף על Jeeves של Sun, ראה:

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

סיפור זה, "כתוב תוכניות CGI בג'אווה" פורסם במקור בהוצאת JavaWorld.