tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier ...@ice-sa.com>
Subject Re: Tomcat mapping of URLs -> servlets
Date Wed, 03 Dec 2008 14:58:54 GMT
Markus Schönhaber wrote:
> André Warnier:
> 
>> It appears anyway that my previous attempted logic was quite wrong.
>> But I still find the spec quite confusing.  There is some kind of 
>> mixture between "servlet" and "web application" that is not very clear, 
>> at least to me.
>>
>> As I understand it now, there are 2 steps :
>> 1) the appropriate webapp (not servlet) is located using the path, not 
>> the <url-pattern>
>> 2) the appropriate servlet *within* the webapp is selected based on the 
>> <url-pattern>
> 
> Yes.
> Example: given the URL http://<servername>/foo/bar/baz/, the Container
> looks at /foo/bar/baz/ to find out which webapp should handle the request.
> - If there's a webapp with the context path /foo/bar/baz, that's the one
> to handle the request and the path for the servlet mapping is "/".
> - If there's a webapp with the context path /foo/bar, that's the one to
> handle the request and the path for the servlet mapping is "/baz/".
> - If there's a webapp with the context path /foo, that's the one to
> handle the request and the path for the servlet mapping is "/bar/baz/".
> - If neither of the above is true, the webapp with the context path ""
> (the default webapp, ROOT in Tomcat) is the one to handle the request
> and the path for the servlet mapping is "/foo/bar/baz/".
> 
>> and
>> 3) .. each webapp has a "default servlet", to which things get mapped 
>> when no other <url-pattern> of this webapp matches
> 
> Essentially, yes. You could comment the Default Servlet and it's mapping
> in ${catalina.base}/conf/web.xml, though.
> 
>> 4) the ROOT webapp matches the path "/", not the <url-pattern> /
> 
> The default webapp (named ROOT in Tomcat) matches the path "". Apart
> from that, what you said in 1) is true for all webapps, including the
> default one.
> 
>> Is the above correct ?
>>
>> The confusing part for me may also be due to my misunderstanding.
>> I view this as follows :
>> - a "web application" is "the whole thing" that one finds below 
>> (tomcat_dir)/webapps/xyz for example (including its static pages, 
>> WEB-INF/web.xml, its servlets etc..)
>> - this webapp can consist of one or more servlets, each with its set of 
>> <url-pattern>'s that it handles
>>
>> Not so ?
> 
> No, correct.
> 
>> And if so, then I find the examples in table "SRV.11.2.2 Example Mapping 
>> Set" quite confusing, since paths like
>> /foo
>> /bar
>> /catalog
>> would tend to imply different webapps, rather than different servlets 
>> inside of one webapp, no ?
> 
> No. These examples talk about the mappings *inside* a webapp, i. e. what
> can be used as a value for <url-mapping>.
> In other words: the part of the request URL which is used to determine
> the webapp to handle the request is already removed.
> 
> Take this trivial JSP and deploy it to different contexts/webapps. Maybe
> the output will make things clearer:
> 
> <html>
> <body>
> <table>
> <tr><td>RequestURL</td><td><%= request.getRequestURL() %></td></tr>
> <tr><td>RequestURI</td><td><%= request.getRequestURI() %></td></tr>
> <tr><td>ContextPath</td><td><%= request.getContextPath() %></td></tr>
> <tr><td>ServletPath</td><td><%= request.getServletPath() %></td></tr>
> </table>
> </body>
> </html>
> 
Thanks.

Now still one more question, based upon what you wrote above :
 > - If there's a webapp with the context path /foo/bar/baz, that's the one
 > to handle the request and the path for the servlet mapping is "/".

Not that I would necessarily do this, but assuming that I create the 
following file structure :

(tomcat_dir)/webapps
        /foo
           various.jsp
           WEB-INF
              web.xml
           /bar
              various.jsp
              WEB-INF
                 web.xml
              /baz
                 various.jsp

and I start Tomcat.

Then I guess I have (at least) 2 webapps : a "/foo" webapp, and a 
"/foo/bar" webapp.

Now a request comes in with the url "/foo/bar/baz/various.jsp"

How does Tomcat determine that /foo/bar/baz is not itself a webapp, but 
merely a sub-dir of webapp "/foo/bar" ?
Or does it complain somewhere along the way ?

That may not be the right way to ask the question, so to put this 
another way : when Tomcat starts, does it recurse into each webapp dir 
to see if there is (for instance) another WEB-INF subdir hidden deeper 
there ?  Or does this information come from somewhere else ?





---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message