繁体   English   中英

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

[英]How to get ContextPath in init() method of Servlet version 2.4

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

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

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

它似乎只有形式servlet 2.5,如本文所述: ServletContext getContextPath()

你在Servlet 2.4中是正确的,对象ServeltContext没有方法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

根据文件:

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

试试这段代码:

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

它应该工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM