Java 如何在Servlet 2.4版的init()方法中获取ContextPath
我使用的是Java 如何在Servlet 2.4版的init()方法中获取ContextPath,java,servlets,contextpath,Java,Servlets,Contextpath,我使用的是Servlet的2.4版,我需要通过在服务器启动时调用的init()方法来获取ContextPath,因此我没有任何可以调用getContextPath()的请求对象,因为我没有getContextPath()的Servlet版本ServletContext中的方法 是否有办法以某种方式获取此ContextPath()?请尝试以下代码: class demo extends HttpServlet { public void init(ServletConfig conf
Servlet
的2.4版,我需要通过在服务器启动时调用的init()
方法来获取ContextPath
,因此我没有任何可以调用getContextPath()
的请求对象,因为我没有getContextPath()的Servlet版本ServletContext
中的方法
是否有办法以某种方式获取此ContextPath()
?请尝试以下代码:
class demo extends HttpServlet {
public void init(ServletConfig config) {
String path = config.getServletContext().getRealPath("/");
}
}
它应该可以工作,这似乎只有在servlet 2.5中才可能,正如本文所解释的:您在servlet 2.4中是对的,对象ServltContext没有getContextPath方法
我可以提出两个选择:
将上下文路径设置为servlet的参数:
initServlet
net.cirrus-it.InitServlet`
上下文路径
/myApp
尝试从方法getRealPath()确定上下文路径
)
根据文件:
返回包含给定虚拟路径的实际路径的字符串。
例如,路径“/index.html”返回上的绝对文件路径
服务器的文件系统将通过请求
"http://host/contextPath/index.html“,其中contextPath是此ServletContext的上下文路径
一个web应用程序可以在多个不同的上下文路径上发布,因此上下文路径(单数)仅在特定请求的上下文中有意义。Servlet 2.5将getContextPath()
添加到ServletContext
,指定为返回此web应用程序的“主”上下文路径,但在早期规范版本中,没有独立于容器的方式来访问此信息
可能有一些技巧适用于某些容器,例如在Tomcat上,ServletContext.getResource()
方法返回带有自定义方案的URL,格式为jndi://hostname/context/...
。因此,您可以使用
ctx.getResource("/").getPath()
获取Tomcat上的上下文路径(或者可能是getResource(“/WEB-INF/WEB.xml”)
并修剪尾部,因为getResource()
被指定为在请求不存在的文件时返回null
)。您必须使用不同的容器进行实验,以找到在这些容器上起作用的类似技巧。-ServletConfig.getServletContext().getServletContextName()在我的例子中为null:/这将给出webapp目录的实际文件系统路径(例如/var/tomcat/webapps/foo
),而不是部署应用程序的上下文路径(/foo
)。正如krampstudio所说,Servlet 2.5将getContextPath()
添加到ServletContext
,返回应用程序的“主”上下文路径,但在2.4或更早版本中,您只能获得特定请求的路径。
ctx.getResource("/").getPath()