【问题标题】:Java Web-Application: Why is getContextPath empty?Java Web 应用程序:为什么 getContextPath 为空?
【发布时间】:2015-08-24 15:05:59
【问题描述】:

对于这个网址:
http://localhost:8888/myapp/myservlet/item

在我的 servlet 里面的 doGet 方法中:

System.out.println("req.getServletPath(): " + req.getServletPath());
System.out.println("req.getRequestURL(): " + req.getRequestURL());
System.out.println("req.getRequestURI(): " + req.getRequestURI());
System.out.println("req.getContextPath(): " + req.getContextPath());
System.out.println("req.getPathInfo(): " + req.getPathInfo());

控制台输出:

req.getServletPath(): 
req.getRequestURL(): http://localhost:8888/myapp/myservlet/item
req.getRequestURI(): /myapp/myservlet/item
req.getContextPath(): 
req.getPathInfo(): /myapp/myservlet/item

为什么 getContextPath 和 getServletPath 是空的?
如果重要的话,这是部署在码头上的 Eclipse 中的(谷歌)网络项目。

我正在尝试获取 servlet 名称之后的部分 URL,即在这种情况下为 /item。

【问题讨论】:

  • 你认为它应该返回/myapp?为什么?
  • Sotirios> 它不应该是空白 - 不是吗?
  • 这取决于你如何配置你的容器。
  • 您使用的是哪个容器?如果您的应用程序被部署为根,请检查。如果是这样,我就没有上下文了。
  • 这从 Eclipse 中部署在 Jetty 上,正如您在 URL 中看到的那样:localhost:8888/myapp/myservlet/item,“myapp”部分是应用程序名称,所以我猜它不是 root。我正在尝试获取“myservlet/”即项目之外的 URL 的最后一部分 - 我如何得到它?

标签: java servlets web-applications


【解决方案1】:

我发现这张来自HttpServletRequest Path Decoding 的图片很有用:

看起来问题是应用程序部署在根目录上,然后 servlet 有一个包含应用程序名称的路径。附加 web.xml 文件以验证这一点。

【讨论】:

    【解决方案2】:

    关于上下文路径 - 此路径是加载到容器的应用程序的“子路径”。由于您的 contextPath 为空,因此您的应用程序在容器中配置为没有 contextPath 的默认应用程序。这是完全正确的——在大多数情况下,您并不需要任何上下文路径。但是您应该准备好使用它。

    关于 getServletPath - 我不确定...但看起来您的应用程序管理您的 servlet,而 getServletPath 方法询问容器(而容器对您的 servlet 一无所知)。要控制由容器管理的内容以及由应用程序管理的内容,您可以查看 web.xml 文件并阅读所有 <servlet><servlet-mapping> 元素

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2014-08-12
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 2020-09-15
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多