[英]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。
我可以建议两种选择:
将上下文路径设置为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()确定上下文路径
根据文件:
返回包含给定虚拟路径的实际路径的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.