On 10/1/2012 8:38 AM, Aggarwal, Ajay wrote:
Is the configured hostname available in ServletContext? I see it in
debugger, but I don't see any method to access it from ServletContext
class. I am using virtual hosts and need this value inside my
ServletContextListener ::contextInitialized() call back.

Thanks.

-Ajay

I've not found a convenient way to manage this. Getting the host name when you are using multiple Host elements in your server.xml appears to return the host you're running on (and not the Host element name or alias).

The easiest way I've found to do this is as follows.

1. Create a context.xml.default

In each CATALINA_BASE/conf/[engine]/[hostname] create an XML file called context.xml.default. [engine] is usually Catalina. This default context gets added to all web applications in that [hostname].

2. Add a JNDI environment resource to the context.xml.default

In each context.xml.default file, add a resource something like the following:

<Context>
    <Environment name="hostname" value="your-hostname-goes-here"
                 type="java.lang.String" override="false"/>
</Context>

3. In your servlet context listener, read the information

Something like this - and then do with it what you want.

// lots of imports omitted

ServletContext sc = sce.getServletContext();
try {
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    String hostname = (String) envCtx.lookup("hostname");
    if (hostname != null) {
        sc.setAttribute("hostname", hostname); // or anything else
    }
} catch (NamingException ex) {
    // do something nice about logging here
}

See the following documentation for Tomcat 6 (which is where I've tried this).

http://tomcat.us.apache.org/tomcat-6.0-doc/jndi-resources-howto.html
http://tomcat.us.apache.org/tomcat-6.0-doc/config/context.html

I suspect it's the same in Tomcat 7. Read the appropriate documentation to find out.

The nice thing about using JNDI is that it's server-agnostic. If you end up trying to fish out the Host name or Alias element from Tomcat's internal code, then you have two problems.

1. It's Tomcat-specific

What happens when your code is run on another server?

2. Tomcat devs can change the internal architecture

Although I don't imagine that this part of the code will change much (haven't looked at SVN, and I'm not a developer), this type of tight coupling doesn't seem to be prudent.

. . . . just my two cents
/mde/

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

Reply via email to