【问题标题】:Tomcat: Setting custom url of servlet (servlet-mapping vs .war-deployment)Tomcat:设置 servlet 的自定义 url(servlet-mapping vs .war-deployment)
【发布时间】:2018-06-29 11:05:16
【问题描述】:

我希望有人可以帮助我解决这个问题。我在 Tomcat 服务器上运行一个虚拟 servlet。这基本上有效,网站在启动后即可访问。 我想指定一个自定义网址,例如localhost:8080/mydesiredname

我将我的 servlet 部署为 .war 文件。事实证明,.war 的名称决定了 Tomcat 可以访问的 url 的名称。如果它被称为 abc 我的 servlet 将在 localhost:8080/abc 下运行。

虽然我对这个解决方案并不满意,但我想知道servlet-mapping 在<Tomcathome>/conf/web.xml 中有什么用处。我试图覆盖和/或添加一个额外的 url 名称,在该名称下我的 servlet 应该可以访问,但这似乎不起作用。 我在 web.xml 中的代码如下所示:

<servlet>
  <servlet-name>ABC</servlet-name>
  <servlet-class>myservlet.TheServlet</servlet-class>
</servlet>

    <servlet-mapping>
  <servlet-name>ABC</servlet-name>
  <url-pattern>/otherUrl</url-pattern>
</servlet-mapping> 

所以我希望我的 servlet 只能通过 /otherUrl 访问,或者附加到由 .war 名称决定的 url。我可能错过了一些东西。有人可以为我澄清一下吗?

【问题讨论】:

  • 不要修改&lt;Tomcathome&gt;conf/web.xml。相反,您应该在自己的应用程序中编辑 WEB-INF/web.xml 文件。

标签: java tomcat servlets


【解决方案1】:

这里有两个概念需要理解:上下文路径(可以找到应用程序的地方)和servlet路径。

上下文路径总是相对于主机名(呃,足够接近)。因此,如果您的上下文名为 mydesiredname,那么您可以在 https://example.com/mydesiredname 找到它。

应用程序的WEB-INF/web.xml 中的所有 URL 都是上下文相关的。这意味着,如果您为 servlet 的 &lt;url-mapping&gt;(或 servlet 路径)指定 /ABC,那么您将通过请求 https://example.com/mydesiredname/ABC 到达该 servlet。

在 Web 应用程序中,无法响应您的上下文路径“外部”的 URL,因为容器不会将请求发送到 https://example.com/ABC 到 Web 应用程序上下文路径 /mydesiredname.

如果您想使用https://example.com/ABC 访问您的servlet,那么您要做的就是将您的Web 应用程序部署到所谓的“根”上下文。在 Tomcat 中,您可以通过将 WAR 文件命名为 ROOT.war 并且 上下文路径 变为 ""(一个空字符串)来做到这一点。

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2011-11-25
    • 2012-08-22
    相关资源
    最近更新 更多