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-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org