How can开发者_运维技巧 I get the name of the current web app in Java EE?
I'm quite comfortable with stand-alone Java, but Java EE is new to me. I'm writing some custom code to plug in to a third-party Java EE 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.
Getting the "name" ===== It's called the context path. If your code is running within the web app request context, you can get it by calling
HttpServletRequest#getContextPath()
.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:
ServletContext#getResource(String)
ServletContext#getResourceAsStream(String)
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).
- 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:
- Class#getResource(String)
- Class#getResourceAsStream(String)
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"));
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.
精彩评论