假设我的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/(末尾带有斜杠)。
/fooapp/bardir
/fooapp/bardir/
这里是我的问题: 如果 在Tomcat的源代码, 这是否发生的呢? (我正在查看6.0.x,但是任何版本的正确答案都是一个很好的起点。)
我可以在该主题上找到的唯一参考资料是在Catalina功能规范中,其中规定了有关默认Servlet的信息:
在此servlet处理的每个HTTP GET请求上,应执行以下处理: […] 如果请求的资源是目录: 如果请求路径不是以“ /”结尾,请重定向到带有“ /”的相应路径,以便正确解析欢迎文件中的相对引用。
在此servlet处理的每个HTTP GET请求上,应执行以下处理:
[…]
但是,此功能似乎不在org.apache.catalina.servlets.DefaultServlet;中。或至少不是唯一的:如果我用 不存在 该 servlet类 的 servlet 替换web.xml中的默认servlet ,则目录路径 仍会返回302 以添加斜杠,而其他所有请求都会返回一个错误如预期的那样。
我 认为 它发生在org.apache.tomcat.util.http.mapper.Mapper中,即internalMapWrapper (Context, CharChunk, MappingData)方法中。
internalMapWrapper (Context, CharChunk, MappingData)
但不幸的是,我不确定-也许这确实是一个更适合tomcat用户邮件列表的问题。抱歉,没有更好的答案。