Ελληνικό Java CGI HOWTO David H. Silber javacgi-document@orbits.com v0.5, 1 Δεκεμβρίου 1998 Αυτό το έγγραφο HOWTO εξηγεί πώς να ρυθμίσετε το διακομιστή σας ώστε να επιτρέπει προγράμματα CGI γραμμένα σε Java και πώς να χρησιμοποιήσετε τη Java στο να γράφετε προγράμματα CGI. Αν και αυτά τα HOWTO έγγραφα στοχεύουν σε χρήση με το λειτουργικό σύστημα Linux, αυτό το συγκεκριμένο δεν είναι εξαρτώμενο από τη συγκεκριμένη έκδοση του Unix που χρησιμοποιείτε. ______________________________________________________________________ Table of Contents 1. Εισαγωγή 1.1 Προγενέστερη Γνώση 1.2 Αυτό το Έγγραφο 1.3 Το πακέτο 1.4 Η Λίστα Ταχυδρομείου 2. Ρυθμίζοντας το Διακομιστή σας να τρέχει προγράμματα Java CGI (με επεξηγήσεις) 2.1 Απαιτήσεις Συστήματος 2.2 Επιπρόσθετο Λογισμικό Java CGI 2.3 Ξεπακετάροντας τον πηγαίο κώδικα 2.4 Αποφασίστε για τις πολιτικές τοπικών διαδρομών σας 2.5 Ελέγχοντας την εγκατάστασή σας 3. Ρυθμίζοντας τον Διακομιστή σας να τρέχει προγράμματα Java CGI (ο σύντομος τρόπος) 4. Εκτελώντας ένα πρόγραμμα Java CGI 4.1 Εμπόδια στο τρέξιμο προγραμμάτων Java κάτω από το μοντέλο CGI 4.1.1 Δεν μπορείτε να τρέξετε προγράμματα Java όπως τα κανονικά εκτελέσιμα. 4.1.2 Η Java δεν έχει γενική πρόσβαση στο περιβάλλον. 4.2 Ξεπερνώντας προβλήματα στο τρέξιμο προγραμμάτων Java CGI 4.2.1 Το java.cgi script 4.2.2 Καλώντας το java.cgi από μία φόρμα HTML 5. Χρησιμοποιώντας τις Java CGI Κλάσεις 5.1 CGI 5.1.1 Σύνταξη κλάσης 5.1.2 Περιγραφή κλάσης 5.1.3 Περίληψη μελών 5.1.4 Δείτε επίσης 5.1.5 CGI() 5.1.6 getNames() 5.1.7 getValue() 5.2 CGI[lowbar]Test 5.2.1 Περίληψη μελών 5.2.2 Δείτε επίσης 5.2.3 main() 5.3 Email 5.3.1 Σύνταξη Κλάσης 5.3.2 Περιγραφή κλάσης 5.3.3 Περίληψη μελών 5.3.4 Δείτε επίσης 5.3.5 Email() 5.3.6 send() 5.3.7 sendTo() 5.3.8 subject() 5.4 Email[lowbar]Test 5.4.1 Περίληψη μελών 5.4.2 Δείτε επίσης 5.4.3 main() 5.5 HTML 5.5.1 Σύνταξη κλάσης 5.5.2 Περιγραφή κλάσης 5.5.3 Περίληψη μελών 5.5.4 Δείτε επίσης 5.5.5 HTML() 5.5.6 author() 5.5.7 definitionList() 5.5.8 definitionListTerm() 5.5.9 endList() 5.5.10 listItem() 5.5.11 send() 5.5.12 title() 5.6 HTML[lowbar]Test 5.6.1 Περίληψη μελών 5.6.2 Δείτε επίσης 5.6.3 main() 5.7 Text 5.7.1 Σύνταξη κλάσης 5.7.2 Περιγραφή κλάσης 5.7.3 Περίληψη μελών 5.7.4 Δείτε επίσης 5.7.5 add() 5.7.6 addLineBreak() 5.7.7 addParagraph() 6. Μελλοντικά Σχέδια 7. Αλλαγές 7.1 Αλλαγές από την 0.4 στην 0.5 7.2 Αλλαγές από την 0.3 στην 0.4 7.3 Αλλαγές από την 0.2 στην 0.3 7.4 Αλλαγές από την 0.1 στην 0.2 ______________________________________________________________________ 1. Εισαγωγή Εξαιτίας του τρόπου που η Java είναι σχεδιασμένη, ο προγραμματιστής δεν έχει εύκολη πρόσβαση στις μεταβλητές περιβάλλοντος του συστήματος. Εξαιτίας του τρόπου που είναι ρυθμισμένο το Java Development Kit (JDK), είναι αναγκαίο να χρησιμοποιείτε πολλαπλά σύμβολα για να καλείτε ένα πρόγραμμα, το οποίο δεν κολλάει και πολύ καλά με τον τυπικό τρόπο λειτουργιών με φόρμες/CGI της HTML. Υπάρχουν τρόποι αντιμετώπισης αυτών των περιορισμών, και έχω εφαρμόσει έναν από αυτούς. Διαβάστε περαιτέρω για λεπτομέρειες. Από τότε που έγραψα την προηγούμενη παράγραφο το 1996, έχουν γίνει πολλές αλλαγές στην τεχνολογία Java. Είναι πιθανόν πως μια καλύτερη λύση για να τρέχετε Java προγράμματα στην πλευρά-του-διακομιστή, είναι τώρα διαθέσιμη -- ίσως να πρέπει να ρίξετε μια ματιά στα servlets. 1.1. Προγενέστερη Γνώση Υποθέτω ότι έχετε μία γενική γνώση της HTML και των εννοιών CGI και τουλάχιστον μια ελάχιστη γνώση του διακομιστή HTTP σας. Θα πρέπει επίσης να γνωρίζετε πώς να προγραμματίσετε σε Java, αλλιώς πολλά από αυτά δε θα βγάζουν νόημα. 1.2. Αυτό το Έγγραφο Η τελευταία έκδοση αυτού του εγγράφου μπορεί να διαβαστεί στην http://www.orbits.com/software/Java_CGI.html. 1.3. Το πακέτο Η τελευταία έκδοση του πακέτου που περιγράφεται εδώ μπορεί να προσπελαστεί μέσω ανώνυμο FTP στο ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. Η διανομή του πακέτου περιέχει πηγαίο κώδικα SGML για αυτό το έγγραφο. Το πακέτο διανέμεται κάτω από τους όρους της GNU Βιβλιοθήκης Γενικής Άδειας του Κοινού (Library General Public License). Αυτό το έγγραφο μπορεί να διανεμηθεί κάτω από τους όρους της σημείωσης πνευματικών δικαιωμάτων των Linux HOWTOs. Αν χρησιμοποιείτε αυτό το λογισμικό, παρακαλώ κάντε κάποια αναφορά στην http://www.orbits.com/software/Java_CGI.html, έτσι ώστε και άλλοι να μπορούν να βρίσκουν τις κλάσεις Java CGI. Δεν έχω άλλο χρόνο για να συντηρώ και να υποστηρίζω αυτό το πακέτο, οπότε αυτή πιθανόν να είναι η τελευταία του κυκλοφορία. Αν κανείς εκεί έξω είναι αρκετά ερωτευμένος με αυτό το λογισμικό ώστε να εύχεται να αναλάβει τη συντήρησή του, παρακαλώ επικοινωνήστε μαζί μου στην javacgi-document@orbits.com. 1.4. Η Λίστα Ταχυδρομείου Έχω δημιουργήσει μία λίστα majordomo ώστε να επιτρέπω ανθρώπους να βοηθούν ο ένας τον άλλον, να λύνουν αμοιβαία τα προβλήματά τους εγκαθιστώντας και χρησιμοποιώντας αυτό το λογισμικό. Στείλτε ένα μήνυμα στην javacgi-request@orbits.com, περιλαμβάνοντας τη λέξη subscribe. 2. Ρυθμίζοντας το Διακομιστή σας να τρέχει προγράμματα Java CGI (με επεξηγήσεις) Αυτό το τμήμα θα σας καθοδηγήσει κατά την εγκατάσταση του πακέτου μου Java CGI με άφθονες επεξηγήσεις έτσι ώστε να γνωρίζετε ποια θα είναι τα αποτελέσματα των ενεργειών σας. Αν απλώς θέλετε να εγκαταστήσετε τα προγράμματα και δεν ενδιαφέρεστε καθόλου για τα γιατί και για ποιους λόγους, πηγαίνετε στην ``Ρυθμίζοντας τον Διακομιστή σας να τρέχει προγράμματα Java CGI (ο σύντομος τρόπος)''. 2.1. Απαιτήσεις Συστήματος Αυτό το λογισμικό θα πρέπει να δουλεύει σε κάθε unix-like διακομιστή ιστού που έχει εγκατεστημένο το Java Development Kit. Εγώ το χρησιμοποιώ σε ένα σύστημα Debian Linux που τρέχει τον apache σαν δαίμονα HTTP. Αν διαπιστώσετε ότι δεν τρέχει στον δικό σας διακομιστή, παρακαλώ επικοινωνήστε με τη λίστα ταχυδρομείου. Δείτε τη ``The Mailing List'' για λεπτομέρειες. Δυστυχώς, ο Java run-time διερμηνευτής φαίνεται να είναι κάτι σαν φαταούλας μνήμης -- ίσως να θέλετε να ρίξετε λίγα περισσότερα megabytes από RAM στον εξυπηρετητή σας αν θα χρησιμοποιείτε πολύ προγράμματα Java CGI. 2.2. Επιπρόσθετο Λογισμικό Java CGI Το λογισμικό που έγραψα για να βοηθήσει σε αυτό λέγεται Java CGI. Μπορείτε να το πάρετε από το ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. (Ο αριθμός έκδοσης μπορεί να έχει αλλάξει). 2.3. Ξεπακετάροντας τον πηγαίο κώδικα Βρείτε έναν κατάλογο που σας βολεύει στον οποίο θα ξεπακετάρετε αυτό το πακέτο. (Αν δεν έχετε ακόμη ένα σταθερό τόπο να τοποθετείτε πακέτα, προτείνω να χρησιμοποιήσετε τον /usr/local/src.) Ξεπακετάρετε τη διανομή με αυτή την εντολή: gzip -dc java_cgi-0.5.tgz | tar -xvf - Αυτή θα δημιουργήσει έναν κατάλογο με όνομα java_cgi-0.5. Εκεί μέσα θα βρείτε τα αρχεία που αναφέρονται στο υπόλοιπο αυτού του εγγράφου. (Αν ο αριθμός έκδοσης έχει αλλάξει, χρησιμοποιήστε τις οδηγίες που βρίσκονται στη διανομή που κατεβάσατε). 2.4. Αποφασίστε για τις πολιτικές τοπικών διαδρομών σας Πρέπει να αποφασίσετε πού θέλετε να ζουν τα Java CGI προγράμματά σας. Γενικά, θα θέλετε να τα τοποθετήσετε σε έναν κατάλογο παράλληλα με τον cgi-bin κατάλογό σας. Ο δικός μου διακομιστής apache ήταν ρυθμισμένος να χρησιμοποιήσει τον /var/www/cgi-bin σαν τον cgi-bin κατάλογο, οπότε χρησιμοποιώ τον /var/www/javacgi σαν τον κατάλογο που τοποθετώ μέσα τα Java CGI προγράμματα. Πιθανώς να μη θέλετε να τοποθετήσετε τα Java CGI προγράμματά σας μέσα σε έναν από τους υπάρχοντες καταλόγους CLASSPATH. Επεξεργαστείτε το Makefile ώστε να αντικατοπτρίζεται η ρύθμιση του συστήματός σας. Επιβεβαιώστε ότι έχετε πρόσβαση ως χρήστης root και τρέξτε την εντολή make install. Αυτή θα μεταγλωττίσει τα Java προγράμματα, θα τροποποιήσει το java.cgi σενάριο για να ταιριάζει με το σύστημά σας και θα εγκαταστήσει τα προγράμματα στα απαραίτητα μέρη. Αν θέλετε την HTML έκδοση αυτής της τεκμηρίωσης και ένα HTML test έγγραφο επιπλέον, τρέξτε την εντολή make all αντί αυτής. 2.5. Ελέγχοντας την εγκατάστασή σας Εγκατεστημένα από τη διανομή είναι HTML έγγραφα που ονομάζονται javacgitest.html, javaemailtest.html και javahtmltest.html. Εάν τα εγκαταστήσατε όλα - all στο προηγούμενο μέρος, θα είναι στον κατάλογο που καθορίσατε για WEBDIR στο Makefile. Αν δεν το κάνατε, μπορείτε να τρέξετε την εντολή make test για να τα χτίσετε από τα javacgitest.html-dist, javaemailtest.html-dist και javahtmltest.html- dist. Όταν είστε σίγουροι πως η εγκατάστασή σας δουλεύει σωστά, ίσως να επιθυμείτε να διαγράψετε τα CGI_Test.class, Email_Test.class και HTML_Test.class από τον JAVACGI κατάλογό σας και τα javacgitest.html, javaemailtest.html και javahtmltest.html από τον WEBDIR κατάλογό σας αφού δείχνουν στο χρήστη πληροφορίες που είναι κανονικά μόνο διαθέσιμες στον διακομιστή. 3. Ρυθμίζοντας τον Διακομιστή σας να τρέχει προγράμματα Java CGI (ο σύντομος τρόπος) · Πάρτε το πακέτο Java CGI από το ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. (Ο αριθμός έκδοσης μπορεί να έχει αλλάξει). · Ξεπακετάρετε τη διανομή με αυτή την εντολή: gzip -dc java_cgi-0.5.tgz | tar -xvf - (Αν ο αριθμός έκδοσης έχει αλλάξει, χρησιμοποιήστε τις οδηγίες μέσα από εκείνη τη διανομή από αυτό το σημείο και ύστερα). · Επεξεργαστείτε το Makefile που θα βρείτε στο μόλις δημιουργημένο κατάλογο java_cgi-0.5 ώστε να είναι κατάλληλο για το σύστημά σας. · Σαν root, τρέξτε την εντολή make install. Αυτή θα μεταγλωττίσει τα Java προγράμματα, θα εφαρμόσει τις συγκεκριμένες πληροφορίες στο σύστημά σας και θα εγκαταστήσει τα διάφορα αρχεία. Αν θέλετε την HTML έκδοση αυτής της τεκμηρίωσης και ένα HTML test έγγραφο, τρέξτε την εντολή make all αντί αυτής. · Θα πρέπει να είστε έτοιμοι να ξεκινήσετε. 4. Εκτελώντας ένα πρόγραμμα Java CGI 4.1. Εμπόδια στο τρέξιμο προγραμμάτων Java κάτω από το μοντέλο CGI Υπάρχουν δύο κύρια προβλήματα στο τρέξιμο ενός προγράμματος Java από έναν διακομιστή ιστού: 4.1.1. Δεν μπορείτε να τρέξετε προγράμματα Java όπως τα κανονικά εκτελέσιμα. Χρειάζεται να τρέξετε τον διερμηνέα Java run-time και να παρέχετε την αρχική κλάση (πρόγραμμα για να τρέξετε) στη γραμμή εντολών. Με μία φόρμα HTML, δεν υπάρχει καμία φροντίδα για να στέλνετε μία γραμμή εντολών στον διακομιστή ιστού. 4.1.2. Η Java δεν έχει γενική πρόσβαση στο περιβάλλον. Κάθε μεταβλητή περιβάλλοντος που θα χρειαστεί από το πρόγραμμα Java πρέπει να περαστεί με σαφήνεια. Δεν υπάρχει καμία μέθοδος παρόμοια με τη λειτουργία της C, getenv() . 4.2. Ξεπερνώντας προβλήματα στο τρέξιμο προγραμμάτων Java CGI Για να αντιμετωπίσετε αυτά τα εμπόδια, έγραψα ένα CGI πρόγραμμα κελύφους που παρέχει τις πληροφορίες που χρειάζονται από τον Java διερμηνέα. 4.2.1. Το java.cgi script Αυτό το σενάριο κελύφους διαχειρίζεται την αλληλεπίδραση μεταξύ του HTTP δαίμονα και του προγράμματος Java CGI που επιθυμείτε να χρησιμοποιήσετε. Εξάγει το όνομα του προγράμματος που θέλετε να τρέξετε από τα δεδομένα που παρέχονται από το διακομιστή. Συλλέγει όλα τα δεδομένα περιβάλλοντος σε ένα προσωρινό αρχείο. Ύστερα, τρέχει τον Java run-time διερμηνέα με το όνομα του αρχείου από τις πληροφορίες περιβάλλοντος και το όνομα του προγράμματος που προστέθηκε στη γραμμή-εντολών. Το java.cgi script διαμορφώθηκε και εγκαταστάθηκε στο ``Αποφασίστε για τις πολιτικές τοπικών διαδρομών σας''. 4.2.2. Καλώντας το java.cgi από μία φόρμα HTML Οι φόρμες μου που χρησιμοποιούν προγράμματα Java CGI καθορίζουν μία ενέργεια φόρμας όπως ακολούθως: