【问题标题】:why does tomcat redirect context path with slash?为什么tomcat用斜杠重定向上下文路径?
【发布时间】:2018-11-18 01:31:02
【问题描述】:

我在 tomcat 中有一个带有上下文路径“/cas”的 servlet Web 应用程序。
当我访问“http://localhost:8080/cas”时,tomcat 会重定向到“http://localhost:8080/cas/”。
是否在任何文档中指定了这种行为?
有没有“/cas”的servlet?

【问题讨论】:

    标签: tomcat servlets


    【解决方案1】:

    它返回一个重定向,因为这些是 Java Servlet 规范 rev 3.0 中指定的规则,在 12.1 URL 路径的使用部分。它也存在于所有其他 Servlet Spec 版本中(以不同的编号)。

    /cas/cas/ 之间存在差异。其中一个对您的应用程序不可见(即没有您可以映射的url-pattern 将导致您的 Web 应用程序中的资源响应),另一个将被您的应用程序视为/

    如果你在ROOT 应用程序中将/cas 映射到某个东西,Tomcat 将忽略它,因为存在覆盖它的最长匹配规则(映射到/cas 的上下文)所以你的/cas 应用程序将覆盖您在 ROOT 应用程序中映射的任何内容。

    /cas 请求,根据定义,是一个没有尾随 / 的目录请求,因此 Tomcat 执行添加 / 的重定向。然后10.10 欢迎文件部分开始发挥作用,Tomcat 将检查您的应用程序以确定下一步该做什么。

    【讨论】:

    • 关于“这些是规则”,OP专门询问该行为是否“在任何文档中指定”。
    • @Christopher Schultz 我没有在“使用 URL 路径”部分找到重定向的东西,所以由 tomcat 将“/cas”重定向到“/cas/”?
    • @Tim Tomcat 选择实现从/cas/cas/ 的解析作为重定向。它当然可以使用(应用程序认为的)“转发”在内部处理请求,但是重定向更清晰一些,并为客户端提供了一些关于它发生了什么的信息。
    • @ChristopherSchultz 所以这是 tomcat 的决定,而不是 Java Servlet 规范?
    • @Tim 是的,这是 Tomcat 的决定。上下文路径被视为“目录”(即使它们不支持磁盘目录结构),并且几乎所有 Web 服务器都将请求重定向到 .../dir.../dir/
    猜你喜欢
    • 2020-11-12
    • 2021-07-13
    • 2016-12-12
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2021-06-07
    • 2014-04-12
    • 2014-11-03
    相关资源
    最近更新 更多