tags:

views:

145

answers:

2

How can I get the name of the current web app in J2EE?

I'm quite comfortable with stand-alone Java, but J2EE is new to me. I'm writing some custom code to plug in to a third-party J2EE reporting package. I have multiple instances deployed on the same Tomcat server, so I have something like:

C:\
+-- tomcat6
    +-- webapps
        +-- app1
        +-- app2

So when the user goes to, let's say, http://example.com/app1/viewReport, I want to be able to get "app1". (And not by parsing the URL, preferrably.)

Also, if there was a way to get the root of app1 (in this example, C:\tomcat6\webapps\app1), that would be great too.

+3  A: 

1. Getting the "name"

It's called the context path. If you code is running within the web app request context, you can get it by calling HttpServletRequest#getContextPath().

2. Accessing the physical/real resource

If you're trying to access the contents of a file/resource in your webapp, you're best of using one of:

It is also possible get the physical path on disk of a file/resource, given the path relative to the web app, using ServletContext#getRealPath(String), but it's not reliable (doesn't always work if you deploy you webapp as a WAR, for instance).

3. Accessing class path resources

Per your comment, you were trying to access a resource within the /WEB-INF/classes directory. Because WEB-INF/classes/* is where web application specific classes go, you can simply access it as if you were accessing any classpath resource in a Java SE application. Again, assuming your code runs within the context of the webapp, you can simply use the following:

In your case, you'd probably want to use the latter, and then load the Properties file via Properties#load(InputStream).

Something along the lines of:

Properties props = new Properties();
props.load(getClass().getResourceAsStream("/reportCustom.properties"));
Jack Leow
thanks for your help. what i'm trying to do is load a properties file in `webapps/myapp/WEB-INF/classes/reportCustom.properties`. is this a simpler way to do it? in the past, i got System.getProperty("myapp.root"), with a hardcoded string, which is a property from web.xml that gives the root path. But then I find that we need to support multiple instances on the same Tomcat, so I don't know what "myapp" will be called.
Jenni
In your case, you can access reportCustom.properties as if it's simply in the classpath. I'll update my answer to include this shortly.
Jack Leow
+2  A: 

what i'm trying to do is load a properties file in webapps/myapp/WEB-INF/classes/reportCustom.properties

Since the file is in the classes directory, you can load it using the ClassLoader (the usual Java mechanism for loading files on the classpath). It is probably best to use the context ClassLoader.

McDowell