-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

John,

I think we might want to start again and work from the ground up. If
you've been working in the dark-ages with the invoker servlet and
non-packaged servlets, these things can pile up on you.

First of all, make it a point to put all your servlet classes into
packages. In fact, make it a point to put /all/ your classes into
packages. When you put a class into a package, the source (.java) file
should go into a directory that matches it, and when you compile it, the
.class file will end up in a similar directory.

For instance, if you have a class called "MyClass" in the package
"my.package" (classes are usually written in CamelCase while package
names are usually all lowercase), you should have your files laid out
like this:

src/my/package/MyClass.java

The source code to MyClass should have a package declaration like this:

package my.package;

when you compile to a directory called "build", you'll have:

build/my/package/MyClass.class

When you create your webapp, this file should go into
WEB-INF/classes/my/package/MyClass.class

Next, you'll need to map this class to one or more URLs. These URLs are
relative to what's known as the "context path" of a web application. Web
applications can be deployed either as a "root" web application (that
is, they will be accessed via a URL like http://host/servlet) or as a
non-root application with a non-blank context path (where you'll access
the webapp via a URL like http://host/context/servlet).

In web.xml, to map your servlet to "/UkJava1900", you should have (as it
appears you do):

<web-app>
  <servlet-name>UkJava1900</servlet-name>
  <servlet-class>formprocessors.UkJava1900</servlet-class>
</web-app>

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

Now, when you hit http://host/context/UkJava1900, you'll execute the
code in the formprocessors.UkJava1900 class (which came from
formprocessors/UkJava1900.java).

Note that URL patterns are case-sensitive. Your latest error message
says "The requested resource (/ukjava1900) is not available.". Note the
discrepancy between the <url-mapping> and the error message: the
capitalization is inconsistent. There's nothing that says your URL must
be /UkJava1900... you are free to use /ukjava1900 if you choose.

Now, we come to the JSP. Here is the best way to write your <form> tag:

<form
  method="post"
  action="<%= response.encode(request.getContextPath() + "/ukjava1900") %>">

Two things are happening, here:

1. request.getContextPath gets the current context path (like "/foo" if
your webapp is deployed to /foo, or "" if you are using a ROOT-deployed
context).

2. response.encode will add a jsessionid parameter to the end of the URL
if the client doesn't support HTTP cookies.

The first thing is important because it will allow you to re-deploy your
webapp under arbitrary context paths without having to re-write all your
links. The second is important if you want to support cookie-less
clients, which is always nice to do.

For recently-written webapps, I would recommend using the JSTL tag
library which has a convenient tag for doing things like this:

<form method="post" action="<c:url value="/ukjava1900" />">

The <c:url> tag knows how to do all the above stuff with less
possibility of typing errors and stuff. Always nice.

Hope that helps,
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkwtRUUACgkQ9CaO5/Lv0PDdGgCgjlRpxj6X+J+gU2/r8TRJzwoA
2F4An3hHCVfug56MHlC5y93i1UKvJgVP
=HiOG
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to