7

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

有没有办法以某种方式得到这个ContextPath()

4

4 回答 4

2

一个 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您将不得不尝试使用不同的容器来找到适用于这些容器的类似技巧。

于 2012-12-14T13:58:58.757 回答
1

正如这篇文章中所解释的那样,似乎只有 servlet 2.5 才有可能:ServletContext getContextPath()

于 2012-12-14T13:51:37.427 回答
1

您在 Servlet 2.4 中是对的,ServletContext 对象没有 getContextPath 方法。

我可以建议两个选项:

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

  2. 尝试从方法 getRealPath() 确定上下文路径

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

根据文档:

返回包含给定虚拟路径的真实路径的字符串。例如,路径“/index.html”返回服务器文件系统上的绝对文件路径,将由对“http://host/contextPath/index.html”的请求提供服务,其中contextPath是此 ServletContext的上下文路径.

于 2012-12-14T13:58:38.993 回答
-2

试试这个代码:

class demo extends HttpServlet {
       public void init(ServletConfig config) {
             String path = config.getServletContext().getRealPath("/");
       }
}

它应该工作

于 2012-12-14T13:50:51.360 回答