|
Ok,
perhaps my final email on this (sorry for those of you who don't care about WAR
files and such). I did some more testing. I had been using
JBoss/Jetty before, with an exploded WAR dir. I switched to Tomcat and
found that it wouldn't pick up the properties file in the WAR root (which is
what James would have expected) So I put it in WEB-INF/classes, created a
WAR file and that worked on Tomcat. So then I took that same WAR file
back to JBoss, and now it works (but WEB-INF/lib does seem to). I don't
know what was different from yesterday other than I am now using a WAR file
instead of an exploded WAR dir. Maybe I wasn't clearing things thoroughly
enough between tests or something...yeah, an exploded WAR seems to work with
WEB-INF/classes today, so I guess I'm good to go.
Thanks
to y'all for your help, I really appreciate it.
Yes, the ResourceBundle class CAN use an absolute
path, but it is not in this case (at least by the code shown it isn't).
Here's a WAR file you can deploy in your environment. If it doesn't work,
then you've got something wrong, as it works in the reference implementation
(Tomcat 4.1.24). Basically, I have one index.jsp file that just loads up a
ResourceBundle to find one string called "name" with the value "James
Carman." It merely prints "Hello, James Carman!" when it works
properly. The properties file (MessageResources.properties) is located in
WEB-INF/classes and the ResourceBundle class picks it up just fine. If you
try moving the MessageResources.properties file to the document root, it
fails!
----- Original Message -----
Sent: Thursday, June 26, 2003 8:35
AM
Subject: Re: [cinjug-users] properties
file in WAR
ResourceBundle can use an absolute path, e.g, /usr/local, where you can
put your property files. If no defined, it uses where your class file lives.
In your case, I believe it gets the file from your jsp file directory, which
may be the doc root. James Carman <james@xxxxxxxxxxxxxxxxxxxx>
wrote:
Ok,
first of all you should NOT do this in JSP code. If you really want this
sort of support, either use Struts or JSTL. Anyway, it looks like
it SHOULD be placed in the WEB-INF/classes directory based upon this
code. The ResourceBundle class will use the ClassLoader.getResource()
approach. I'd have to see your war file setup to figure out why it's not
working.
----- Original Message ----- From: "Herbers, Joe"
To: "James Carman"
Sent: Wednesday, June 25, 2003 4:35
PM Subject: RE: [cinjug-users] properties file in WAR
Well,
this JSP code calls the static method ResourceBundle.getBundle Here's the
code (which I didn't write). Thanks for the help.
userLang =
request.getParameter ("txtLanguage"); userCountry = request.getParameter
("txtCountry"); if (userLang != null && userCountry !=
null) { userLocale = new Locale (userLang,
userCountry); } //default locale is
US else { userLocale=Locale.US; } session.putValue("myLocale",userLocale); bundle
= ResourceBundle.getBundle("Message",userLocale); for (Enumeration e =
bundle.getKeys();e.hasMoreElements();) { String key =
(String)e.nextElement(); String s =
bundle.getString(key); session.putValue(key,s); } String
REQATTR_LOGINERROR
= (String)session.getValue("launch.loginerror");
-----Original
Message----- From: James Carman
[mailto:james@xxxxxxxxxxxxxxxxxxxx] Sent: Wednesday, June 25, 2003 4:20
PM To: Herbers, Joe; Timothy Dennison; CinJUG (E-mail) Subject: Re:
[cinjug-users] properties file in WAR
Well, it depends on how you're
loading the file. Are you using the ServletContext.getResource() or
ClassLoader.getResource() method? If you use the
ServletContext.getResource() method, the searching is done rooted at the
root of your webapp. But, if you use the classloader, it will be
rooted at WEB-INF/classes (or the root of one of your jars in
WEB-INF/lib).
----- Original Message ----- From: "Herbers, Joe"
To: "James Carman" ;
"Timothy Dennison" ; "CinJUG (E-mail)"
Sent: Wednesday, June 25, 2003 3:23 PM Subject: RE:
[cinjug-users] properties file in WAR
Sorry I'm slow following up
to these helpful responses to my question. I just got around to testing
this out. It only worked when I put the file (messages.properties) in the
WAR's root dir. It couldn't locate it if I put it in WEB-INF/classes or
WEB-INF/lib. This was using an exploded WAR in JBoss' deploy
dir.
So I can just put it in the root when I make a WAR file. But I'm
curious how this is supposed to work. James mentioned reading the docs -
any recommendations for docs on how WAR files can be put
together?
Thanks, Joe
-----Original Message----- From:
James Carman [mailto:james@xxxxxxxxxxxxxxxxxxxx] Sent: Saturday, June 14,
2003 12:52 PM To: Timothy Dennison; CinJUG (E-mail) Subject: Re:
[cinjug-users] properties file in WAR
You can put it in the
WEB-INF/classes directory as Tim has suggested, or it can be in the
top-level of any of the jars in the WEB-INF/lib directory and it will
also be found. If you're using Tomcat. Try doing a System.out.println()
on one of your classes' ClassLoader object. It will give you a rundown of
all of the places where it will look for resources. It's VERY helpful
when trying to figure out where things are loaded from and in what order.
The docs help too. :-) I would suggest using the WEB-INF/classes
directory, though. That's the absolute first place it
will look.
----- Original Message ----- From: "Timothy
Dennison" To: "CinJUG (E-mail)"
Sent: Saturday, June 14, 2003 6:15 AM Subject: Re:
[cinjug-users] properties file in WAR
> You should be able to
put the file in WEB-INF/classes > as this location will always be on
the classpath. > tim > > --- "Herbers, Joe"
wrote: > > I'm trying to create a WAR file to
deploy an app. > > One class references a resource file
called > > message.properties via the following code. Where
in > > the WAR should/can I put the properties file? In >
> the root? I think it needs to be in the classpath, > > so I do
I need to put a CLASSPATH statement in > > Manifest.mf or can I put
it somewhere that will > > automatically be in the classpath?
Thanks. > > > > bundle = > >
ResourceBundle.getBundle("Message",userLocale); >
>
Do you Yahoo!? SBC
Yahoo! DSL - Now only $29.95 per month!
|