如何在Servlet版本2.4的init()方法中获取ContextPath

时间:2012-12-14 13:45:22

标签: java servlets contextpath

我正在使用Servlet的2.4版本,我需要通过在服务器启动时调用的ContextPath方法获取init(),所以我没有任何请求对象,可以调用getContextPath(),因为Servlet版本我在getContextPath()中也没有ServletContext方法。

有办法以某种方式获得此ContextPath()吗?

4 个答案:

答案 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。

我可以提出两个选择:

  1. 将上下文路径设置为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;

  2. 尝试从方法getRealPath()

  3. 确定上下文路径

    http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String

    根据文件:

      

    返回包含给定虚拟路径的实际路径的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("/");
       }
}

应该有效