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()