tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <>
Subject Re: How can I change the servlet path?
Date Wed, 01 Mar 2000 16:04:43 GMT
Arion wrote:

> Hi!
> I have read the specification, but I am still confused about some of the
> points:
> Is the reason for the servlet URL be <CONTEXT>/servlet/ because servlet is its
> resource name and we are going to get this resource under this context? Is this
> necessary meaning that we have no way to change the name?

Technically, the context-relative URI "/servlet" is mapped to a special servlet
inside Tomcat called the "invoker" servlet.  The invoker looks at the rest of the
request URI (specifically, the getPathInfo() part) and assumes that this is the
class name of a servlet class to be looked up on the class path (which includes
/WEB-INF/classes and /WEB-INF/lib/*.jar) and executed.  In this way, you can
execute servlets that have not been listed in the web.xml file explicitly.

Tomcat lets you turn on and off the invoker servlet (some people won't want it for
security reasons), but you cannot change the mapping to "/servlet" without
changing the Tomcat source code.  The only other way to reference a servlet is via
a <servlet-mapping> (either to a path or to a filename extension).

Servlets you map with <servlet-mapping> settings have two interesting features:
* You can specificy initialization parameters for them
  in the web.xml file.
* You can use relative paths, even for your servlets,
  so that you can deploy your app on a completely
  different context path, and change NOTHING
  in your application.

An example of the latter case -- let's say you have a JSP page at the
context-relative path "editCustomer.jsp" which submits a form to a servlet mapped
to the context-relative path "saveCustomer".  Using relative paths, you can do

    <form method="post" action="saveCustomer">

in your JSP page and the "saveCustomer" relative URI will be resolved correctly,
no matter what your context path is.

> If I want to use different name, must I specific the name for each servlet
> using servlet-mapping?

Yes.  It's also possible to create multiple mappings for the same servlet, if you
want to.

> Thanks
> Arion


View raw message