----- Original Message ----- From: "Craig R. McClanahan" <[EMAIL PROTECTED]> To: "Tomcat Users List" <[EMAIL PROTECTED]> Sent: Saturday, May 11, 2002 6:15 PM Subject: Re: servlet-mapping with *.suffix problem
> > > On Sat, 11 May 2002, Luuk de Vries wrote: > > > Date: Sat, 11 May 2002 17:58:41 +0200 > > From: Luuk de Vries <[EMAIL PROTECTED]> > > Reply-To: Tomcat Users List <[EMAIL PROTECTED]> > > To: [EMAIL PROTECTED] > > Subject: servlet-mapping with *.suffix problem > > > > Hi, > > I have a working application using RedHat > > Linux6.2+jdk.1.3+Apache+mod_jk+tomcat3 which I migrated to the most recent > > RedHat Linux7.2+jdk1.4+Apache+mod_webapp+Tomcat4.0.3. > > After the usual minor problems with migrations, the application worked fine > > again. > > With the exception of the following detail: > > > > In web.xml I do a servlet-mapping with: > > <servlet-mapping> > > <servlet-name>Bestel</servlet-name> > > <url-pattern>/servlet/bestel</url-pattern> > > </servlet-mapping> > > > > And with: > > <servlet-mapping> > > <servlet-name>Bestel</servlet-name> > > <url-pattern>*.slk</url-pattern> > > </servlet-mapping> > > > > The one with *.slk is not working. I get: "Apache Tomcat/4.0.3 - HTTP Status > > 404 - /raddertc4/servlet/bestel/statistiek.slk". > > And in the log it says: java.lang.ClassNotFoundException: bestel > > > > When I modify the last mapping to: > > <servlet-mapping> > > <servlet-name>Bestel</servlet-name> > > <url-pattern>/servlet/bestel/statistiek.slk</url-pattern> > > </servlet-mapping> > > > > The results are as they should be. > > > > As nothing can be found upon this problem in Google/tomcat-user-archive and > > faq, I submit my problem to you. > > > > Thanks in advance for any suggestion, > > > > You are running into a subtle but important rule in how servlet mappings > work -- there is a priority order that they are checked in: > * Exact match (like your last one) > * Path match (/foo/bar/*) > * Extension match (*.foo) > * Default servlet > > Tomcat provides a default mapping for "/servlet/*" to trigger the invoker > servlet, and assumes that the first path segment after the "/servlet/" > part is the name or classname of your servlet. Because path maps are > checked second, this one is matched before the *.slk mapping. Thus, it > looks for a servlet named "bestel" and does not find it. > > If you try a ".slk" path that does *not* start with "/servlet/", you'll > find that it works as you expect. Alternatively, you can comment out the > /servlet/* mapping (in $CATALINA_HOME/conf/web.xml) if you don't want the > invoker -- but this is global to all your webapps. > > > Luuk de Vries > > Craig > Hi, After carefull interpretation of the above priority order, I implemented the servlet-mapping: <servlet-mapping> <servlet-name>Bestel</servlet-name> <url-pattern>/servlet/bestel/*</url-pattern> </servlet-mapping> This works nice and I don't have to modify the conf/web.xml. Thank you for the explanation, Luuk de Vries -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
