【问题标题】:Java servlet context rootJava servlet 上下文根
【发布时间】:2010-12-21 06:20:57
【问题描述】:

是否允许有多个条目作为 servlet 的上下文根?

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

Servlet 2.4 Specification 此处不具体。

上下文路径:与此 servlet 所属的 ServletContext 关联的路径前缀。如果此上下文是“默认” 上下文根植于 Web 服务器的 URL 名称空间的基础,这 路径将是一个空字符串。否则,如果上下文没有根 在服务器名称空间的根目录,路径以'/'开头 字符,但不以'/'字符结尾。

【问题讨论】:

  • 上下文根(WAR)的多个条目是指/multiple/entries/singleentry 还是其他什么?实际上,您将 Web 应用程序概念与 servlet 混合在一起,这非常令人困惑。

标签: java jakarta-ee contextpath


【解决方案1】:

我们不能为一个 servlet 提供多个上下文根。但是我们可以在server.xml中用不同的名字动态改变为

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

我们可以为我们的项目上下文根配置不同的名称,但它应该是一个名称。

默认情况下,如果您使用请求对象作为req.getContextPath(); 调用 contextPath,它将默认使用斜杠(/)作为/myproj

有关将上下文根从静态更改为动态的更多信息,您可以check here

【讨论】:

    【解决方案2】:

    是的。这只是一个前缀。必须以“/”开头,不能以“/”结尾,除非是“/”。允许使用内部斜线。

    【讨论】:

      【解决方案3】:

      例如所有 Sun 示例都使用单个“/catalog”或类似的上下文根,但它可以是 “/目录/家具”也是?

      在您的 web.xml 中,您是否建议将“catalog/”和“catalog/furniture/”映射到同一个 servlet?重点是什么?我认为 servlet 引擎会将这两个请求路由到同一个 servlet。

      如果您建议您有两个 WAR 文件,一个命名为 catalog.war,另一个命名为其他文件,并且都需要将所有请求路由到同一个 servlet,要么您必须拥有 .class两个 WAR 文件中该 servlet 的文件,或者必须编写其他上下文的根 servlet,以便将所有请求重定向到 catalog.war 根 servlet。

      您能更清楚地了解您的想法吗?我认为你想要完成的事情有点令人困惑。

      【讨论】:

      • 我不确定,但我认为问题在于上下文路径(对于 WAR,它可以是 /catalog/furniture 吗?),而不是 servlet 映射。但是这个问题很不清楚。
      • 同意,如果您部署了 catalog.war,“/catalog”将是默认上下文。似乎“目录/家具”是多余的。这几乎就像 OP 想要在目录中有不同的类别(“目录/家具”将被路由到家具.jsp 等)
      【解决方案4】:

      没有。上下文根路径中不能有斜线。

      但是,您可以使用上下文根作为“/catalog”来实现相同的效果。只需将所有静态和 JSP 文件放在 WAR 中的“/furniture”下并相应地添加映射 Servlet。

      【讨论】:

      • “不。您不能在上下文根路径中使用斜线。” 对于我的文化,这有什么参考意义?
      • 在所有实现中,上下文路径都用作文件或目录名称的一部分(“catalog.xml”、“catalog.war”或“/webapps/catalog/”)。大多数文件系统的文件/目录名称中不允许使用斜杠。
      • 我之前在上下文根中构建了带有反斜杠的应用程序。我不相信这是真的。它可能是特定于实现的。
      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 2012-02-02
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多