use*_*534 2 java tomcat servlets
我希望有人能帮助我解决这个问题。我正在 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>
Run Code Online (Sandbox Code Playgroud)
因此,我希望我的 servlet 只能通过 .war 名称决定的 url 访问/otherUrl,或者只能通过 .war 名称决定的 url 访问。我可能错过了一些东西。有人可以帮我澄清一下吗?
这里有两个概念需要理解:上下文路径(可以找到应用程序的位置)和servlet 路径。
上下文路径始终与主机名相关(呃,足够接近)。因此,如果您调用了上下文,mydesiredname那么您可以在 找到它https://example.com/mydesiredname。
应用程序内的所有 URLWEB-INF/web.xml都是上下文相关的。这意味着,如果您指定/ABCservlet <url-mapping>(或servlet 路径),那么您将通过请求来访问该 servlet https://example.com/mydesiredname/ABC。
在 Web 应用程序中,无法响应上下文路径“外部”的 URL ,因为容器不会将请求发送到具有context pathhttps://example.com/ABC的 Web 应用程序。 /mydesiredname
如果您想使用 访问您的 servlet https://example.com/ABC,那么您要做的就是将您的 Web 应用程序部署到所谓的“根”上下文。在 Tomcat 中,您可以通过命名 WAR 文件来实现此目的ROOT.war,上下文路径将变为""(空字符串)。