Предположим, мой каталог веб-приложений Tomcat выглядит следующим образом:
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 , в котором говорится относительно сервлета по умолчанию:
Для каждого запроса HTTP GET, обрабатываемого этим сервлетом, должна выполняться следующая обработка:
[...]
- Если запрашиваемый ресурс является каталогом:
- Если путь запроса не заканчивается на «/», перенаправьте на соответствующий путь с добавленным «/», чтобы относительные ссылки в файлах приветствия были правильно разрешены.
Однако эта функциональность отсутствует в org.apache.catalina.servlets.DefaultServlet; или, по крайней мере, он не существует исключительно: если я заменю сервлет по умолчанию в web.xml на сервлет, у которого класс сервлета не существует , пути к каталогам все еще возвращаются 302 для добавления косая черта, в то время как каждый другой запрос возвращается с ошибкой, как и ожидалось.