Tomcat 7 Web 应用程序的尾部斜杠问题

Tomcat 7 Web 应用程序的尾部斜杠问题

最近我将我的 tomcat 服务器从 6.x 版本升级到了最新的 7.x 版本。

我想到了一些小麻烦,希望能够得到帮助。

我有一个应用程序调用 MyApp

在 tomcat6 上,当我去http://www.example.com/MyApp/page/ 我通常会得到想要的结果。

现在,在 tomcat7 上,访问完全相同的 url(带有尾随斜杠),我收到错误:“资源不可用”,因为 tomcat 认为 /MyApp/page/ 是一个完整的 webapp 名称,而不是 MyApp webapp 下的请求名称页面。

我需要在 URL 末尾加上斜杠,否则我会收到错误:“HTTP 状态 405 - 不支持请求方法‘GET’”,这是没问题的,因为我确实不允许对“页面”请求使用 GET 方法。

如果有人知道如何告诉 tomcat,现有 webapp 路径后的尾随斜杠不应该将其重定向到新的 webapp,而是调用整个“字符串”并像在 tomcat6 上一样处理请求,那就太好了!

答案1

这是一个古老的问题,但由于我最近一直在与 Tomcat 8 中的终止斜线作斗争,我知道斜线问题仍然困扰着 Tomcat 用户世界。:-)

您可能会遇到 Tomcat 在加载根上下文时处理重定向的方式发生变化的情况。请查看错误 58660并阅读那里的一些开发人员讨论。您可能需要通过修改中元素mapperContextRootRedirectEnabled的属性来关闭默认映射器。Contextconf/context.xml

答案2

检查您的欢迎文件列表..以下是推测......

我认为问题的本质是当 Tomcat 出现 / 时 - 它有几个选项 - 遍历欢迎文件列表 - 如果没有任何内容 - 显示目录列表(如果启用)

有趣的事情从这里开始... 许多人希望将 *.do 用于 struts 之类的东西。因此他们希望将 index.do 作为主页。或者常见的是 index.jsp,其中 *.jsp 映射到 JspServlet。

事情开始变得有趣了。假设您的欢迎文件是 index.jsp、index.do。

Tomcat(IIRC)所做的是首先遍历欢迎文件列表以查找该名称的资源。

然后它将进行第二次查找匹配的映射。因此,如果在欢迎列表中指定了 index.jsp 并且映射了 *.jsp。那么 tomcat 将尝试转发到 index.jsp,您将得到 404。

所以我猜你有一个 servlet 映射和欢迎文件重叠。并且该 servlet 的行为不支持 GET。(因此出现 405)

答案3

如果您的项目使用的是 v2.2 的动态 Web 模块,则您需要在 WebContent 中的 web.xml(例如 index.html)中明确创建至少一个文件(可以是空的 html 文件)。

相关内容