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

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

有没有办法让这个ContextPath()以某种方式?


一个Web应用程序可以在几个不同的上下文路径中发布,因此上下文路径(单数)仅在特定请求的上下文中才有意义。 Servlet 2.5将getContextPath()添加到ServletContext ,该ServletContext指定为返回此Web应用程序的“主”上下文路径,但在以前的spec版本中不存在容器无关的方式来访问此信息。

可能有些技巧适用于某些容器,例如在Tomcat上, ServletContext.getResource()方法返回具有自定义方案的URL,格式为jndi://hostname/context/... 因此你可以使用

ctx.getResource("/").getPath()

(或者可能是getResource("/WEB-INF/web.xml")并修剪掉尾部),因为getResource()被指定为返回null如果你问一个不存在的文件) 。 你将不得不尝试使用不同的容器来寻找类似的技巧。


这似乎是唯一可能的形式在这篇文章中解释的Servlet 2.5:ServletContext getContextPath()


你在Servlet 2.4中是正确的,对象ServeltContext没有方法getContextPath。

我可以提出两个选择:

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

  • 尝试从方法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的上下文路径

    链接地址: http://www.djcxy.com/p/11615.html

    上一篇: How to get ContextPath in init() method of Servlet version 2.4

    下一篇: Functional tests for flash messages after redirect