[英]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.