Ελληνικό 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 καθορίζουν μία ενέργεια φόρμας όπως ακολούθως:
Όπου /cgi-bin/ είναι ο τοπικός σας CGI binary κατάλογος, java.cgi είναι το Java front-end που μας επιτρέπει να τρέχουμε προγράμματα Java στον ιστό και το CGI_Test είναι ένα παράδειγμα ονόματος προγράμματος Java για να τρέξετε. 5. Χρησιμοποιώντας τις Java CGI Κλάσεις Υπάρχουν προς το παρόν τρεις κύριες κλάσεις που υποστηρίζονται -- ``CGI'', ``Email'' και ``HTML''. Σκέφτομαι να προσθέσω κλάσεις για να αντιμετωπίσω τα MIME-διαμορφωμένα εισαγόμενα (input) και εξαγόμενα (output) -- MIMEin & MIMEout, αντίστοιχα. Υπάρχουν επίσης μερικές support και test κλάσεις. ``CGI_Test'', ``Email_Test'' και ``HTML_Test'' σκοπεύουν να χρησιμοποιηθούν για να ελέγξουν την εγκατάστασή σας. Μπορούν επίσης να χρησιμοποιηθούν σαν ένα σημείο-εκκίνησης για τα δικά σας προγράμματα Java που χρησιμοποιούν αυτή τη βιβλιοθήκη κλάσεων. Η ``Text'' κλάση είναι η υπερκλάση και για τις δύο κλάσεις, την Email και την HTML. 5.1. CGI 5.1.1. Σύνταξη κλάσης public class CGI 5.1.2. Περιγραφή κλάσης Η CGI κλάση κρατάει τις ``CGI Πληροφορίες'' -- Μεταβλητές περιβάλλοντος από τον διακομιστή ιστού και το όνομα/τιμή που στέλνονται από μία φόρμα όταν η submit ενέργεια είναι επιλεγμένη. Όλες οι πληροφορίες αποθηκεύονται σε ένα Properties αντικείμενο κλάσης. Αυτή η κλάση είναι στο πακέτο ``Orbits.net''. 5.1.3. Περίληψη μελών CGI() // Κατασκευαστής. getNames() // Παίρνει τη λίστα ονομάτων. getValue() // Παίρνει την τιμή φόρμας κατά προσδιορισμένο όνομα. 5.1.4. Δείτε επίσης CGI_Test. 5.1.5. CGI() Purpose Κατασκευάζει ένα αντικείμενο που περιέχει τα διαθέσιμα CGI δεδομένα. Syntax public CGI() Description Όταν κατασκευάζεται ένα αντικείμενο CGI, όλες οι διαθέσιμες CGI πληροφορίες αναρροφούνται σε αποθήκη τοπικά στο νέο αντικείμενο. 5.1.6. getNames() Purpose Κάνει λίστα των ονομάτων που είναι ορισμένες για να έχουν αντίστοιχες τιμές. Syntax public Enumeration getKeys () Description Παρέχει την πλήρη λίστα των ονομάτων για τα οποία αντίστοιχες τιμές είναι ορισμένες. Returns Μία Enumeration όλων των ορισμένων ονομάτων. 5.1.7. getValue() Purpose Επανακτά την value συσχετισμένη με το name που έχει οριστεί. Syntax public String getValue ( String name ) Description Αυτή η μέθοδος παρέχει τη αντιστοιχία μεταξύ των names και values που στέλνονται από μία HTML φόρμα. Παράμετρος name Το κλειδί κατά το οποίο οι τιμές επιλέγονται. Returns Ένα String που περιλαμβάνει την τιμή. 5.2. CGI_Test Αυτή η κλάση παρέχει ένα παράδειγμα του πώς να χρησιμοποιείτε την κλάση CGI και ένα πρόγραμμα ελέγχου που μπορεί να χρησιμοποιηθεί για να επιβεβαιώσει ότι το πακέτο Java CGI λειτουργεί σωστά. 5.2.1. Περίληψη μελών main() // Πρόγραμμα main(). 5.2.2. Δείτε επίσης CGI. 5.2.3. main() Purpose Παρέχει μία main() μέθοδο. Syntax public static void main( String argv[] ) Description Αυτό είναι το σημείο καταχώρησης για ένα πρόγραμμα CGI που δεν κάνει τίποτα άλλο από το να αναφέρει μία λίστα με όλα τα διαθέσιμα όνομα/τιμή ζευγάρια και τις τρέχουσες τιμές τους. Παράμετρος argv[] Επιχειρήματα περασμένα στο πρόγραμμα από το java.cgi script. Προς το παρόν αχρησιμοποίητη. 5.3. Email 5.3.1. Σύνταξη Κλάσης public class Email extends Text 5.3.2. Περιγραφή κλάσης Μηνύματα σχηματίζονται με την Text κλάση add*() μεθόδους και τις e- mail-συγκεκριμένες μεθόδους που προστίθενται από αυτήν την κλάση. Όταν ολοκληρωθεί, το μήνυμα στέλνεται στον προορισμό του. Αυτή η κλάση είναι στο πακέτο ``Orbits.net''. 5.3.3. Περίληψη μελών Email() // Κατασκευαστής. send() // Στέλνει το e-mail μήνυμα. sendTo() // Προσθέτει έναν προορισμό για το μήνυμα. subject() // Ρυθμίζει το Θέμα: για το μήνυμα. 5.3.4. Δείτε επίσης Email_Test, Text. 5.3.5. Email() Purpose Κατασκευάζει ένα αντικείμενο το οποίο θα περιέχει ένα email μήνυμα. Syntax public Email() Description Ρυθμίζει ένα κενό μήνυμα για να ολοκληρωθεί από τις Email μεθόδους. See Also Text. 5.3.6. send() Purpose Στέλνει το e-mail μήνυμα. Syntax public void send () Description Αυτή διαμορφώνει και στέλνει το μήνυμα. Αν καμία διεύθυνση προορισμού δεν έχει ρυθμιστεί, δε λαμβάνεται καμία ενέργεια. 5.3.7. sendTo() Purpose Προσθέτει έναν προορισμό για αυτό το μήνυμα. Syntax public String sendTo ( String address ) Description Προσθέτει την address στη λίστα προορισμών για αυτήν την μέθοδο. Δεν υπάρχει κανένα όριο ρύθμισης στον αριθμό προορισμών που ένα e-mail μήνυμα μπορεί να έχει. Είμαι σίγουρος πως αν σχηματίσετε τη λίστα αρκετά μεγάλη, μπορείτε να υπερβεί τε το μέγεθος της λίστας παραμέτρων που ο Mail Transport Agent μπορεί να αποδεχθεί ή να καταναλώσετε τη μνήμη σας. Parameter/ address Ένας προορισμός για να στείλετε αυτό το μήνυμα. 5.3.8. subject() Purpose Στέλνει το θέμα για αυτό το μήνυμα. Syntax public void subject ( String subject ) Description Αυτή η μέθοδος ρυθμίζει το κείμενο για την γραμμή Subject: του e-mail. Αν κληθεί περισσότερες από μία φορές, το τελευταίο ρυθμισμένο θέμα είναι αυτό που χρησιμοποιείται. Parameter subject Το κείμενο της Subject: γραμμής αυτού του μηνύματος. 5.4. Email_Test Αυτή η κλάση παρέχει ένα παράδειγμα του πώς να χρησιμοποιείτε την Email κλάση και ένα test πρόγραμμα που μπορεί να χρησιμοποιηθεί για να επιβεβαιώσει ότι το Java CGI πακέτο λειτουργεί σωστά. 5.4.1. Περίληψη μελών main() // Πρόγραμμα main(). 5.4.2. Δείτε επίσης Email. 5.4.3. main() Purpose Παρέχει μία main() μέθοδο. Syntax public static void main( String argv[] ) Description Αυτό είναι το σημείο καταχώρησης για ένα πρόγραμμα CGI που αναφέρει μία λίστα με όλα τα διαθέσιμα όνομα/τιμή ζευγάρια και τις τρέχουσες τιμές τους. Επίσης, θα στείλει αυτή τη λίστα στην καθορισμένη διεύθυνση στην Email μεταβλητή. Παράμετρος argv[] Επιχειρήματα περνιούνται στο πρόγραμμα από το java.cgi σενάριο. Προς το παρόν αχρησιμοποίητα. 5.5. HTML 5.5.1. Σύνταξη κλάσης public class HTML extends Text 5.5.2. Περιγραφή κλάσης Μηνύματα σχηματίζονται με την Text κλάση add*() μεθόδους και τις HTML-συγκεκριμένες μεθόδους που προστίθενται από αυτήν την κλάση. Όταν ολοκληρωθεί, το μήνυμα στέλνεται στον προορισμό του. Προς το παρόν, δεν υπάρχει έλεγχος σφαλμάτων για να επιβεβαιώσει ότι οι μέθοδοι δημιουργίας-λίστας χρησιμοποιούνται σε μία σωστή σειρά, οπότε ο προγραμματιστής πρέπει να παίρνει μέτρα για να μην παραβιάσει την HTML σύνταξη. Αυτή η κλάση είναι στο πακέτο ``Orbits.net''. 5.5.3. Περίληψη μελών HTML() // Κατασκευαστής. author() // Ρυθμίζει το όνομα του συγγραφέα του εγγράφου. definitionList() // Ξεκινά μία λίστα ορισμών. definitionListTerm() // Προσθέτει έναν όρο στη λίστα ορισμών. endList() // Τελειώνει μία λίστα. listItem() // Προσθέτει μία καταχώριση σε μία λίστα. send() // Στέλνει το HTML μήνυμα. title() // Ρυθμίζει το κείμενο για τον τίτλο του εγγράφου. 5.5.4. Δείτε επίσης HTML_Test, Text. 5.5.5. HTML() Purpose Δημιουργεί ένα αντικείμενο που θα περιέχει ένα HTML μήνυμα. Syntax public HTML() Description Ρυθμίζει ένα κενό μήνυμα να συμπληρωθεί από τις HTML μεθόδους. See Also Text. 5.5.6. author() Purpose Ρυθμίζει το όνομα του συγγραφέα του εγγράφου. Syntax public void author ( String author ) Description Ρυθμίζει το όνομα του συγγραφέα του εγγράφου σε author. Parameter/ author Το κείμενο που πρέπει να χρησιμοποιηθεί σαν ο συγγραφέας αυτού του μηνύματος. See Also title(). 5.5.7. definitionList() Purpose Αρχίζει μια λίστα ορισμών. Syntax public void definitionList () Description Αρχίζει μια λίστα ορισμών. Η definition list είναι μία λίστα ειδικευμένη έτσι ώστε κάθε καταχώριση στη λίστα είναι ένας term ακολουθούμενος από το text ορισμών για αυτόν τον όρο. Η αρχή μιας λίστας ορισμών θα πρέπει να ακολουθείται από τουλάχιστον) ένα όρος/κείμενο ζευγάρι και μία κλήση στην endList() μέθοδο. Σημειώστε πως, προς το παρόν, οι λίστες δεν μπορούν να είναι φωλιασμένες (nested) η μία μέσα στην άλλη. See Also definitionListTerm(), endList(), listItem(). 5.5.8. definitionListTerm() Purpose Προσθέτει έναν όρο στη λίστα ορισμών. Syntax public void definitionListTerm () Description Προσθέτει έναν όρο στη λίστα ορισμών. Το κείμενο για το κομμάτι του όρου της τρέχουσας καταχώρησης λίστας θα πρέπει να επισυνάπτεται στο μήνυμα αφού η μέθοδος αυτού καλείται και πριν μια αντίστοιχη listItem μέθοδος καλείται. See Also definitionList(), listItem(). 5.5.9. endList() Purpose Τελειώνει μια λίστα. Syntax public void endList () Description Τελειώνει μια λίστα. Αυτή η μέθοδος κλείνει μία λίστα. Σημειώστε ότι, προς το παρόν, οι λίστες δεν μπορούν να είναι φωλιασμένες (nested), η μία μέσα στην άλλη. See Also definitionList(). 5.5.10. listItem() Purpose Προσθέτει μία καταχώρηση σε μία λίστα. Syntax public void listItem () public void listItem ( String item ) public boolean listItem ( String term, String item ) Description Προσθέτει μία καταχώρηση σε μία λίστα. Αν η πρώτη φόρμα χρησιμοποιείται, το κείμενο για την τρέχων αντικείμενο λίστας θα πρέπει να επισυνάπτεται στο μήνυμα αφού η μέθοδος αυτή καλείται και πριν άλλες μέθοδοι λίστας καλούνται. Στην δεύτερη και τρίτη φόρμα, το item κείμενο προσδιορίζεται σαν μία παράμετρος στη μέθοδο αντί να (ή επιπροσθέτως στο να) επισυνάπτεται στο μήνυμα. Η τρίτη φόρμα είναι ειδική στις λίστες ορισμών και παρέχει και τον όρο και του ορισμό της καταχώρησης λίστας. Parameters item Το κείμενο αυτής της καταχώρησης λίστας. term Το κείμενο αυτής της λίστας ορισμών του κομματιού του όρου καταχώρησης. See Also definitionList(), definitionListTerm(), endList(). 5.5.11. send() Purpose Στέλνει το HTML μήνυμα. Syntax public void send () Description Στέλνει το HTML μήνυμα. 5.5.12. title() Purpose Ρυθμίζει το κείμενο για τον τίτλο εγγράφου. Syntax public void title ( String title ) Description Ρυθμίζει το κείμενο για τον τίτλο εγγράφου. Parameter title Το κείμενο αυτού του τίτλου του μηνύματος. See Also author(). 5.6. HTML_Test Αυτή η κλάση παρέχει ένα παράδειγμα του πώς να χρησιμοποιείτε την HTML κλάση και ένα test πρόγραμμα που μπορεί να χρησιμοποιηθεί για να επιβεβαιώσει ότι το πακέτο Java CGI λειτουργεί σωστά. 5.6.1. Περίληψη μελών main() // Πρόγραμμα main(). 5.6.2. Δείτε επίσης HTML. 5.6.3. main() Purpose Παρέχει μία main() μέθοδο. Syntax public static void main( String argv[] ) Description Αυτό είναι το σημείο καταχώρησης για ένα πρόγραμμα CGI που επιστρέφει μία λίστα των διαθέσιμων όνομα/τιμή ζευγαριών σε ένα HTML έγγραφο, με το κάθε όνομα/τιμή ζευγάρι να απεικονίζεται σε ένα στοιχείο λίστας ορισμών. Παράμετρος argv[] Επιχειρήματα περασμένα στο πρόγραμμα από το java.cgi σενάριο. Προς το παρόν δε χρησιμοποιούνται. 5.7. Text 5.7.1. Σύνταξη κλάσης public abstract class Text 5.7.2. Περιγραφή κλάσης Η κλάση είναι η υπερκλάση των Email και HTML κλάσεων. Μηνύματα χτίζονται με τις μεθόδους σε αυτήν την κλάση και συμπληρώνεται και διαμορφώνεται με τις μεθόδους σε υποκλάσεις. Αυτή η κλάση είναι στο πακέτο ``Orbits.text''. 5.7.3. Περίληψη μελών Text() // Κατασκευαστής. add() // Προσθέτει κείμενο σε αυτό το αντικείμενο. addLineBreak() // Προσθέτει μια διακοπή γραμμής. addParagraph() // Προσθέτει μία διακοπή παραγράφου. 5.7.4. Δείτε επίσης Email, HTML. 5.7.5. add() Purpose Προσθέτει κείμενο σε αυτό το αντικείμενο. Syntax public void add ( char addition ) public void add ( String addition ) public void add ( StringBuffer addition ) Description Προσθέτει addition στα περιεχόμενα αυτού του αντικειμένου κειμένου. Parameter addition Κείμενο που πρέπει να προστεθεί στο αντικείμενο κειμένου See Also addLineBreak(), addParagraph(). 5.7.6. addLineBreak() Purpose Αναγκάζει μία διακοπή γραμμής σε αυτό το σημείο στο κείμενο. Syntax public void addLineBreak () Description Προσθέτει μία διακοπή γραμμής στο κείμενο στο τρέχον σημείο. See Also add(), addParagraph(). 5.7.7. addParagraph() Purpose Αρχίζει μία νέα παράγραφο. Syntax public void add () Description Αρχίζει μία νέα παράγραφο σε αυτό το σημείο στη ροή κειμένου. See Also add(), addLineBreak(). 6. Μελλοντικά Σχέδια · Προσθήκη στην Email κλάση: Email( int capacity ) Χρησιμοποιείται όταν γνωρίζουμε πόσο χώρο το μήνυμα θα χρειαστεί να έχει παραχωρημένο. sendTo( String [] address ) Προσθέτει μία λίστα πρωταρχικών προορισμών στο e-mail μήνυμα. sendCc( String address ) Προσθέτει ένα Carbon-Copy προορισμό στο e-mail μήνυμα. sendCc( String [] address ) Προσθέτει μία λίστα από Carbon-Copy προορισμούς στο e-mail μήνυμα. sendBcc( String address ) Προσθέτει ένα Blind Carbon-Copy προορισμό στο e-mail μήνυμα. sendBcc( String [] address ) Προσθέτει μία λίστα από Blind Carbon-Copy προορισμούς στο e-mail μήνυμα. · Προσθήκη στην HTML κλάση: HTML( int capacity ) Χρησιμοποιείται όταν γνωρίζουμε πόσο χώρο το μήνυμα θα χρειαστεί να έχει παραχωρημένο. public void unorderedList() Αρχίζει μία μη ταξινομημένη λίστα. public void orderedList() Αρχίζει μία ταξινομημένη λίστα. public void directoryList() Αρχίζει μία λίστα καταλόγων. public void menuList() Αρχίζει μία λίστα μενού. void anchor( String anchorName ) Προσδιορίζει ένα anchor. void link( String url, String text ) Προσδιορίζει έναν δεσμό. void applet( String url, String altText ) Προσδιορίζει έναν δεσμό applet. · Επιτρέπει φωλιασμένες (nested) HTML λίστες. · Προσθήκη κώδικα ελέγχου σφαλμάτων για να επιβάλλει σωστή ταξινόμηση της HTML λίστας κωδικών διαμόρφωσης. · Η τοποθεσία του αρχείου των δεδομένων περιβάλλοντος θα πρέπει να είναι διαμορφώσιμο από το Makefile. · Απαλλαγή από το ψεύτικα άδειο όνομα/τιμή ζευγάρι που εμφανίζεται μέσα στη λίστα όταν αντιμετωπίζουμε την GET μέθοδο της μεταφοράς δεδομένων. · Σκέψη για να έχουμε το CGI να εκτελεί την java.util.Enumeration επιφάνεια για να παρέχει επιτυχώς ονόματα μεταβλητών. · Προσθήκη μιας Test κλάσης, που θα χρησιμοποιούσε κάθε μέθοδο σε αυτό το πακέτο. · Τεκμηρίωση πώς οι CGI_Test, Email_Test και HTML_Test χτίστηκαν η μία πάνω στην άλλη για να παρέχουν αυξανόμενους ελέγχους για σκοπούς εκσφαλμάτωσης. · Τεκμηρίωση πώς η Test χρησιμοποιεί κάθε χαρακτηριστικό διαθέσιμο σε αυτό το πακέτο. 7. Αλλαγές 7.1. Αλλαγές από την 0.4 στην 0.5 · Αλλάχτηκε η τεκμηρίωση και τα σχόλια για να αντικατοπτρίζεται η τελική φύση αυτής της κυκλοφορίας. 7.2. Αλλαγές από την 0.3 στην 0.4 · Ενσαρκώθηκε η HTML κλάση για να παρέχει ελάχιστη λειτουργικότητα. · Γράφτηκε η HTML_Test κλάση και το javahtmltest.html-dist. · Προστέθηκαν οι HTML μέθοδοι για να αντιμετωπιστεί μια λίστα ορισμών. 7.3. Αλλαγές από την 0.2 στην 0.3 · Προστέθηκαν οι Text και Email κλάσεις. Η HTML επίσης προστέθηκε, αλλά ήταν μόνο ένα απόκομμα σε αυτό το σημείο. · Τοποθετήθηκαν οι διάφορες κλάσεις σε πακέτα. Οι κύριες κλάσεις είναι στο Orbits.net.*, η κλάση υποστήριξης Text είναι στο Orbits.text.Text. · Αλλάχτηκε το CGItest σε CGI_Test. · Προστέθηκε η Email_Test κλάση. 7.4. Αλλαγές από την 0.1 στην 0.2 · Οι μεταβλητές περιβάλλοντος τοποθετούνται σε ένα προσωρινό αρχείο αντί να είναι στοιβαγμένες στη γραμμή-εντολών του Java διερμηνέα . Η CGI κλάση και το java.cgi έπρεπε να τροποποιηθούν. · Το javacgitest.html έγγραφο γίνεται μέρος της διανομής. · Τα αρχεία κειμένου που τροποποιούνται από την make κατά την εγκατάσταση παρέχονται με ονόματα που τελειώνουν σε -dist.