
Servlets and Jigsaw
Jigsaw is compatible with the Servlet Specification version 2.0.
What are servlets ?
Servlets are server-side extensions programmed against the Servlet
API. This interface is philosophically equivalent to the old CGI
interface, but is both more powerful and extremely more efficient. More
information is available at jeeves.javasoft.com.
NOTE: As of 2.0beta2, Jisgaw is compatible with
the JSDK2.0 including session tracking (using cookies or URL rewriting).
How do I install a servlet ?
IMPORTANT: Before setting up servlets in Jigsaw, you
must get the Servlet Development Kit available at Javasoft
and update your CLASSPATH to use those classes (add jsdk.jar
in your CLASSPATH).
Automatic installation
Since 2.0beta3, by default you just have to put the servlet class file
in the <instdir>/Jigsaw/Jigsaw/WWW/servlets/ directory that
is already configured for servlets. For example, if you put SessionServlet.class
in <instdir>/Jigsaw/Jigsaw/WWW/servlets/, this servlet will
be reachable at http://your-server-host/servlets/SessionServlet.
Note: with some zip tools, the servlets directory
may have been removed (because it is empty), please check it and (if it's
necessary) create it manually before accessing the
http://your-server-host/servlets/
URL.
Manual installation
First of all, you have to choose where you want to place your servlets
in your file system; this will usually be a single directory, typically
something like servlets under your server's WWW directory.
Once you have created the file system directory, create a org.w3c.jigsaw.resources.DirectoryResource
with a org.w3c.jigsaw.servlet.ServletDirectoryFrame
frame to export it (if the directory has already been indexed, you have
to remove the existing org.w3c.jigsaw.frames.HTTPFrame).
That frame will act as a context for all the servlets under it (Jigsaw
can handle multiple servlet contexts within a single server).
Then, you can setup your servlet manually, or use the servlet indexer
(servlet-indexer). The servlet indexer will automaticaly create
the ServletWrapper and configure it. If you decide to use it, set servlet-indexer
as the indexer of the DirectoryResource servlets.
But you still can do it manually. Put your servlet into the servlets
directory. Each servlet is managed by a org.w3c.jigsaw.servlet.ServletWrapper,
to add a servlet you just have to create a ServletWrapper and in the servlet-class
field put the class name of the servlet witch must be in the directory
relative to the DirectoryResource or in the CLASSPATH.
Example :
You want to install the DateServlet in the WWW/servlets directory:
-
Create the directory servlets under WWW
-
Start the JigAdmin program and unfold all
the nodes down to the space node.
-
Select the space node, and activate the Resources editor
helper. Enter the DirectoryResource identifier (ie servlets) and
the class of the resource (ie org.w3c.jigsaw.resources.DirectoryResource).
This should be done automatically by the indexer.
-
Add a org.w3c.jigsaw.servlet.ServletDirectoryFrame to your new DirectoryResource
(and eventually remove the old HTTPFrame).

-
Put the servlet class (ie DateServlet.class) in WWW/servlets (or
in the CLASSPATH).
-
Create a ServletWrapper in the DirectoryResource and call it DateServlet
for example.

-
Set the servlet-class field of the ServletWrapper to DateServlet

-
Commit your changes
Now DateServlet is reachable at http://your-server-host/servlets/DateServlet.
How can I setup servlet parameters?
Some servlets needs parameters at initializing time, so we may need to
specify those parameters. Here we describe how to setup the resultsDir
parameter of the Survey servlet. This servlet needs a directory to write
some output, this is the resultsDir.In this example we take /tmp
as the resultsDir.
-
Select the servlet wrapper of the SurveyServlet and click on the Edit button
(Servlet Parameters).

-
Enter the parameter name in the Key field and the parameter value
in the Value field.

-
Click on add (or hit enter). Then click on Ok.
-
Commit your changes and save your configuration.
How do I configure a servlet indexer? (Since
2.0 beta3).
Now you can setup a special indexer for servlets: org.w3c.jigsaw.servlet.ServletIndexer.
This indexer perfoms some servlet specific actions before indexing the
class file in a ServletWrapper. It verify that the class file is really
a servlet class file, then it put the filename (without the "class" extension)
as the identifier and the entire filename as the servlet class. So a class
file that is not a servlet class file will NOT be indexed by this indexer
but it could be indexed (in a FileResource for example) by one of its super
indexer.
See the Indexer Configuration documentation
for more details on indexers.
Just add a ServletWrapper called "class" in the extensions node of your
ServletIndexer, modify the field you want in the ServletDirectoryFrame
(ie: Title, Icon), commit and save your modifications. Now you just have
to set your indexer as the indexer of your servlet directory and your servlets
will automaticaly be indexed.
How can I setup the servlets properties?
In the last version of Jigsaw, you have many properties to configure.
-
Servlet log file : You can specify the log file to use for servlets.
The default log file is <instdir>/Jigsaw/Jigsaw/logs/servlets.
-
Sessions max idle time : Amount of time a session is allowed to
go unused before it is invalidated. Value is specified in milliseconds.
-
Max sessions : Max number of sessions in memory, if the number of
sessions exceeds this number the sessions with the bigest idle time will
be invalidated. This is checked each time a session is added.
-
Sessions check delay : Time interval when Jigsaw checks for
sessions that have gone unused long enough to be invalidated. Value is
an integer, specifying the interval in milliseconds.
-
Session cookie name : The name of the cookie carrying the session
ID.
-
Session cookie path : The path of the cookie carrying the session
ID. (optionnal)
-
Session cookie domain : The domain field of the cookie carrying
the session ID. (optionnal)
-
Session cookie comment : The comment field of the cookie carrying
the session ID. (optionnal)
-
Session cookie maxage : The value of the maximum age of the cookie
carrying the session ID. Default value is 86400 seconds (24h).
-
Session cookie secure : The secure field of the cookie carrying
the session ID.
How does Jigsaw load local servlet classes
?
Jigsaw use a local ClassLoader to load servlet classes from the
servlets Directory. If a servlet class is modified when Jigsaw is
running, the ClassLoader load automatically the new class. It's a very
useful feature for servlets developers.
In the two first versions of Jigsaw2.0 (beta1 and beta2) this
feature can be disabled because in some case the auto-reload feature
could create some problems. In those versions there is a auto-reload
flag in ServletWrapper.
Now this problem has been resolved and we don't need the auto-reload
flag anymore. But the auto-reload feature works only for the servlet
classes located in the servlet directory. Servlets in the CLASSPATH
are loaded by the system ClassLoader and their modified classes are not
reloaded while the server is running.

Note: For very good reasons, when
a servlet class is reloaded all sessions are invalidated.
How can I load remote servlets ?
You can use remote servlets by using a RemoteServletWrapper instead of
the ServletWrapper.
Example : Add the remote servlet http://www.servlet.com/RemoteServlet.class
to jigsaw.
-
Create the RemoteServletWrapper in the ServletDirectory.
-
Set its "servlet-base" field to http://www.servlet.com/
-
Set its "servlet-class" field to "RemoteServlet" (without .class)
-
Commit changes.
Note : the url http://www.servlet.com/RemoteServlet.class
must be a Java compliant class file.
I need to compile Jigsaw with servlets, how
should I do?
NOTE: The default version of Jigsaw has been compiled
with servlet support, to use it dowload the JSDK available at Javasoft
and update your CLASSPATH to use those classes.
Be sure to have a recent version of the servlet classes. Modify the
Makefile in src/classes/org/w3c/jigsaw and add the servlet package at the
end of the PACKAGES list, like this:
tutorials \
zip \
servlet
Then, uncomment the line 146 of org/w3c/jigsaw/ssi/commands/DefaultCommandRegistry.java
like this:
new org.w3c.jigsaw.ssi.servlets.ServletCommand()
and adds the servlets package in the Makefile of the org.w3c.jigsaw.ssi
package, like this:
PACKAGES = \
commands\
jdbc \
servlets
Now, you can recompile jigsaw.
Jigsaw Team
$Id: servlets.html,v 1.53 1998/11/19 09:29:53 bmahe Exp $