Ελληνικό 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 καθορίζουν μία
  ενέργεια φόρμας όπως ακολούθως:

  <form action="/cgi-bin/java.cgi/CGI_Test" method="POST">


  Όπου /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.