org.apache.catalina.servlets

Class CGIServlet.CGIRunner

Enclosing Class:
CGIServlet

protected class CGIServlet.CGIRunner
extends java.lang.Object

Encapsulates the knowledge of how to run a CGI script, given the script's desired environment and (optionally) input/output streams

Exposes a run method used to actually invoke the CGI.

The CGI environment and settings are derived from the information passed to the constuctor.

The input and output streams can be set by the setInput and setResponse methods, respectively.

Version:
$Revision: 1.22.2.2 $, $Date: 2004/11/19 14:51:17 $

Author:
Martin Dengler [root@martindengler.com]

Constructor Summary

CGIRunner(String command, Hashtable env, File wd, ArrayList params)
Creates a CGIRunner and initializes its environment, working directory, and query parameters.

Method Summary

protected String
getPostInput(ArrayList params)
Gets a string for input to a POST cgi script
protected String[]
hashToStringArray(Hashtable h)
Converts a Hashtable to a String array by converting each key/value pair in the Hashtable to a String in the form "key=value" (hashkey + "=" + hash.get(hashkey).toString())
protected boolean
isReady()
Gets ready status
protected void
run()
Executes a CGI script with the desired environment, current working directory, and input/output streams

This implements the following CGI specification recommedations:

  • Servers SHOULD provide the "query" component of the script-URI as command-line arguments to scripts if it does not contain any unencoded "=" characters and the command-line arguments can be generated in an unambiguous manner.
protected void
setInput(InputStream stdin)
Sets standard input to be passed on to the invoked cgi script
protected void
setResponse(HttpServletResponse response)
Sets HttpServletResponse object used to set headers and send output to
protected void
updateReadyStatus()
Checks & sets ready status

Constructor Details

CGIRunner

protected CGIRunner(String command,
                    Hashtable env,
                    File wd,
                    ArrayList params)
Creates a CGIRunner and initializes its environment, working directory, and query parameters.
Input/output streams (optional) are set using the setInput and setResponse methods, respectively.

Parameters:
command - string full path to command to be executed
env - Hashtable with the desired script environment
wd - File with the script's desired working directory
params - ArrayList with the script's query parameters as NameValuePairs

Method Details

getPostInput

protected String getPostInput(ArrayList params)
Gets a string for input to a POST cgi script

Parameters:
params - ArrayList of query parameters to be passed to the CGI script

Returns:
for use as input to the CGI script


hashToStringArray

protected String[] hashToStringArray(Hashtable h)
            throws NullPointerException
Converts a Hashtable to a String array by converting each key/value pair in the Hashtable to a String in the form "key=value" (hashkey + "=" + hash.get(hashkey).toString())

Parameters:
h - Hashtable to convert

Returns:
converted string array


isReady

protected boolean isReady()
Gets ready status

Returns:
false if not ready (run will throw an exception), true if ready


run

protected void run()
            throws IOException
Executes a CGI script with the desired environment, current working directory, and input/output streams

This implements the following CGI specification recommedations:

  • Servers SHOULD provide the "query" component of the script-URI as command-line arguments to scripts if it does not contain any unencoded "=" characters and the command-line arguments can be generated in an unambiguous manner.
  • Servers SHOULD set the AUTH_TYPE metavariable to the value of the "auth-scheme" token of the "Authorization" if it was supplied as part of the request header. See getCGIEnvironment method.
  • Where applicable, servers SHOULD set the current working directory to the directory in which the script is located before invoking it.
  • Server implementations SHOULD define their behavior for the following cases:
  • Allowed characters in pathInfo: This implementation does not allow ASCII NUL nor any character which cannot be URL-encoded according to internet standards;
  • Allowed characters in path segments: This implementation does not allow non-terminal NULL segments in the the path -- IOExceptions may be thrown;
  • "." and ".." path segments: This implementation does not allow "." and ".." in the the path, and such characters will result in an IOException being thrown;
  • Implementation limitations: This implementation does not impose any limitations except as documented above. This implementation may be limited by the servlet container used to house this implementation. In particular, all the primary CGI variable values are derived either directly or indirectly from the container's implementation of the Servlet API methods.

See Also:
java.lang.Runtime.exec(String command, String[] envp, File dir)


setInput

protected void setInput(InputStream stdin)
Sets standard input to be passed on to the invoked cgi script

Parameters:
stdin - InputStream to be used


setResponse

protected void setResponse(HttpServletResponse response)
Sets HttpServletResponse object used to set headers and send output to

Parameters:
response - HttpServletResponse to be used


updateReadyStatus

protected void updateReadyStatus()
Checks & sets ready status


Copyright B) 2000-2003 Apache Software Foundation. All Rights Reserved.