Προγραμματισμός

Γράψτε προγράμματα CGI στην Java

Το Common Gateway Interface (CGI) είναι ένα πρότυπο για τη σύνταξη προγραμμάτων που μπορούν να αλληλεπιδράσουν μέσω ενός διακομιστή Web με έναν πελάτη που εκτελεί ένα πρόγραμμα περιήγησης στο Web. Αυτά τα προγράμματα επιτρέπουν σε έναν προγραμματιστή Web να παρέχει δυναμικές πληροφορίες (συνήθως με τη μορφή HTML) μέσω του προγράμματος περιήγησης. Ένα πρόγραμμα CGI μπορεί να γραφτεί σε οποιαδήποτε γλώσσα, συμπεριλαμβανομένης της Java, που μπορεί να εκτελεστεί από τον διακομιστή Web. Τα προγράμματα CGI χρησιμοποιούνται συνήθως για την προσθήκη μηχανών αναζήτησης, εφαρμογών βιβλίων επισκεπτών, μηχανών ερωτήσεων βάσης δεδομένων, φόρουμ διαδραστικών χρηστών και άλλων διαδραστικών εφαρμογών σε τοποθεσίες Web.

Σε πολύ βασικούς όρους, ένα πρόγραμμα CGI πρέπει να ερμηνεύει τις πληροφορίες που του αποστέλλονται, να επεξεργάζεται τις πληροφορίες κατά κάποιο τρόπο και να δημιουργεί μια απάντηση που θα σταλεί πίσω στον πελάτη.

Το μεγαλύτερο μέρος της εισόδου σε ένα πρόγραμμα CGI μεταφέρεται σε αυτό μέσω μεταβλητών περιβάλλοντος. Αυτό το άρθρο θα δείξει πώς να στείλετε αυτές τις μεταβλητές περιβάλλοντος σε ένα πρόγραμμα Java CGI. Η υπόλοιπη είσοδος (εάν υπάρχει) μεταφέρεται σε πρόγραμμα CGI ως τυπική είσοδος που μπορεί να διαβαστεί απευθείας από το πρόγραμμά σας.

Η επεξεργασία μπορεί να είναι τόσο απλή όσο η προσθήκη πληροφοριών σε ένα αρχείο ή τόσο περίπλοκη όσο το αίτημα δεδομένων από μια βάση δεδομένων.

Δεδομένου ότι ένα πρόγραμμα CGI μπορεί να επιστρέψει χιλιάδες τύπους εγγράφων, ένα πρόγραμμα CGI πρέπει να τοποθετήσει μια σύντομη κεφαλίδα (κείμενο ASCII) στην έξοδο του έτσι ώστε ο πελάτης να γνωρίζει πώς να ερμηνεύει τις πληροφορίες που δημιουργεί. Συνήθως, τα προγράμματα CGI δημιουργούν HTML. Παρακάτω, θα βρείτε μια βιβλιοθήκη συναρτήσεων, συμπεριλαμβανομένης μιας που δημιουργεί την κατάλληλη κεφαλίδα για HTML. Ακολουθώντας την κεφαλίδα, ένα πρόγραμμα CGI δημιουργεί απλώς το σώμα της εξόδου στη μητρική του μορφή.

Περνώντας το περιβάλλον CGI στο πρόγραμμα Java

Η σύνταξη ενός προγράμματος CGI στην Java είναι αρκετά εύκολο να γίνει μόλις καταλάβετε τα ζητήματα. Πρώτα απ 'όλα, πρέπει να ολοκληρώσετε την εκτέλεση του προγράμματος Java σε ένα άλλο σενάριο. Έτσι, το πραγματικό σενάριο που επικαλέστηκε ο διακομιστής Web θα είναι ένα σενάριο κελύφους Unix ή ένα αρχείο δέσμης Windows (ή ισοδύναμο) που απλώς μεταβιβάζει τις μεταβλητές περιβάλλοντος CGI στο πρόγραμμα Java.

Δεδομένου ότι η Java δεν παρέχει πλέον μια μέθοδο για άμεση πρόσβαση σε μεταβλητές περιβάλλοντος (το System.getenv () Η μέθοδος έχει απενεργοποιηθεί στην τελευταία έκδοση του JDK), προτείνω να περάσετε κάθε μεταβλητή περιβάλλοντος CGI στο πρόγραμμα Java χρησιμοποιώντας την παράμετρο γραμμής εντολών -D στον διερμηνέα Java. Θα σας δείξω πώς να χρησιμοποιήσετε την παράμετρο -D παρακάτω.

Η βιβλιοθήκη συναρτήσεων που παρέχω παρακάτω προϋποθέτει ότι έχετε χρησιμοποιήσει την προσέγγιση που περιγράφεται παραπάνω. χρησιμοποιεί το System.getProperty () μέθοδος πρόσβασης σε αυτές τις παραμέτρους της γραμμής εντολών. Εάν το πρόγραμμά σας πρέπει να χρησιμοποιεί οποιαδήποτε από τις μεταβλητές περιβάλλοντος CGI, μπορείτε να έχετε πρόσβαση σε αυτές με τον ίδιο τρόπο. Για παράδειγμα, εάν θέλετε να αποκτήσετε πρόσβαση στη μεταβλητή περιβάλλοντος SERVER_NAME, μπορείτε να το κάνετε ως εξής:

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

Να γνωρίζετε ότι δεν περνάω όλα των μεταβλητών περιβάλλοντος CGI στο πρόγραμμα Java. Περνάω μόνο τα μεγάλα. Θα αφήσω τη συμπερίληψη των άλλων ως άσκηση για τον αναγνώστη.

Το ακόλουθο παράδειγμα δείχνει ένα αρχείο σεναρίου Unix που ονομάζεται γεια. cgi επίκληση ενός προγράμματος Java που ονομάζεται γεια. Σημειώστε ότι η παράμετρος γραμμής εντολών -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.server_name = SERVER_name Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO γεια 

Αυτή η λύση δεν λειτουργεί καλά στις πλατφόρμες Windows 95 και NT, επειδή ενδέχεται να υπάρχουν όρια στον αριθμό των χαρακτήρων που επιτρέπονται στη γραμμή εντολών. Μια εναλλακτική προσέγγιση μπορεί να είναι απλώς να γράψετε καθεμία από τις μεταβλητές περιβάλλοντος και τις σχετικές τιμές σε ένα προσωρινό αρχείο (φυσικά με ένα μοναδικό όνομα αρχείου). Στη συνέχεια, μπορείτε να μεταβιβάσετε το όνομα αυτού του αρχείου στο πρόγραμμα Java και να το διαβάσετε και να αναλύσετε τα ζεύγη μεταβλητής / τιμής περιβάλλοντος. Μην ξεχάσετε να διαγράψετε το προσωρινό αρχείο όταν τελειώσετε με τη χρήση του! Και πάλι, αυτή η άσκηση αφήνεται στον αναγνώστη.

Μια βιβλιοθήκη Java CGI

Για να διευκολύνω την κουραστική εργασία της επεξεργασίας των εισόδων CGI, έχω γράψει μια τάξη Java (πραγματικά μια βιβλιοθήκη λειτουργιών) που μπορείτε να χρησιμοποιήσετε για να περιορίσετε μερικές από τις βρώμικες εργασίες. Αυτή η βιβλιοθήκη προσπαθεί να αντιγράψει τη λειτουργικότητα στο πολύ δημοφιλές Perl cgi-lib.pl βιβλιοθήκη. Έχω τεκμηριώσει τον παρακάτω κώδικα χρησιμοποιώντας σχόλια σε στυλ javadoc, ώστε να μπορείτε να δημιουργήσετε τεκμηρίωση HTML απευθείας από τον κώδικα. (Χρήση javadoc cgi_lib.java να δημιουργήσει cgi_lib.html.)

Εδώ είναι ο πηγαίος κώδικας και η τεκμηρίωση για τη βιβλιοθήκη.

Γράφοντας το πρώτο σας πρόγραμμα Java CGI

Εδώ είναι ένα παράδειγμα που δείχνει πώς το cgi_lib.java βιβλιοθήκη μπορεί να χρησιμοποιηθεί για τη σύνταξη ενός προγράμματος CGI. Θα γράψουμε ένα απλό πρόγραμμα που επεξεργάζεται τη φόρμα "Hello There". Αυτή η απλή φόρμα θα ζητήσει από το χρήστη ένα όνομα και μια διεύθυνση email. Εδώ είναι η φόρμα (γεια.html) που θέλουμε να επεξεργαστούμε:

& ltHTML> & ltHEAD> & ltTITLE & gtΓεια και καλώς ήλθατε! & ltBODY> & ltH1 ALIGN = ΚΕΝΤΡΟ & 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" & gt. & ltP> & lthr>

Ας γράψουμε ένα πρόγραμμα Java για να επεξεργαστούμε τη φόρμα "Hello There".

Πρώτον, πρέπει να ενημερώσουμε τον πελάτη ότι το πρόγραμμά μας θα δημιουργεί HTML. ο Επί κεφαλής() μέθοδος στο cgi_lib.java δημιουργεί τη συμβολοσειρά που χρειαζόμαστε, οπότε θα ξεκινήσουμε καλώντας αυτή τη μέθοδο και στέλνοντας τη συμβολοσειρά σε στάνταρ έξω χρησιμοποιώντας το System.out.println κλήση συστήματος.

 // // Εκτυπώστε την απαιτούμενη κεφαλίδα CGI. // System.out.println (cgi_lib.Header ()); 

Δεύτερον, θέλουμε να επεξεργαστούμε τα δεδομένα φόρμας που μας αποστέλλονται από το πρόγραμμα περιήγησης. ο ΔιαβάστεParse μέθοδος στο cgi_lib.java κάνει όλα αυτά για εμάς και επιστρέφει το αποτέλεσμα σε μια παρουσία Hashtable. Σε αυτήν την περίπτωση, το Hashtable θα περιέχει δύο βασικές τιμές μετά την ανάλυση των δεδομένων φόρμας. Το ένα θα είναι το πεδίο εισαγωγής «όνομα» και το άλλο θα είναι το πεδίο εισαγωγής «email». Οι τιμές που σχετίζονται με καθένα από αυτά τα κλειδιά θα είναι οτιδήποτε πληκτρολογεί ο χρήστης σε αυτά τα πεδία εισαγωγής στη φόρμα "Γεια σας".

 // // Αναλύστε τα δεδομένα φόρμας σε πίνακα κατακερματισμού. // Hashtable form_data = cgi_lib.ReadParse (System.in); 

Τώρα που αναλύσαμε τα δεδομένα της φόρμας, μπορούμε να κάνουμε όποια επεξεργασία επιθυμούμε με τα δεδομένα που μας αποστέλλονται. Στη συνέχεια, μπορούμε να δημιουργήσουμε κάποιο HTML για αποστολή στο πρόγραμμα περιήγησης του χρήστη. Σε αυτό το απλό πρόγραμμα, δεν πρόκειται να κάνουμε επεξεργασία με τα δεδομένα. απλώς θα επαναλάβουμε τις πληροφορίες που παρέχονται από τον χρήστη. Θα χρησιμοποιήσουμε το παίρνω μέθοδος στο αντικείμενο Hashtable για εξαγωγή των τιμών φόρμας σε συμβολοσειρές που μπορούμε να χρησιμοποιήσουμε στο πρόγραμμά μας. Το παρακάτω παράδειγμα δείχνει πώς θα εξαγάγαμε το όνομα που πληκτρολόγησε ο χρήστης σε ένα αντικείμενο συμβολοσειράς.

 Όνομα συμβολοσειράς = (String) form_data.get ("name"); 

Τώρα, ας τα συνδυάσουμε όλα αυτά σε ένα απλό πρόγραμμα. Εδώ είναι μια εφαρμογή Java που μπορούμε να χρησιμοποιήσουμε για την επεξεργασία της φόρμας "Γεια σας" (γεια. java):

εισαγωγή java.util. *; εισαγωγή java.io. *; class hello {public static void main (String args []) {// // Εδώ είναι ένα μινιμαλιστικό πρόγραμμα CGI που χρησιμοποιεί cgi_lib // // // Εκτυπώστε την απαιτούμενη κεφαλίδα CGI. // System.out.println (cgi_lib.Header ()); // // Αναλύστε τα δεδομένα φόρμας σε πίνακα κατακερματισμού. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Δημιουργήστε την κορυφή της σελίδας HTML που επιστράφηκε // String name = (String) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Γεια σου" + όνομα + "!")); System.out.println ("& lth1 align = center & gt Γεια σας" + name + "!"); 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 στην Java, θα πρέπει να προχωρήσετε σε έναν εντελώς νέο τρόπο προγραμματισμού της πλευράς διακομιστή των εφαρμογών Ιστού σας. Λάβετε υπόψη ότι το πρωτόκολλο CGI παρέχει μόνο έναν τρόπο επικοινωνίας μεταξύ προγράμματος περιήγησης πελάτη και διακομιστή Web. Το παζλ του World Wide Web Consortium (δείτε την ενότητα Πόροι παρακάτω) και άλλα όπως το Sun's Jeeves, έρχονται με καλύτερες λύσεις, οι οποίες περιλαμβάνουν τη σύνταξη Java servlets που μπορείτε να κλείσετε τον διακομιστή Web. Αλλά αυτό είναι ένα θέμα για άλλη μια μέρα. Καλα να περνας!

Ο Pat Durante είναι ανώτερος μηχανικός λογισμικού στην TASC, Inc. στο Reading, MA. Η TASC είναι μια εταιρεία εφαρμοσμένης τεχνολογίας πληροφοριών ύψους 00 εκατομμυρίων που ειδικεύεται στην ανάπτυξη και ολοκλήρωση προηγμένων συστημάτων πληροφοριών και υπηρεσιών Ο Pat έχει κατασκευάσει αντικειμενοστραφείς εφαρμογές για τέσσερα χρόνια. Είναι ο ηγέτης της Ομάδας Ειδικού Ενδιαφέροντος της TASC και συνιδρυτής της Ομάδας Ενδιαφέροντος Java της TASC. Η διεύθυνση της ιστοσελίδας του Pat είναι: //members.aol.com/durante.

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Πληροφορίες σχετικά με το Common Gateway Interface (CGI) μπορείτε να βρείτε στη διεύθυνση:

    //hoohoo.ncsa.uiuc.edu/cgi

  • Το παζλ του World Wide Web Consortium περιγράφεται στη διεύθυνση:

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

  • Για περισσότερα σχετικά με το Sun's Jeeves, δείτε:

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

Αυτή η ιστορία, "Γράψτε προγράμματα CGI στην Java" δημοσιεύθηκε αρχικά από το JavaWorld.