Initially, I found the TomCat so finicky about its war files 
that it made Morris look like a rat.

We set up the appropriate directory as indicated below
and then used jar to create the war file.  The problem resolved when
one went into the directory and did the jar.

That is instead of doing 
jar -cvf warname.war dirname

one should do

cd dirname
jar -cvf ../warname.war dirname

We now have Tomcat purring with the following system consisting of two
servlets:NewCourse and updatePrerequisites.  These two servlets are both in the 
package
RegistrationSystem.  Thus, one needs to write RegistrationSystem.NewCourse
or RegistrationSystem.Update
And the NewCourse.class and UpdatePrerequisites.class must be in
WEB-INF/classes/RegistrationSystem

That is, if one has a servlet SSS.java in package PPP
one must put the classes in 
dirname/WEB-INF/classes/PPP/SSS

One refers to the servlet as PPP.SSS

The servlet mapping says
<servlet>
  <servlet-name>nnn</servlet-name>
  <servlet-class>PPP.SSS</servlet-class>
</servlet

and the corresponding servlet-mapping entry is:

<servlet-mapping>
   <servlet-name>nnn</servlet-name>
   <url-pattern>/servlet/</url-pattern>
</servlet-mapping>

The Action entry on the form is:

Action="/servlet/PPP.SSS"

Of course, nnn represents an internal name for the servlet to bind
the servlet-mapping entry with the servlet information.

(What we don't know is whether one can change the url-pattern line
to use anything other than <url-pattern>/servlet</url-pattern>.  
I tried it and get problems as described in the appendix.)

Here is the web.xml file that we successfully used:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 
2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
  <display-name>Registration System</display-name>
  <description>Registration System</description>
  <servlet>
     <servlet-name>C</servlet-name>
     <servlet-class>RegistrationSystem.NewCourse</servlet-class>
  </servlet>
  <servlet>
      <servlet-name>D</servlet-name>
      <servlet-class>RegistrationSystem.UpdatePrerequisites</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>C</servlet-name>
    <url-pattern>/servlet/</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
     <servlet-name>D</servlet-name>
     <url-pattern>/servlet/</url-pattern>
  </servlet-mapping>
</web-app>

Here is the Form that invokes the servlet

<Form Method=GET Action="servlet/RegistrationSystem.NewCourse">
<P>Course Name </P><INPUT TYPE=TEXT NAME="coursename">
<P>Course Number </P><INPUT TYPE=TEXT NAME="number">
<P><INPUT type=submit>
</FORM>

This posting is basically to help any "newbies" get started preparing their
own war files.   However, any insight into why TomCat likes its url-pattern
to be /servlet would be greatly appreciated and shared with the class I
am teaching.

These runs all occurred in Apache Tomcat/5.0.30 running on LINUX.

Most helpful was Professor Mike Litman of our University (WIU)
Also, helpful was the "Configuring and Using Apache Tomcat: A
Tutorial on Installing and Using Jakarta Tomcat 5.5 for Servlet and
JSP Development" on the www.coreservlets.com/Apache-Tomcat-Tutorial
(This helped me to understand that I needed RegistrationSystem.NewStudent
and not RegistrationSystem/NewStudent

I also read Chapter Six of Professional Apache Tomcat Five (by
Vivek Chopra, Amit Bakore, Jon Eaves, Ben Galbraith, Sing Li, Chanoch Wiggers).
This chapter includes a discussion of the servlet and servlet-mapping
tags in the web.xml file but I did not find an answer there. 
I also searched Tomcat, the Definitive Guide by Jason Brittain and 
Ian F. Darwin but did not find anything helpful there.
Of course, I also tried google using the appropriate keywords.

Dr. Laurence Leff  Western Illinois University, Macomb IL 61455 ||(309) 298-1315
Stipes 447 Assoc. Prof. of Computer Sci. Pager: 309-367-0787 FAX: 309-298-2302 
Secretary: eContracts Technical Committee OASIS Legal XML Member Section

                  -- Appendix with Problem Files --
I set up a war file containing an HTML file to invoke a servlet, c.html
and the class file, servlet6 for a servlet.
The c.html file is:

<TITLE>Testing Servlet Six</title>
<BODY>
<P>Testing Servlet Six </P>
<FORM METHOD=GET ACTION="servlet/servlet6">
Please enter a number here: <INPUT TYPE=TEXT NAME="number">
<INPUT TYPE=SUBMIT>
</FORM>

When, we enter URL of
http://toolman.wiu.edu:2345/servlet
(our machine is toolman.wiu.edu and I set up tomcat to listen on part 2345)

I got a directory listing containing "servlet"
This contained c.html. The URL corresponding to this is:
http://toolman.wiu.edu:2345/servlet/servlet/c.html
In other words, an extra directory name got inserted in the path.

When I try the c.html file and click the button,
the HTML error message indicates that it is looking for
/servlet/servlet/servlet/servlet6
At the top of the mozilla screen, the URL indicates
http://toolman.wiu.edu:2345/servlet/servlet/servlet/servlet6?number=44

The directory that we jarred is called servlet.

The \fBweb.xml\fR file is:

<web-app>
 <display-name>servlet6</display-name>
 <description>no description</description>
 <servlet>
  <servlet-name>servlet6</servlet-name>
  <display-name>servlet6</display-name>
  <description>no description</description>
  <servlet-class>servlet6</servlet-class>
 </servlet>
</web-app> 

This is in /home/b_10/servlet/WEB-INF

Here is the output of jar -tvf servlet.war

     0 Thu Sep 29 16:19:16 CDT 2005 META-INF/
    71 Thu Sep 29 16:19:16 CDT 2005 META-INF/MANIFEST.MF
     0 Thu Sep 29 15:42:30 CDT 2005 servlet/
   202 Thu Sep 29 15:37:54 CDT 2005 servlet/c.html
     0 Thu Sep 29 15:52:54 CDT 2005 servlet/WEB-INF/
   292 Thu Sep 29 15:52:20 CDT 2005 servlet/WEB-INF/web.xml
     0 Thu Sep 29 16:11:08 CDT 2005 servlet/WEB-INF/classes/
  1954 Thu Sep 29 16:11:28 CDT 2005 servlet/WEB-INF/classes/servlet6.class

We experienced this problem in other student accounts so this is one
report of the symptoms.

Here is a different web.xml file where we experienced these symptoms:

<web-app>
<display-name>Servlet</display-name>
<description> We need to add up numbers </description>
<servlet>
<servlet-name>Lab</servlet-name>
<servlet-class>Lab</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Lab</servlet-name>
<url-pattern>/servlet/Lab</url-pattern>
</servlet-mapping>
</web-app>

And here is another set that created problems:

Got Message /REgistrationSystemTest/X/RegistrationSystem.NewCourse
The Requested resourse/RegistrationSystemTest/X/RegistrationSystem.Newcourse is 
not available:


<!DOCTYPE web-app PUBLIC "-//Sjun Microsystems, Inc.//DTD Web Application 
2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
  <display-name>Registration System</display-name>
  <description>Registration System</description>
  <servlet>
     <servlet-name>C</servlet-name>
     <servlet-class>RegistrationSystem.NewCourse</servlet-class>
  </servlet>
  <servlet>
      <servlet-name>D</servlet-name>
      <servlet-class>RegistrationSystem.UpdatePrerequisites</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>C</servlet-name>
    <url-pattern>/X/</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
     <servlet-name>D</servlet-name>
     <url-pattern>/X/</url-pattern>
  </servlet-mapping>
</web-app>


<P>
<Form Method=GET Action="X/RegistrationSystem.NewCourse">
<P>Course Name </P><INPUT TYPE=TEXT NAME="coursename">
<P>Course Number </P><INPUT TYPE=TEXT NAME="number">
<P><INPUT type=submit>
</FORM>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to