gpt4 book ai didi

java - tomcat 托管的 servlet 可以突破它的基本 URL 吗?

转载 作者:行者123 更新时间:2023-11-28 22:53:48 25 4
gpt4 key购买 nike

我刚刚开始编写一些 java servlet 并使用 Tomcat (v7) 运行它们。我对目录结构如何工作的理解是 URL 是相对于您的应用程序名称的:

  • 因此,如果我的应用程序是 MyWebApp,那么请访问 http://server/MyWebApp例如,我将在我的 Web 应用程序的根目录中查看我创建的“index.jsp”文件。
  • 如果 index.jsp 有一个带有 POST 的表单来“提交”,那么浏览器将发送到 http://server/MyWebApp/submit
  • 在我的 web.xml 文件中,我可以指向一个扩展 HttpServlet 的类来处理此 POST 请求。像这样的东西:

    <servlet>
    <servlet-name>MyHandler</servlet-name>
    <servlet-class>org.me.handler</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>MyHandler</servlet-name>
    <url-pattern>/submit</url-pattern>
    </servlet-mapping>

  • 但是,假设我的表单 POST 到“/submit”。然后浏览器发送请求到http://server/submit

  • 我看不出有什么方法可以从我的网络应用中拦截它。

一种方法是将我的网络应用部署为 ROOT。还有其他方法吗?

最佳答案

servlet 容器中的每个 Web 应用程序都有一个上下文路径。它只能接收上下文路径下的请求。出于充分的理由,无法“突破”其上下文路径(除非 servlet 容器存在错误)。

servlet 映射总是被视为相对于上下文路径。

您可以以 root 身份部署 Web 应用程序,即使用上下文路径“/”。参见 here如何为 Tomcat 执行此操作。

当您的页面包含指向服务器的 URL(href-、src-、action-attributes 等)时,您基本上有两个选择:

  1. 使用相对 URL。例如。您示例中的表单可以简单地包含 action="submit",它会被浏览器转换为绝对 URL。

  2. 使用绝对 URL。由于(如果)您不希望您的应用程序依赖于固定的内容路径,因此您应该(需要)动态生成您的页面并在这些 URL 前加上实际上下文路径的前缀。

关于java - tomcat 托管的 servlet 可以突破它的基本 URL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32781307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com