繁体   English   中英

Tomcat:设置servlet的自定义URL(servlet-mapping与.war-deployment)

[英]Tomcat: Setting custom url of servlet (servlet-mapping vs .war-deployment)

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

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

虽然我对这个解决方案并不满意,但我想知道在<Tomcathome>/conf/web.xml什么是servlet-mapping 我试图覆盖和/或添加一个额外的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之外。 我可能错过了一些东西。 有人可以为我澄清一下吗?

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

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

应用程序的WEB-INF/web.xml中的所有URL都是上下文相关的。 这意味着如果为servlet的<url-mapping> (或servlet路径 )指定/ABC ,则可以通过请求https://example.com/mydesiredname/ABC来访问该servlet。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM