如何在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