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

Reply via email to