Re: Mixing Root Context webapp with other webapps

2021-07-09 Thread Christopher Schultz

Jerry,

On 7/9/21 01:58, Jerry Malcolm wrote:
I have one webapp that processes REST-style url paths and therefore 
needs to run in the ROOT context.


I'm not sure the conclusion follows from the premise, here. You can 
certainly use REST-style URL paths and not have a context at the top-level.


Is it possible to run other webapps 
in the same host with other non-root contexts?


It is, but I wouldn't recommend it. Well... I would definitely recommend 
/against/ it in some situations. Specifically, when both the root and 
other web applications both need to use cookie-based sessions. If you 
have two applications fighting over whose JSESSIONID cookie is the one 
to use for login, Bad Things can happen.


If your root context and/or none of the non-root contexts will be using 
cookie-based session-tracking, then you will probably be fine.



In other words, when resolving a URL to a web app, does it try to map
the url to the defined context strings first, and then to ROOT if
there are no matches?  Or does ROOT override everything, and all URLs
go to ROOT if it's defined?
It's the latter, otherwise it would be pretty much impossible to deploy 
anything when a ROOT context was present.


-chris

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



Re: Mixing Root Context webapp with other webapps

2021-07-09 Thread Jerry Malcolm

On 7/9/2021 2:23 AM, Olaf Kock wrote:

On 09.07.21 07:58, Jerry Malcolm wrote:

I have one webapp that processes REST-style url paths and therefore
needs to run in the ROOT context.  Is it possible to run other webapps
in the same host with other non-root contexts?   In other words, when
resolving a URL to a web app, does it try to map the url to the
defined context strings first, and then to ROOT if there are no
matches?  Or does ROOT override everything, and all URLs go to ROOT if
it's defined?


If memory serves me well and this behavior didn't change in the past
decade, then all other web applications have precedence over root. That
is, if you deploy ROOT.war and json.war (and assume the context-path to
be /json), then your root application's /json path would never be reached.

It's easy to visualize this way around, because it's an absolutely
static mapping with the size being "number of webapps", while the other
way around, ROOT could also map /* to one of its servlets and then
determine what to do it. The spec has to means to explicitly hand a
request back to the appserver and every app would rather generate 404
than check if somebody else might be there to handle it.

Olaf


Thanks for the quick response, Olaf.  That's the way I was hoping it 
worked... :-)




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



Re: Mixing Root Context webapp with other webapps

2021-07-09 Thread Mark Thomas

On 09/07/2021 08:23, Olaf Kock wrote:


On 09.07.21 07:58, Jerry Malcolm wrote:

I have one webapp that processes REST-style url paths and therefore
needs to run in the ROOT context.  Is it possible to run other webapps
in the same host with other non-root contexts?   In other words, when
resolving a URL to a web app, does it try to map the url to the
defined context strings first, and then to ROOT if there are no
matches?  Or does ROOT override everything, and all URLs go to ROOT if
it's defined?


If memory serves me well and this behavior didn't change in the past
decade, then all other web applications have precedence over root. That
is, if you deploy ROOT.war and json.war (and assume the context-path to
be /json), then your root application's /json path would never be reached.

It's easy to visualize this way around, because it's an absolutely
static mapping with the size being "number of webapps", while the other
way around, ROOT could also map /* to one of its servlets and then
determine what to do it. The spec has to means to explicitly hand a
request back to the appserver and every app would rather generate 404
than check if somebody else might be there to handle it.


To put it another way, when mapping a request to a web application Tomcat:
- normalises the request URL
- routes the request to the web application with the longest matching
  context path

The exact wording is in section 12 of the Servlet specification.

Mark

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



Re: Mixing Root Context webapp with other webapps

2021-07-09 Thread Olaf Kock


On 09.07.21 07:58, Jerry Malcolm wrote:
> I have one webapp that processes REST-style url paths and therefore
> needs to run in the ROOT context.  Is it possible to run other webapps
> in the same host with other non-root contexts?   In other words, when
> resolving a URL to a web app, does it try to map the url to the
> defined context strings first, and then to ROOT if there are no
> matches?  Or does ROOT override everything, and all URLs go to ROOT if
> it's defined?
>
If memory serves me well and this behavior didn't change in the past
decade, then all other web applications have precedence over root. That
is, if you deploy ROOT.war and json.war (and assume the context-path to
be /json), then your root application's /json path would never be reached.

It's easy to visualize this way around, because it's an absolutely
static mapping with the size being "number of webapps", while the other
way around, ROOT could also map /* to one of its servlets and then
determine what to do it. The spec has to means to explicitly hand a
request back to the appserver and every app would rather generate 404
than check if somebody else might be there to handle it.

Olaf



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



Mixing Root Context webapp with other webapps

2021-07-08 Thread Jerry Malcolm
I have one webapp that processes REST-style url paths and therefore 
needs to run in the ROOT context.  Is it possible to run other webapps 
in the same host with other non-root contexts?   In other words, when 
resolving a URL to a web app, does it try to map the url to the defined 
context strings first, and then to ROOT if there are no matches?  Or 
does ROOT override everything, and all URLs go to ROOT if it's defined?


Thanks.

Jerry


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