Tomcat没有向Web应用程序的上下文添加尾部斜杠

Bad*_*her 19 java spring tomcat war

如果在没有它的情况下输入网址,我想让Tomcat自动为我的应用程序的上下文添加一个尾部斜杠.

当我使用Jetty进行测试时,它会自动将尾部斜杠添加到我的应用程序的上下文中,但Tomcat不会这样做.

我不确定在部署之后将命名的上下文是什么,因为我将WAR交给其他人,因此HTML中的任何资源引用都是相对的.有没有办法让Tomcat自动重定向到添加了尾部斜杠的相同上下文?

目前在Spring 3中使用Tomcat 7.

Pat*_*Pat 29

这是一个旧帖子,但是从Tomcat 7.0.67开始,您需要将以下属性添加到context.xml文件中:

<Context mapperContextRootRedirectEnabled="true">...</Context>
Run Code Online (Sandbox Code Playgroud)

根据7.0.67 更改日志:

移动为上下文和目录提供重定向的功能,其中尾随/从Mapper添加到DefaultServlet.这样,在重定向之前,任何已配置的阀门和过滤器都可以处理此类请求.此行为可通过Context的mapperContextRootRedirectEnabled和mapperDirectoryRedirectEnabled属性进行配置,这些属性可用于恢复先前的行为.

并在Tomcat上下文文档中:

mapperContextRootRedirectEnabled:如果启用,将在必要时由Mapper而不是默认Servlet重定向(添加尾部斜杠)对Web应用程序上下文根的请求.这更有效,但具有确认上下文路径存在的副作用.如果未指定,则使用默认值false.

  • 是的,自7.0.68以来,默认值已更改为"true" (3认同)

小智 6

您的应用程序的web.xml似乎已映射到"/*".servlet映射"/*"导致tomcat按原样将请求传递给Web应用程序(即不重定向).

要正确重定向,必须将"/*"映射更改为just "/",后者表示默认servlet.


Ist*_*vai 5

Tomcat自动添加尾部斜杠.只需使用Tomcat提供的示例应用程序进行测试即可.

如果 - 由于某些特殊配置 - 它没有,我会编写一个过滤器来检查查询字符串并根据应用程序的需要重定向.很多时候这是必要的(做http-> https重定向等)