home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Java-CGI-HOWTO < prev    next >
Text File  |  1998-12-02  |  28KB  |  1,321 lines

  1.   Java CGI HOWTO
  2.   by David H. Silber javacgi-document@orbits.com
  3.   v0.5, 1 December 1998
  4.  
  5.   This HOWTO document explains how to set up your server to allow CGI
  6.   programs written in Java and how to use Java to write CGI programs.
  7.   Although HOWTO documents are targetted towards use with the Linux
  8.   operating system, this particular one is not dependant on the particu¡
  9.   lar version of unix used.
  10.   ______________________________________________________________________
  11.  
  12.   Table of Contents
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Introduction
  68.  
  69.      1.1 Prior Knowledge
  70.      1.2 This Document
  71.      1.3 The Package
  72.      1.4 The Mailing List
  73.  
  74.   2. Setting Up Your Server to Run Java CGI Programs (With Explanations)
  75.  
  76.      2.1 System Requirements
  77.      2.2 Java CGI Add-On Software
  78.      2.3 Unpacking the Source
  79.      2.4 Decide On Your Local Path Policies
  80.      2.5 Testing your installation.
  81.  
  82.   3. Setting Up Your Server to Run Java CGI Programs (The Short Form)
  83.  
  84.   4. Executing a Java CGI Program
  85.  
  86.      4.1 Obstacles to Running Java Programs Under the CGI Model
  87.         4.1.1 You can't run Java programs like ordinary executables.
  88.         4.1.2 Java does not have general access to the environment.
  89.      4.2 Overcoming Problems in Running Java CGI Programs
  90.         4.2.1 The java.cgi script.
  91.         4.2.2 Invoking java.cgi from an HTML form.
  92.  
  93.   5. Using the Java CGI Classes.
  94.  
  95.      5.1 CGI
  96.         5.1.1 Class Syntax
  97.         5.1.2 Class Description
  98.         5.1.3 Member Summary
  99.         5.1.4 See Also
  100.         5.1.5 CGI()
  101.         5.1.6 getNames()
  102.         5.1.7 getValue()
  103.      5.2 CGI_Test
  104.         5.2.1 Member Summary
  105.         5.2.2 See Also
  106.         5.2.3 main()
  107.      5.3 Email
  108.         5.3.1 Class Syntax
  109.         5.3.2 Class Description
  110.         5.3.3 Member Summary
  111.         5.3.4 See Also
  112.         5.3.5 Email()
  113.         5.3.6 send()
  114.         5.3.7 sendTo()
  115.         5.3.8 subject()
  116.      5.4 Email_Test
  117.         5.4.1 Member Summary
  118.         5.4.2 See Also
  119.         5.4.3 main()
  120.      5.5 HTML
  121.         5.5.1 Class Syntax
  122.         5.5.2 Class Description
  123.         5.5.3 Member Summary
  124.         5.5.4 See Also
  125.         5.5.5 HTML()
  126.         5.5.6 author()
  127.         5.5.7 definitionList()
  128.         5.5.8 definitionListTerm()
  129.         5.5.9 endList()
  130.         5.5.10 listItem()
  131.         5.5.11 send()
  132.         5.5.12 title()
  133.      5.6 HTML_Test
  134.         5.6.1 Member Summary
  135.         5.6.2 See Also
  136.         5.6.3 main()
  137.      5.7 Text
  138.         5.7.1 Class Syntax
  139.         5.7.2 Class Description
  140.         5.7.3 Member Summary
  141.         5.7.4 See Also
  142.         5.7.5 add()
  143.         5.7.6 addLineBreak()
  144.         5.7.7 addParagraph()
  145.  
  146.   6. Future Plans
  147.  
  148.   7. Changes
  149.  
  150.      7.1 Changes from 0.4 to 0.5
  151.      7.2 Changes from 0.3 to 0.4
  152.      7.3 Changes from 0.2 to 0.3
  153.      7.4 Changes from 0.1 to 0.2
  154.  
  155.  
  156.   ______________________________________________________________________
  157.  
  158.   1.  Introduction
  159.  
  160.   Because of the way that Java is designed the programmer does not have
  161.   easy access to the system's environment variables.  Because of the way
  162.   that the Java Development Kit (JDK) is set up, it is necessary to use
  163.   multiple tokens to invoke a program, which does not mesh very well
  164.   with the standard HTML forms/CGI manner of operations.  There are ways
  165.   around these limitations, and I have implemented one of them.  Read
  166.   further for details.
  167.  
  168.   Since I wrote the previous paragraph in 1996, there have been many
  169.   changes in the Java technology.  It is likely that a better solution
  170.   to running server-side Java programs is now available -- perhaps you
  171.   should take a look at servlets.
  172.  
  173.  
  174.  
  175.  
  176.   1.1.  Prior Knowledge
  177.  
  178.   I am assuming that you have a general knowledge of HTML and CGI
  179.   concepts and at least a minimal knowledge of your HTTP server.  You
  180.   should also know how to program in Java, or a lot of this will not
  181.   make sense.
  182.  
  183.  
  184.  
  185.  
  186.   1.2.  This Document
  187.  
  188.   The latest version of this document can be read at
  189.   http://www.orbits.com/software/Java_CGI.html.
  190.  
  191.  
  192.  
  193.  
  194.   1.3.  The Package
  195.  
  196.   The latest version of the package described here can be accessed via
  197.   anonymous FTP at ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz.
  198.   The package distribution includes SGML source for this document.
  199.   The package is distributed under the terms of the GNU Library General
  200.   Public License.  This document can be distributed under the terms of
  201.   the Linux HOWTO copyright notice.
  202.  
  203.   If you use this software, please make some reference to
  204.   http://www.orbits.com/software/Java_CGI.html, so that others will be
  205.   able to find the Java CGI classes.
  206.  
  207.   I have run out of time to maintain and support this package, so this
  208.   will probably be its final release.  If anyone out there is
  209.   sufficiently enamoured of this software that they wish to take over
  210.   the maintenace of it, please contact me at javacgi-
  211.   document@orbits.com.
  212.  
  213.  
  214.  
  215.  
  216.   1.4.  The Mailing List
  217.  
  218.   I have created a majordomo list to allow people to help each-other
  219.   work through their mutual problems in installing and using this
  220.   software.  Send a message to javacgi-request@orbits.com, containing
  221.   the word subscribe.
  222.  
  223.  
  224.  
  225.  
  226.   2.  Setting Up Your Server to Run Java CGI Programs (With Explana¡
  227.   tions)
  228.  
  229.   This section will lead you through installing my Java CGI package with
  230.   copious explanations so that you know what the effects of your actions
  231.   will be.  If you just want to install the programs and don't care
  232.   about the whys & wherefores, skip to ``Setting Up Your Server to Run
  233.   Java CGI Programs (The Short Form)''.
  234.  
  235.  
  236.  
  237.  
  238.   2.1.  System Requirements
  239.  
  240.   This software should work on any unix-like web server that has the
  241.   Java Development Kit installed.  I am using it on a Debian Linux
  242.   system running apache as the HTTP daemon.  If you find that it does
  243.   not run on your server, please contact the mailing list.  See ``The
  244.   Mailing List'' for details.
  245.  
  246.   Unfortunatly, the Java run-time interpreter seems to be something of a
  247.   memory hog -- you may want to throw another few megabytes of RAM onto
  248.   your server if you will be using Java CGI programs a lot.
  249.  
  250.  
  251.  
  252.  
  253.   2.2.  Java CGI Add-On Software
  254.  
  255.   The software that I wrote to aid in this is called Java CGI.  You can
  256.   get it from ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz.  (The
  257.   version number may have changed.)
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.   2.3.  Unpacking the Source
  266.  
  267.   Find a convenient directory to unpack this package into.  (If you
  268.   don't already have a standard place to put packages, I suggest that
  269.   you use /usr/local/src.)  Unpack the distribution with this command:
  270.  
  271.   gzip -dc java_cgi-0.5.tgz | tar -xvf -
  272.  
  273.  
  274.   This will create a directory called java_cgi-0.5.  In there you will
  275.   find the files referenced in the rest of this document.  (If the ver¡
  276.   sion number has changed, use the instructions from within that distri¡
  277.   bution from this point on.)
  278.  
  279.  
  280.  
  281.  
  282.   2.4.  Decide On Your Local Path Policies
  283.  
  284.   You need to decide where you want your Java CGI programs to live.
  285.   Generally, you will want to put them in a directory in parallel with
  286.   your cgi-bin directory.  My apache server came configured to use
  287.   /var/www/cgi-bin as the cgi-bin directory, so I use /var/www/javacgi
  288.   as the directory to put Java CGI programs in.  You probably do not
  289.   want to put your Java CGI programs into one of the existing CLASSPATH
  290.   directories.  Edit the Makefile to reflect your system configuration.
  291.   Make sure that you are logged in as the root user and run make
  292.   install.  This will compile the Java programs, modify the java.cgi
  293.   script to fit in with your system and install the programs in the
  294.   appropriate places.  If you want the HTML version of this
  295.   documentation and an HTML test document in addition, run make all
  296.   instead.
  297.  
  298.  
  299.  
  300.  
  301.   2.5.  Testing your installation.
  302.  
  303.   Installed from the distribution are HTML documents called
  304.   javacgitest.html, javaemailtest.html and javahtmltest.html.  If you
  305.   installed all in the previous section, it will be in the directory you
  306.   specified for WEBDIR in the Makefile.  If you didn't, you can run make
  307.   test to build them from javacgitest.html-dist, javaemailtest.html-dist
  308.   and javahtmltest.html-dist.
  309.  
  310.   When you are sure that your installation is working correctly, you may
  311.   wish to remove CGI_Test.class, Email_Test.class and HTML_Test.class
  312.   from your JAVACGI directory and javacgitest.html, javaemailtest.html
  313.   and javahtmltest.html from your WEBDIR directory as they show the user
  314.   information that is normally only available to the server.
  315.  
  316.  
  317.  
  318.  
  319.   3.  Setting Up Your Server to Run Java CGI Programs (The Short Form)
  320.  
  321.  
  322.   ╖  Get the Java CGI package from
  323.      ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz.  (The version
  324.      number may have changed.)
  325.  
  326.   ╖  Unpack the distribution with this command:
  327.  
  328.      gzip -dc java_cgi-0.5.tgz | tar -xvf -
  329.  
  330.  
  331.   (If the version number has changed, use the instructions from within
  332.   that distribution from this point on.)
  333.  
  334.   ╖  Edit the Makefile you will find in the newly created directory
  335.      java_cgi-0.5 as appropriate to your system.
  336.  
  337.   ╖  As root, run make install.  This will compile the Java programs,
  338.      apply your system-specific information and install the various
  339.      files.  If you want the HTML version of this documentation and an
  340.      HTML test document, run make all instead.
  341.  
  342.   ╖  You should be ready to go.
  343.  
  344.  
  345.  
  346.  
  347.   4.  Executing a Java CGI Program
  348.  
  349.  
  350.  
  351.  
  352.  
  353.   4.1.  Obstacles to Running Java Programs Under the CGI Model
  354.  
  355.   There are two main problems in running a Java program from a web
  356.   server:
  357.  
  358.  
  359.  
  360.  
  361.   4.1.1.  You can't run Java programs like ordinary executables.
  362.  
  363.   You need to run the Java run-time interpreter and provide the initial
  364.   class (program to run) on the command-line.  With an HTML form, there
  365.   is no provision for sending a command-line to the web server.
  366.  
  367.  
  368.  
  369.  
  370.   4.1.2.  Java does not have general access to the environment.
  371.  
  372.   Every environment variable that will be needed by the Java program
  373.   must be explicitly passed in.  There is no method similar to the C
  374.   getenv() function.
  375.  
  376.  
  377.  
  378.  
  379.   4.2.  Overcoming Problems in Running Java CGI Programs
  380.  
  381.   To deal with these obstacles, I wrote a shell CGI program that
  382.   provides the information needed by the Java interpreter.
  383.  
  384.  
  385.  
  386.  
  387.   4.2.1.  The java.cgi script.
  388.  
  389.   This shell script manages the interaction between the HTTP daemon and
  390.   the Java CGI program that you wish to use.  It extracts the name of
  391.   the program that you want to run from the server-provided data.  It
  392.   collects all of the environment data into a temporary file.  Then, it
  393.   runs the Java run-time interpreter with the name of the file of
  394.   environment information and the program name added to the command-
  395.   line.
  396.  
  397.   The java.cgi script was configured and installed in ``Decide On Your
  398.   Local Path Policies''.
  399.  
  400.  
  401.  
  402.  
  403.   4.2.2.  Invoking java.cgi from an HTML form.
  404.  
  405.   My forms that use Java CGI programs specify a form action as follows:
  406.  
  407.   <form action="/cgi-bin/java.cgi/CGI_Test" method="POST">
  408.  
  409.  
  410.   Where /cgi-bin/ is your local CGI binary directory, java.cgi is the
  411.   Java front-end that allows us to run Java programs over the web and
  412.   CGI_Test is an example of the name of the Java program to run.
  413.  
  414.  
  415.  
  416.  
  417.   5.  Using the Java CGI Classes.
  418.  
  419.   There are currently three main classes supported -- ``CGI'', ``Email''
  420.   and ``HTML''.  I am considering adding classes to deal with MIME-
  421.   formatted input and output -- MIMEin & MIMEout, respectively.
  422.  
  423.   There are also a few support and test classes.  ``CGI_Test'',
  424.   ``Email_Test'' and ``HTML_Test'' are intended to be used to test your
  425.   installation.  They can also be used as a starting-point for your own
  426.   Java programs which use this class library.  The ``Text'' class is the
  427.   superclass for both the Email and the HTML classes.
  428.  
  429.  
  430.  
  431.  
  432.   5.1.  CGI
  433.  
  434.  
  435.  
  436.  
  437.  
  438.   5.1.1.  Class Syntax
  439.  
  440.   public class CGI
  441.  
  442.  
  443.  
  444.  
  445.   5.1.2.  Class Description
  446.  
  447.   The CGI class holds the ``CGI Information'' -- Environment variables
  448.   set by the web server and the name/value sent from a form when its
  449.   submit action is selected.  All information is stored in a Properties
  450.   class object.
  451.  
  452.   This class is in the ``Orbits.net'' package.
  453.  
  454.  
  455.  
  456.  
  457.   5.1.3.  Member Summary
  458.  
  459.  
  460.  
  461.  
  462.  
  463.   ______________________________________________________________________
  464.           CGI()         //  Constructor.
  465.           getNames()    //  Get the list of names.
  466.           getValue()    //  Get form value by specifying name.
  467.   ______________________________________________________________________
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.   5.1.4.  See Also
  475.  
  476.   CGI_Test.
  477.  
  478.  
  479.  
  480.  
  481.   5.1.5.  CGI()
  482.  
  483.  
  484.      Purpose
  485.         Constructs an object which contains the available CGI data.
  486.  
  487.      Syntax
  488.         public CGI()
  489.  
  490.      Description
  491.         When a CGI object is constructed, all available CGI information
  492.         is sucked-up into storage local to the new object.
  493.  
  494.  
  495.  
  496.  
  497.   5.1.6.  getNames()
  498.  
  499.  
  500.      Purpose
  501.         List the names which are defined to have corresponding values.
  502.  
  503.      Syntax
  504.         public Enumeration getKeys ()
  505.  
  506.      Description
  507.         Provides the full list of names for which coresponding values
  508.         are defined.
  509.  
  510.      Returns
  511.         An Enumeration of all the names defined.
  512.  
  513.  
  514.  
  515.  
  516.   5.1.7.  getValue()
  517.  
  518.  
  519.      Purpose
  520.         Retrieves the value associated with the name specified.
  521.  
  522.      Syntax
  523.         public String getValue ( String name )
  524.  
  525.      Description
  526.         This method provides the corespondence between the names and
  527.         values sent from an HTML form.
  528.  
  529.      Parameter
  530.  
  531.         name
  532.            The key by which values are selected.
  533.  
  534.      Returns
  535.         A String containing the value.
  536.  
  537.  
  538.  
  539.  
  540.   5.2.  CGI_Test
  541.  
  542.   This class provides both an example of how to use the CGI class and a
  543.   test program which can be used to confirm that the Java CGI package is
  544.   functioning correctly.
  545.  
  546.  
  547.  
  548.  
  549.   5.2.1.  Member Summary
  550.  
  551.  
  552.   ______________________________________________________________________
  553.           main()      //  Program main().
  554.   ______________________________________________________________________
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.   5.2.2.  See Also
  562.  
  563.   CGI.
  564.  
  565.  
  566.  
  567.  
  568.   5.2.3.  main()
  569.  
  570.  
  571.      Purpose
  572.         Provide a main() method.
  573.  
  574.      Syntax
  575.         public static void main( String argv[] )
  576.  
  577.      Description
  578.         This is the entry point for a CGI program which does nothing but
  579.         return a list of the available name/value pairs and their
  580.         current values.
  581.  
  582.      Parameter
  583.  
  584.         argv[]
  585.            Arguments passed to the program by the java.cgi script.
  586.            Currently unused.
  587.  
  588.  
  589.  
  590.  
  591.   5.3.  Email
  592.  
  593.  
  594.  
  595.   5.3.1.  Class Syntax
  596.  
  597.   public class Email extends Text
  598.  
  599.  
  600.  
  601.  
  602.   5.3.2.  Class Description
  603.  
  604.   Messages are built up with the Text class add*() methods and the e-
  605.   mail-specific methods added by this class.  When complete, the message
  606.   is sent to its destination.
  607.  
  608.   This class is in the ``Orbits.net'' package.
  609.  
  610.  
  611.  
  612.  
  613.   5.3.3.  Member Summary
  614.  
  615.  
  616.   ______________________________________________________________________
  617.           Email()      //  Constructor.
  618.           send()       //  Send the e-mail message.
  619.           sendTo()     //  Add a destination for message.
  620.           subject()    //  Set the Subject: for message.
  621.   ______________________________________________________________________
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.   5.3.4.  See Also
  629.  
  630.   Email_Test, Text.
  631.  
  632.  
  633.  
  634.  
  635.   5.3.5.  Email()
  636.  
  637.  
  638.      Purpose
  639.         Constructs an object which will contain an email message.
  640.  
  641.      Syntax
  642.         public Email()
  643.  
  644.      Description
  645.         Sets up an empty message to be completed by the Email methods.
  646.  
  647.      See Also
  648.         Text.
  649.  
  650.  
  651.  
  652.  
  653.   5.3.6.  send()
  654.  
  655.  
  656.      Purpose
  657.         Send the e-mail message.
  658.  
  659.      Syntax
  660.         public void send ()
  661.      Description
  662.         This formats and sends the message.  If no destination address
  663.         has been set, there is no action taken.
  664.  
  665.  
  666.  
  667.  
  668.   5.3.7.  sendTo()
  669.  
  670.  
  671.      Purpose
  672.         Add a destination for this message.
  673.  
  674.      Syntax
  675.         public String sendTo ( String address )
  676.  
  677.      Description
  678.         Add address to the list of destinations for this method.  There
  679.         is no set limit to the number of destinations an e-mail message
  680.         may have.  I'm sure that if you build up the list large enough,
  681.         you can exceed the size of the parameter list that the Mail
  682.         Transport Agent can accept or use up your memory.
  683.  
  684.      Parameter/
  685.  
  686.         address
  687.            A destination to send this message to.
  688.  
  689.  
  690.  
  691.  
  692.   5.3.8.  subject()
  693.  
  694.  
  695.      Purpose
  696.         Set the subject for this message.
  697.  
  698.      Syntax
  699.         public void subject ( String subject )
  700.  
  701.      Description
  702.         This method sets the text for the e-mail's Subject: line.  If
  703.         called more than once, the latest subject set is the one that is
  704.         used.
  705.  
  706.      Parameter
  707.  
  708.         subject
  709.            The text of this message's Subject: line.
  710.  
  711.  
  712.  
  713.  
  714.   5.4.  Email_Test
  715.  
  716.   This class provides both an example of how to use the Email class and
  717.   a test program which can be used to confirm that the Java CGI package
  718.   is functioning correctly.
  719.  
  720.  
  721.  
  722.  
  723.   5.4.1.  Member Summary
  724.  
  725.  
  726.  
  727.   ______________________________________________________________________
  728.           main()      //  Program main().
  729.   ______________________________________________________________________
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.   5.4.2.  See Also
  737.  
  738.   Email.
  739.  
  740.  
  741.  
  742.  
  743.   5.4.3.  main()
  744.  
  745.  
  746.      Purpose
  747.         Provide a main() method.
  748.  
  749.      Syntax
  750.         public static void main( String argv[] )
  751.  
  752.      Description
  753.         This is the entry point for a CGI program which returns a list
  754.         of the available name/value pairs and their current values.  It
  755.         will also send this list to the address specified in the Email
  756.         variable.
  757.  
  758.      Parameter
  759.  
  760.         argv[]
  761.            Arguments passed to the program by the java.cgi script.
  762.            Currently unused.
  763.  
  764.  
  765.  
  766.  
  767.   5.5.  HTML
  768.  
  769.  
  770.  
  771.  
  772.  
  773.   5.5.1.  Class Syntax
  774.  
  775.   public class HTML extends Text
  776.  
  777.  
  778.  
  779.  
  780.   5.5.2.  Class Description
  781.  
  782.   Messages are built up with the Text class add*() methods and the HTML-
  783.   specific methods added by this class.  When complete, the message is
  784.   sent to its destination.
  785.  
  786.   Currently, there is no error checking to confirm that the list-
  787.   building methods are being used in a correct order, so the  programmer
  788.   must take pains not to violate HTML syntax.
  789.  
  790.   This class is in the ``Orbits.net'' package.
  791.  
  792.  
  793.   5.5.3.  Member Summary
  794.  
  795.  
  796.   ______________________________________________________________________
  797.           HTML()                  //  Constructor.
  798.           author()                //  Set the name of the document author.
  799.           definitionList()        //  Start a definition list.
  800.           definitionListTerm()    //  Add a term to a definition list.
  801.           endList()               //  End a list.
  802.           listItem()              //  Add an entry to a list.
  803.           send()                  //  Send the HTML message.
  804.           title()                 //  Set the text for the document title.
  805.   ______________________________________________________________________
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.   5.5.4.  See Also
  813.  
  814.   HTML_Test, Text.
  815.  
  816.  
  817.  
  818.  
  819.   5.5.5.  HTML()
  820.  
  821.  
  822.      Purpose
  823.         Constructs an object which will contain an HTML message.
  824.  
  825.      Syntax
  826.         public HTML()
  827.  
  828.      Description
  829.         Sets up an empty message to be completed by the HTML methods.
  830.  
  831.      See Also
  832.         Text.
  833.  
  834.  
  835.  
  836.  
  837.   5.5.6.  author()
  838.  
  839.  
  840.      Purpose
  841.         Set the name of the document author.
  842.  
  843.      Syntax
  844.         public void author ( String author )
  845.  
  846.      Description
  847.         Set the name of the document author to author.
  848.  
  849.      Parameter/
  850.  
  851.         author
  852.            The text to use as the author of this message.
  853.  
  854.      See Also
  855.         title().
  856.  
  857.  
  858.  
  859.   5.5.7.  definitionList()
  860.  
  861.  
  862.      Purpose
  863.         Start a definition list.
  864.  
  865.      Syntax
  866.         public void definitionList ()
  867.  
  868.      Description
  869.         Start a definition list.  A definition list is a list
  870.         specialized so that each entry in the list is a term followed by
  871.         the definition text for that term.  The start of a definition
  872.         list should be followed by the creation of (at least) one
  873.         term/text pair and a call to the endList() method.  Note that,
  874.         currently, lists cannot be nested.
  875.  
  876.      See Also
  877.         definitionListTerm(), endList(), listItem().
  878.  
  879.  
  880.  
  881.  
  882.   5.5.8.  definitionListTerm()
  883.  
  884.  
  885.      Purpose
  886.         Add a term to a definition list.
  887.  
  888.      Syntax
  889.         public void definitionListTerm ()
  890.  
  891.      Description
  892.         Add a term to a definition list.  The text for the term part of
  893.         the current list entry should be appended to the message after
  894.         this method is called and before a corresponding listItem method
  895.         is called.
  896.  
  897.      See Also
  898.         definitionList(), listItem().
  899.  
  900.  
  901.  
  902.  
  903.   5.5.9.  endList()
  904.  
  905.  
  906.      Purpose
  907.         End a list.
  908.  
  909.      Syntax
  910.         public void endList ()
  911.  
  912.      Description
  913.         End a list.  This method closes out a list.  Note that,
  914.         currently, lists cannot be nested.
  915.  
  916.      See Also
  917.         definitionList().
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.   5.5.10.  listItem()
  926.  
  927.  
  928.      Purpose
  929.         Add an entry to a list.
  930.  
  931.      Syntax
  932.         public void listItem ()
  933.  
  934.         public void listItem ( String item )
  935.  
  936.         public boolean listItem ( String term, String item )
  937.  
  938.      Description
  939.         Add an entry to a list.  If the first form is used, the text for
  940.         the current list item should be appended to the message after
  941.         this method is called and before any other list methods are
  942.         called.  In the second and third forms, the item text is
  943.         specified as a parameter to the method instead of (or in
  944.         addition to) being appended to the message.  The third form is
  945.         specific to definition lists and provides both the term and the
  946.         definition of the list entry.
  947.  
  948.      Parameters
  949.  
  950.         item
  951.            The text of this list entry.
  952.  
  953.         term
  954.            The text of this definition list entry's term part.
  955.  
  956.      See Also
  957.         definitionList(), definitionListTerm(), endList().
  958.  
  959.  
  960.  
  961.  
  962.   5.5.11.  send()
  963.  
  964.  
  965.      Purpose
  966.         Send the HTML message.
  967.  
  968.      Syntax
  969.         public void send ()
  970.  
  971.      Description
  972.         Send the HTML message.
  973.  
  974.  
  975.  
  976.  
  977.   5.5.12.  title()
  978.  
  979.  
  980.      Purpose
  981.         Set the text for the document title.
  982.  
  983.      Syntax
  984.         public void title ( String title )
  985.  
  986.      Description
  987.         Set the text for the document title.
  988.  
  989.      Parameter
  990.  
  991.         title
  992.            The text of this message's title.
  993.  
  994.      See Also
  995.         author().
  996.  
  997.  
  998.  
  999.  
  1000.   5.6.  HTML_Test
  1001.  
  1002.   This class provides both an example of how to use the HTML class and a
  1003.   test program which can be used to confirm that the Java CGI package is
  1004.   functioning correctly.
  1005.  
  1006.  
  1007.  
  1008.  
  1009.   5.6.1.  Member Summary
  1010.  
  1011.  
  1012.   ______________________________________________________________________
  1013.           main()      //  Program main().
  1014.   ______________________________________________________________________
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.   5.6.2.  See Also
  1022.  
  1023.   HTML.
  1024.  
  1025.  
  1026.  
  1027.  
  1028.   5.6.3.  main()
  1029.  
  1030.  
  1031.      Purpose
  1032.         Provide a main() method.
  1033.  
  1034.      Syntax
  1035.         public static void main( String argv[] )
  1036.  
  1037.      Description
  1038.         This is the entry point for a CGI program which returns a list
  1039.         of the available name/value pairs in an HTML document, with each
  1040.         name/value pair displayed in a definition list element.
  1041.  
  1042.      Parameter
  1043.  
  1044.         argv[]
  1045.            Arguments passed to the program by the java.cgi script.
  1046.            Currently unused.
  1047.  
  1048.  
  1049.  
  1050.  
  1051.   5.7.  Text
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.   5.7.1.  Class Syntax
  1058.  
  1059.   public abstract class Text
  1060.  
  1061.  
  1062.  
  1063.  
  1064.   5.7.2.  Class Description
  1065.  
  1066.   This class is the superclass of the Email and HTML classes.  Messages
  1067.   are built up with the methods in this class and completed and
  1068.   formatted with the methods in subclasses.
  1069.  
  1070.   This class is in the ``Orbits.text'' package.
  1071.  
  1072.  
  1073.  
  1074.  
  1075.   5.7.3.  Member Summary
  1076.  
  1077.  
  1078.   ______________________________________________________________________
  1079.           Text()            //  Constructor.
  1080.           add()             //  Add text to this object.
  1081.           addLineBreak()    //  Add a line break.
  1082.           addParagraph()    //  Add a paragraph break.
  1083.   ______________________________________________________________________
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.   5.7.4.  See Also
  1091.  
  1092.   Email, HTML.
  1093.  
  1094.  
  1095.  
  1096.  
  1097.   5.7.5.  add()
  1098.  
  1099.  
  1100.      Purpose
  1101.         Add text to this item.
  1102.  
  1103.      Syntax
  1104.         public void add ( char addition )
  1105.  
  1106.         public void add ( String addition )
  1107.  
  1108.         public void add ( StringBuffer addition )
  1109.  
  1110.      Description
  1111.         Add addition to the contents of this text item.
  1112.  
  1113.      Parameter
  1114.  
  1115.         addition
  1116.            Text to be added to the text item.
  1117.  
  1118.      See Also
  1119.         addLineBreak(), addParagraph().
  1120.  
  1121.  
  1122.  
  1123.   5.7.6.  addLineBreak()
  1124.  
  1125.  
  1126.      Purpose
  1127.         Force a line break at this point in the text.
  1128.  
  1129.      Syntax
  1130.         public void addLineBreak ()
  1131.  
  1132.      Description
  1133.         Add a line break to the text at the current point.
  1134.  
  1135.      See Also
  1136.         add(), addParagraph().
  1137.  
  1138.  
  1139.  
  1140.  
  1141.   5.7.7.  addParagraph()
  1142.  
  1143.  
  1144.      Purpose
  1145.         Start a new paragaph.
  1146.  
  1147.      Syntax
  1148.         public void add ()
  1149.  
  1150.      Description
  1151.         Start a new paragraph at this point in the text flow.
  1152.  
  1153.      See Also
  1154.         add(), addLineBreak().
  1155.  
  1156.  
  1157.  
  1158.  
  1159.   6.  Future Plans
  1160.  
  1161.  
  1162.   ╖  Add to the Email class:
  1163.  
  1164.      Email( int capacity )
  1165.         Used when we know how much space the message will need to have
  1166.         allocated.
  1167.  
  1168.      sendTo( String [] address )
  1169.         Add a list of primary destinations to the e-mail message.
  1170.  
  1171.      sendCc( String address )
  1172.         Add a Carbon-Copy destination to the e-mail message.
  1173.  
  1174.      sendCc( String [] address )
  1175.         Add a list of Carbon-Copy destinations to the e-mail message.
  1176.  
  1177.      sendBcc( String address )
  1178.         Add a Blind Carbon-Copy destination to the e-mail message.
  1179.  
  1180.      sendBcc( String [] address )
  1181.         Add a list of Blind Carbon-Copy destinations to the e-mail
  1182.         message.
  1183.  
  1184.   ╖  Add to the HTML class:
  1185.  
  1186.      HTML( int capacity )
  1187.         Used when we know how much space the message will need to have
  1188.         allocated.
  1189.      public void unorderedList()
  1190.         Start an unordered list.
  1191.  
  1192.      public void orderedList()
  1193.         Start an ordered list.
  1194.  
  1195.      public void directoryList()
  1196.         Start a directory list.
  1197.  
  1198.      public void menuList()
  1199.         Start a menu list.
  1200.  
  1201.      void anchor( String anchorName )
  1202.         Specify an anchor.
  1203.  
  1204.      void link( String url, String text )
  1205.         Specify a link.
  1206.  
  1207.      void applet( String url, String altText )
  1208.         Specify an applet link.
  1209.  
  1210.   ╖  Allow HTML lists to be nested.
  1211.  
  1212.   ╖  Add error checking code to enforce correct ordering of HTML list
  1213.      formatting codes.
  1214.  
  1215.   ╖  The location of the file of environment data should be configurable
  1216.      from the Makefile.
  1217.  
  1218.   ╖  Get rid of the spurious empty name/value pair that appears in the
  1219.      list when we are dealing with the GET method of data transfer.
  1220.  
  1221.   ╖  Consider having CGI implement the java.util.Enumeration interface
  1222.      to successively provide variable names.
  1223.  
  1224.   ╖  Add a Test class, which would use every method in this package.
  1225.  
  1226.   ╖  Document how CGI_Test, Email_Test and HTML_Test build on each other
  1227.      to provide incremental tests for debugging purposes.
  1228.  
  1229.   ╖  Document how Test uses every feature available in this package.
  1230.  
  1231.  
  1232.  
  1233.  
  1234.   7.  Changes
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.   7.1.  Changes from 0.4 to 0.5
  1241.  
  1242.  
  1243.   ╖  Changed documentation and comments to reflect the final nature of
  1244.      this release.
  1245.  
  1246.  
  1247.  
  1248.  
  1249.   7.2.  Changes from 0.3 to 0.4
  1250.  
  1251.  
  1252.   ╖  Fleshed out the HTML class to provide minimal functionality.
  1253.  
  1254.  
  1255.   ╖  Wrote the HTML_Test class and javahtmltest.html-dist.
  1256.  
  1257.   ╖  Added the HTML methods to deal with a definition list.
  1258.  
  1259.  
  1260.  
  1261.  
  1262.   7.3.  Changes from 0.2 to 0.3
  1263.  
  1264.  
  1265.   ╖  Added the Text and Email classes.  HTML was also added, but it is
  1266.      merely a stub at this point.
  1267.  
  1268.   ╖  Put the various classes into packages.  The main classes are in
  1269.      Orbits.net.*, the support class Text is in Orbits.text.Text.
  1270.  
  1271.   ╖  Changed CGItest to CGI_Test.
  1272.  
  1273.   ╖  Added the Email_Test class.
  1274.  
  1275.  
  1276.  
  1277.  
  1278.   7.4.  Changes from 0.1 to 0.2
  1279.  
  1280.  
  1281.   ╖  The environment variables are put into a temportary file instead of
  1282.      being crammed into the Java inperpreter command-line.  The CGI
  1283.      class and java.cgi had to be modified.
  1284.  
  1285.   ╖  The javacgitest.html document is made part of the distribution.
  1286.  
  1287.   ╖  The text files which are modified by make upon installation are
  1288.      provided with names that end with -dist.
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.