我正在使用Servlet
的2.4版本,我需要通过在服务器启动时调用的ContextPath
方法获取init()
,所以我没有任何请求对象,可以调用getContextPath()
,因为Servlet版本我在getContextPath()
中也没有ServletContext
方法。
有办法以某种方式获得此ContextPath()
吗?
答案 0 :(得分:2)
一个Web应用程序可以在多个不同的上下文路径中发布,因此 上下文路径(单数)仅在特定请求的上下文中有意义。 Servlet 2.5将getContextPath()
添加到ServletContext
,指定返回此Web应用程序的“主”上下文路径,但在早期的规范版本中没有与容器无关的方式来访问此信息。
可能存在适用于某些容器的技巧,例如在Tomcat上,ServletContext.getResource()
方法返回带有jndi://hostname/context/...
形式的自定义方案的URL。因此,您可以使用
ctx.getResource("/").getPath()
获取Tomcat上的上下文路径(或者可能是getResource("/WEB-INF/web.xml")
并修剪尾部,因为getResource()
被指定为返回null
,如果你要求它提供一个不存在的文件)。您将不得不尝试使用不同的容器来查找适用于这些容器的类似技巧。
答案 1 :(得分:1)
似乎只有形式的servlet 2.5可能会在本文中解释:ServletContext getContextPath()
答案 2 :(得分:1)
你在Servlet 2.4中是正确的,ServeltContext对象没有方法getContextPath。
我可以提出两个选择:
将上下文路径设置为servlet的参数:
<servlet
&GT;
<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
&GT;
尝试从方法getRealPath()
根据文件:
返回包含给定虚拟路径的实际路径的String。 例如,路径“/index.html”返回绝对文件路径 服务器的文件系统将由请求提供服务 “http://host/contextPath/index.html”,其中 contextPath 是此ServletContext的上下文路径。
答案 3 :(得分:-1)
试试这段代码:
class demo extends HttpServlet {
public void init(ServletConfig config) {
String path = config.getServletContext().getRealPath("/");
}
}
应该有效