I have a web application running under Tomcat 5.0, and I need to write
some output to a file.
This app doesn't have its servlet context hardcoded in anywhere, so I
can deploy it with any name and not worry about missing some random bit
of code anywhere, and I often deploy it with different names so the
customers can compare 2 versions side by side.
My problem is that I need to output to a log file within the
application, and I'd like the logfile name to be the context name, so
that I don't have to worry about 2 separate deployments inadvertently
writing to the same file.
I can get the context path from the first request that comes in, but
until that point, I don't seem to be able to retrieve it from either
the ServletContext or the ServletConfig...
Am I missing something?
I'm running in Tomcat, so I can hack it using some Tomcat-specific
code, but I'd rather leave it as portable as possible. Anyone have any
ideas?
Cheers in advance
--
Stuart Wood
Stuart Wood - 22 May 2006 11:40 GMT
Much as I hate to reply to my own post, I've just found the answer -
for any who are interested, there's no facility for getting the context
path from the servlet context at the moment. It is being introduced in
the Servlet API 2.5 spec - see
http://www.jcp.org/aboutJava/communityprocess/maintenance/jsr154/servlet-2.5_MR2.html
for a bit more detail.
Plan B, here we come.
Cheers
--
Stuart Wood
jmcgill - 23 May 2006 02:09 GMT
> I'm running in Tomcat, so I can hack it using some Tomcat-specific
> code, but I'd rather leave it as portable as possible. Anyone have any
> ideas?
To do what you want to do, you need a ContextListener, and you need to
declare it in web.xml. It's quite standard:
javax.servlet.ServletContextListener
This object is instantiated when your context loads your app, thus
getting you around the chicken-egg problem of needing to run your webapp
before being about to execute code based on its context.
James
Stuart Wood - 06 Jun 2006 07:38 GMT
> > I'm running in Tomcat, so I can hack it using some Tomcat-specific
> > code, but I'd rather leave it as portable as possible. Anyone have any
[quoted text clipped - 9 lines]
>
> James
Thanks, James.
I'd dismissed this as unsolvable at the current version and moved on,
hence the late reply, but this doesn't help me either, I'm afraid. The
problem is not that I can't get the context, but more that I can't get
the context /path/ from the context.
The way I've solved it is to get the 'real path' to "/" and take the
last part of it as the context path. It's a bludgeon, and it may be
affected by other servlet containers, or upgrades to Tomcat, but it's
the best I can do until ServletContext.getContextPath() is implemented.
Cheers
--
Stuart Wood