Hi.
I am one of the least Tomcat and Java qualified people that regularly
lurk on this forum, so don't take my word for any of what follows.
Let's say that I am just trying to apply what I think I have learned here.
And I am eager for contradiction, because it is said that this is how
one learns.
Jonathan Mast wrote:
> I have a webapp that I would like to behave in a context (actually
> host)-specific manner. Where is the best place to initialize the
> context/host specific functionality?
>
> Let me demonstrate what I'm talking about. Lets say I have a webapp Fruit
> located in folder webapps/fruit.
> I want to define:
> apples.mysite.com
> bananas.mysite.com
> coconuts.mysite.com
> etc ...
> all of which point to webapps/fruit (these are hosts with a "/" context
> pointing to "webapps/fruit" as the docBase, to be more precise).
appBase ?
>
Do you mean all Hosts point to the *same physical* webapps/fruit, or
does each Host have its own copy in a separate directory ?
> When someone visits apples.mysite.com they see an apple, when they visit
> bananas.mysite.com they see a banana, and so on.
>
> Where in the fruit app is the best place for instance of Fruit to introspect
> itself (basically look for what host name it is defined under) and prepare
> accordingly?
>
> I've looked into using Context Parameters in the server.xml declarations
That would probably better be in a /META-INF/context.xml, no ?
(at least if these are distinct webapp/fruit)
or see here for more complete info :
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
but
> I would like to avoid this if possible b/c this functionally is more
> elegantly determined through introspection (the web-app saying "what host do
> i belong to?").
>
> Of course I could always call request.getLocalName(),
I think you want getServerName(), or you'd always get the same DNS
name/IP, no matter wich virtual Host is called..
but that would be
> inefficient as it would have to be invoked on every request.
>
> I guess what I'm looking for someplace in the context initialization process
> where i could hook into and do my stuff and have it apply to the entire
> context throughout it's lifecycle. Can't seem to find it digging around the
> javax.servlet.* javadocs.
>
I reason as follows :
- a webapp is run by a thread
- a thread is started by a Connector
- I don't think that a thread is Host-specific, in the sense that it can
run one webapp for one Host, and the next instant run another webapp for
another Host.
What I'm saying is that I am not sure that above the Request level, you
will find anything that is "Host-persistent" to keep your stuff in and
retrieve it (I mean for webapps shared by several Hosts, which is
probably a bad idea anyway).
To this eager student thus, the correct way to do what I understand you
want to do, seems to be :
- have each Host have its own appBase (webapp dir), with in each a copy
of your (identical) webapp code "Fruit".
- have your webapp (actually I guess, the first servlet) in it's init()
code, get the hostname from getServerName() and perform whatever setup
it needs to. Then save this in an attribute of the ServletContext
- which should then be available at each subsequent execution of any
servlet composing the webapp
Inspired by the Servlet Spec 2.5, section 2.3 Servlet lifecyle, 2.3.2
Initialization.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org
|