一尘不染

Tomcat在哪里将/附加到目录路径?

tomcat

假设我的Tomcat webapps目录如下所示:

webapps/
webapps/fooapp/
webapps/fooapp/WEB-INF/
webapps/fooapp/WEB-INF/web.xml
webapps/fooapp/bardir/

当我对发出GET请求时/fooapp/bardir,Tomcat看到webapps / fooapp / bardir是目录,并向其发送回302
/fooapp/bardir/(末尾带有斜杠)。

这里是我的问题: 如果 在Tomcat的源代码, 这是否发生的呢? (我正在查看6.0.x,但是任何版本的正确答案都是一个很好的起点。)

我可以在该主题上找到的唯一参考资料是在Catalina功能规范中,其中规定了有关默认Servlet的信息:

在此servlet处理的每个HTTP GET请求上,应执行以下处理:

[…]

  • 如果请求的资源是目录:
    • 如果请求路径不是以“ /”结尾,请重定向到带有“ /”的相应路径,以便正确解析欢迎文件中的相对引用。

但是,此功能似乎不在org.apache.catalina.servlets.DefaultServlet;中。或至少不是唯一的:如果我用 不存在
servlet类servlet 替换web.xml中的默认servlet ,则目录路径 仍会返回302
以添加斜杠,而其他所有请求都会返回一个错误如预期的那样。


阅读 216

收藏
2020-06-16

共1个答案

一尘不染

认为
它发生在org.apache.tomcat.util.http.mapper.Mapper中,即internalMapWrapper (Context, CharChunk, MappingData)方法中。

但不幸的是,我不确定-也许这确实是一个更适合tomcat用户邮件列表的问题。抱歉,没有更好的答案。

2020-06-16