我无法弄清楚getServletContext.getContextPath()request.getContextPath()将返回不同字符串的情况。

HttpServletRequest.getContextpath() javadoc:


  Servlet容器可能与上下文匹配更多
  一个上下文路径。在这种情况下,此方法将返回
  请求使用的实际上下文路径,它可能与
  ServletContext.getContextPath()方法返回的路径。的
  ServletContext.getContextPath()返回的上下文路径应为
  被视为应用程序的主要或首选上下文路径。


ServletContext.getContextPath() javadoc:


  Servlet容器可能通过多个上下文路径匹配上下文。在这种情况下
  HttpServletRequest.getContextPath()将返回实际上下文
  请求所使用的路径,它可能与所返回的路径不同
  这种方法。此方法返回的上下文路径应为
  被视为应用程序的主要或首选上下文路径。


当我的应用程序位于Tomcat的webapps/ROOT文件夹中时,两个方法都返回“”(空字符串)。

在所有其他情况下,如果我的应用程序位于myapp.war中(放入Tomcat的webapps文件夹中),则这两种方法均按预期返回“ / myapp”。

当我将my.warmymy.war放入Tomcat的webapps文件夹时,Tomcat会看到两个不同的Web应用程序,因此我无法对此“ servlet容器可能通过多个上下文路径匹配上下文”的情况进行建模。

我无法将我的WAR称为my.warmy/my.war,因为Windows和Unix上的文件名均不允许使用“ /”。

最佳答案

支持这是因为it's pretty straightforward to have multiple context paths mapped to the same webapp

以下是实现同一目标的其他方法:


Tomcat: two context paths for one webapp
adding a global URI prefix for Tomcat web apps

10-07 16:18