问题
I'm using version 2.4 of Servlet
and I need to get the ContextPath
through the init()
method which is called on server start, so I don't have any Request object that could call getContextPath()
and because the Servlet version I do not have getContextPath()
method in the ServletContext
either.
Is there a way to get this ContextPath()
somehow ?
回答1:
One web application can be published at several different context paths, so the context path (singular) is only meaningful in the context of a particular request. Servlet 2.5 added getContextPath()
to ServletContext
, specified to return the "primary" context path for this web application, but there's no container-independent way to access this information in earlier spec versions.
There may be tricks that work for certain containers, for example on Tomcat the ServletContext.getResource()
method returns URLs with a custom scheme, of the form jndi://hostname/context/...
. Thus you may be able to use
ctx.getResource("/").getPath()
to get the context path on Tomcat (or possibly getResource("/WEB-INF/web.xml")
and trim off the tail, as getResource()
is specified to return null
if you ask it for a file that does not exist). You will have to experiment with different containers to find similar tricks that work on those.
回答2:
It seems to be only possible form servlet 2.5 as explained in this post: ServletContext getContextPath()
回答3:
You are right in Servlet 2.4 the object ServeltContext does not have the method getContextPath.
I can suggest two options:
Set the context path as parameter of the servlet:
<servlet
><servlet-name>initServlet</servlet-name> <servlet-class>net.cirrus-it.InitServlet`</servlet-class> <init-param> <param-name>contextPath</param-name> <param-value>/myApp</param-value> </init-param>
</servlet
>Try to determine the context path from the method getRealPath()
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)
According to the documentation:
Returns a String containing the real path for a given virtual path. For example, the path "/index.html" returns the absolute file path on the server's filesystem would be served by a request for "http://host/contextPath/index.html", where contextPath is the context path of this ServletContext.
回答4:
Try this code:
class demo extends HttpServlet {
public void init(ServletConfig config) {
String path = config.getServletContext().getRealPath("/");
}
}
It should work
来源:https://stackoverflow.com/questions/13879869/how-to-get-contextpath-in-init-method-of-servlet-version-2-4