Java Servlet上下文根

4

一个servlet的上下文根可以有多个入口吗?

例如,所有Sun的示例都使用单个/catalog或类似的作为上下文根,但它也可以是/catalog/furniture吗?

Servlet 2.4规范在这里没有具体说明。

上下文路径: 与此servlet所属的ServletContext相关联的路径前缀。如果此上下文是位于Web服务器URL名称空间基础处的“默认”上下文,则此路径将为空字符串。否则,如果上下文未根据服务器名称空间的根设置,则该路径以“/”字符开头但不以“/”字符结尾。


通过多个条目来定义 WAR 的上下文根,您是指 /multiple/entries vs /singleentry 还是其他什么?实际上,您混淆了 Web 应用程序概念和 Servlet,这非常令人困惑。 - Pascal Thivent
4个回答

2

我们不能给一个servlet多个上下文根。但是我们可以在server.xml中使用不同的名称动态更改。

<web-uri>Project.war</web-uri>
<context-root>myproj</context-root>

我们可以使用不同的名称配置项目上下文根,但它应该是一个名称。
默认情况下,如果您使用请求对象调用contextPath,如req.getContextPath();,则默认情况下将带有斜杠(/)作为/myproj
要了解更多关于将上下文根从静态更改为动态的信息,请在此处查看

1

是的。它只是一个前缀。它必须以“/”开头,除非是“/”,否则不能以“/”结尾。内部斜杠是允许的。


0
例如,所有Sun的示例都使用单个“/catalog”或类似的上下文根,但它也可以是“/catalog/furniture”吗?
在您的web.xml中,您是否建议将“catalog /”和“catalog / furniture /”映射到同一个servlet?这有什么意义?我认为servlet引擎将路由这两个请求到同一个servlet。
如果您建议您有两个WAR文件,一个命名为catalog.war,另一个命名为其他名称,并且两者都需要将所有请求路由到同一个servlet,则必须在两个WAR文件中都具有该servlet的.class文件,或者其他内容的根servlet必须编写以将所有请求重定向到catalog.war根servlet。
您能否更清楚地说明您的想法是什么?我认为您想要实现的目标有点令人困惑。

我不确定,但我认为问题是关于上下文路径(WAR文件可以是/catalog/furniture吗?),而不是Servlet映射。但问题非常不清楚。 - Pascal Thivent
同意,如果您部署了catalog.war,则“/catalog”将是默认上下文。 “catalog/furniture”似乎是多余的。这就好像OP想在目录中拥有不同的类别(“catalog/furniture”将被路由到furniture.jsp等)。 - duffymo

-1

不行。你不能在上下文根路径中使用斜杠。

然而,你可以通过将上下文根设置为"/catalog"来达到相同的效果。只需将所有静态和JSP文件放在WAR包中的"/furniture"下,并相应地映射Servlets即可。


不行。您不能在上下文根路径中包含斜杠。这个说法没有特定的文化参考,它指的是在Web应用程序的上下文根路径中不允许包含斜杠符号。 - Pascal Thivent
在所有实现中,上下文路径被用作文件或目录名的一部分(“catalog.xml”,“catalog.war”或“/webapps/catalog/”)。对于大多数文件系统,斜杠在文件/目录名称中是不允许的。 - ZZ Coder
我以前在上下文根路径中使用反斜杠构建过应用程序。我不认为这一定是正确的,这可能取决于具体实现。 - gbtimmon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接