Java CGI HOWTO by David H. Silber javacgi-document@orbits.com v0.5, 1 December 1998 This HOWTO document explains how to set up your server to allow CGI programs written in Java and how to use Java to write CGI programs. Although HOWTO documents are targetted towards use with the Linux operating system, this particular one is not dependant on the particu- lar version of unix used. ______________________________________________________________________ Table of Contents 1. Introduction 1.1 Prior Knowledge 1.2 This Document 1.3 The Package 1.4 The Mailing List 2. Setting Up Your Server to Run Java CGI Programs (With Explanations) 2.1 System Requirements 2.2 Java CGI Add-On Software 2.3 Unpacking the Source 2.4 Decide On Your Local Path Policies 2.5 Testing your installation. 3. Setting Up Your Server to Run Java CGI Programs (The Short Form) 4. Executing a Java CGI Program 4.1 Obstacles to Running Java Programs Under the CGI Model 4.1.1 You can't run Java programs like ordinary executables. 4.1.2 Java does not have general access to the environment. 4.2 Overcoming Problems in Running Java CGI Programs 4.2.1 The java.cgi script. 4.2.2 Invoking java.cgi from an HTML form. 5. Using the Java CGI Classes. 5.1 CGI 5.1.1 Class Syntax 5.1.2 Class Description 5.1.3 Member Summary 5.1.4 See Also 5.1.5 CGI() 5.1.6 getNames() 5.1.7 getValue() 5.2 CGI_Test 5.2.1 Member Summary 5.2.2 See Also 5.2.3 main() 5.3 Email 5.3.1 Class Syntax 5.3.2 Class Description 5.3.3 Member Summary 5.3.4 See Also 5.3.5 Email() 5.3.6 send() 5.3.7 sendTo() 5.3.8 subject() 5.4 Email_Test 5.4.1 Member Summary 5.4.2 See Also 5.4.3 main() 5.5 HTML 5.5.1 Class Syntax 5.5.2 Class Description 5.5.3 Member Summary 5.5.4 See Also 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_Test 5.6.1 Member Summary 5.6.2 See Also 5.6.3 main() 5.7 Text 5.7.1 Class Syntax 5.7.2 Class Description 5.7.3 Member Summary 5.7.4 See Also 5.7.5 add() 5.7.6 addLineBreak() 5.7.7 addParagraph() 6. Future Plans 7. Changes 7.1 Changes from 0.4 to 0.5 7.2 Changes from 0.3 to 0.4 7.3 Changes from 0.2 to 0.3 7.4 Changes from 0.1 to 0.2 ______________________________________________________________________ 1. Introduction Because of the way that Java is designed the programmer does not have easy access to the system's environment variables. Because of the way that the Java Development Kit (JDK) is set up, it is necessary to use multiple tokens to invoke a program, which does not mesh very well with the standard HTML forms/CGI manner of operations. There are ways around these limitations, and I have implemented one of them. Read further for details. Since I wrote the previous paragraph in 1996, there have been many changes in the Java technology. It is likely that a better solution to running server-side Java programs is now available -- perhaps you should take a look at servlets. 1.1. Prior Knowledge I am assuming that you have a general knowledge of HTML and CGI concepts and at least a minimal knowledge of your HTTP server. You should also know how to program in Java, or a lot of this will not make sense. 1.2. This Document The latest version of this document can be read at http://www.orbits.com/software/Java_CGI.html. 1.3. The Package The latest version of the package described here can be accessed via anonymous FTP at ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. The package distribution includes SGML source for this document. The package is distributed under the terms of the GNU Library General Public License. This document can be distributed under the terms of the Linux HOWTO copyright notice. If you use this software, please make some reference to http://www.orbits.com/software/Java_CGI.html, so that others will be able to find the Java CGI classes. I have run out of time to maintain and support this package, so this will probably be its final release. If anyone out there is sufficiently enamoured of this software that they wish to take over the maintenace of it, please contact me at javacgi- document@orbits.com. 1.4. The Mailing List I have created a majordomo list to allow people to help each-other work through their mutual problems in installing and using this software. Send a message to javacgi-request@orbits.com, containing the word subscribe. 2. Setting Up Your Server to Run Java CGI Programs (With Explana- tions) This section will lead you through installing my Java CGI package with copious explanations so that you know what the effects of your actions will be. If you just want to install the programs and don't care about the whys & wherefores, skip to ``Setting Up Your Server to Run Java CGI Programs (The Short Form)''. 2.1. System Requirements This software should work on any unix-like web server that has the Java Development Kit installed. I am using it on a Debian Linux system running apache as the HTTP daemon. If you find that it does not run on your server, please contact the mailing list. See ``The Mailing List'' for details. Unfortunatly, the Java run-time interpreter seems to be something of a memory hog -- you may want to throw another few megabytes of RAM onto your server if you will be using Java CGI programs a lot. 2.2. Java CGI Add-On Software The software that I wrote to aid in this is called Java CGI. You can get it from ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. (The version number may have changed.) 2.3. Unpacking the Source Find a convenient directory to unpack this package into. (If you don't already have a standard place to put packages, I suggest that you use /usr/local/src.) Unpack the distribution with this command: gzip -dc java_cgi-0.5.tgz | tar -xvf - This will create a directory called java_cgi-0.5. In there you will find the files referenced in the rest of this document. (If the ver- sion number has changed, use the instructions from within that distri- bution from this point on.) 2.4. Decide On Your Local Path Policies You need to decide where you want your Java CGI programs to live. Generally, you will want to put them in a directory in parallel with your cgi-bin directory. My apache server came configured to use /var/www/cgi-bin as the cgi-bin directory, so I use /var/www/javacgi as the directory to put Java CGI programs in. You probably do not want to put your Java CGI programs into one of the existing CLASSPATH directories. Edit the Makefile to reflect your system configuration. Make sure that you are logged in as the root user and run make install. This will compile the Java programs, modify the java.cgi script to fit in with your system and install the programs in the appropriate places. If you want the HTML version of this documentation and an HTML test document in addition, run make all instead. 2.5. Testing your installation. Installed from the distribution are HTML documents called javacgitest.html, javaemailtest.html and javahtmltest.html. If you installed all in the previous section, it will be in the directory you specified for WEBDIR in the Makefile. If you didn't, you can run make test to build them from javacgitest.html-dist, javaemailtest.html-dist and javahtmltest.html-dist. When you are sure that your installation is working correctly, you may wish to remove CGI_Test.class, Email_Test.class and HTML_Test.class from your JAVACGI directory and javacgitest.html, javaemailtest.html and javahtmltest.html from your WEBDIR directory as they show the user information that is normally only available to the server. 3. Setting Up Your Server to Run Java CGI Programs (The Short Form) o Get the Java CGI package from ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. (The version number may have changed.) o Unpack the distribution with this command: gzip -dc java_cgi-0.5.tgz | tar -xvf - (If the version number has changed, use the instructions from within that distribution from this point on.) o Edit the Makefile you will find in the newly created directory java_cgi-0.5 as appropriate to your system. o As root, run make install. This will compile the Java programs, apply your system-specific information and install the various files. If you want the HTML version of this documentation and an HTML test document, run make all instead. o You should be ready to go. 4. Executing a Java CGI Program 4.1. Obstacles to Running Java Programs Under the CGI Model There are two main problems in running a Java program from a web server: 4.1.1. You can't run Java programs like ordinary executables. You need to run the Java run-time interpreter and provide the initial class (program to run) on the command-line. With an HTML form, there is no provision for sending a command-line to the web server. 4.1.2. Java does not have general access to the environment. Every environment variable that will be needed by the Java program must be explicitly passed in. There is no method similar to the C getenv() function. 4.2. Overcoming Problems in Running Java CGI Programs To deal with these obstacles, I wrote a shell CGI program that provides the information needed by the Java interpreter. 4.2.1. The java.cgi script. This shell script manages the interaction between the HTTP daemon and the Java CGI program that you wish to use. It extracts the name of the program that you want to run from the server-provided data. It collects all of the environment data into a temporary file. Then, it runs the Java run-time interpreter with the name of the file of environment information and the program name added to the command- line. The java.cgi script was configured and installed in ``Decide On Your Local Path Policies''. 4.2.2. Invoking java.cgi from an HTML form. My forms that use Java CGI programs specify a form action as follows: