Проблема с косой чертой в Tomcat 7 с веб-приложениями

13

Недавно я обновил свой сервер Tomcat с версии 6.x до самой последней версии 7.x.

У меня возникли небольшие проблемы, в надежде получить помощь.

У меня есть приложение, которое вызывает MyApp

На tomcat6, когда я заходил на http://www.example.com/MyApp/page/, я обычно получал желаемый результат.

Теперь, на tomcat7, посещая тот же самый точный URL (с завершающей косой чертой), я получаю ошибку: «Ресурс недоступен», так как tomcat считает, что / MyApp / page / - это целое имя веб-приложения, а не имена запросов страница под веб-приложением MyApp.

Мне нужна косая черта в конце моего URL, потому что в противном случае я получаю сообщение об ошибке: «HTTP Status 405 - Метод запроса« GET »не поддерживается», и это нормально, потому что я действительно не разрешил метод GET для запроса «page» ,

Если кто-то знает, как сообщить tomcat, что косая черта после пути существующего веб-приложения не должна предполагать, что перенаправить его на новые вызовы веб-приложения целиком «строка» и просто обработать запрос, как на tomcat6, было бы здорово!


источник
Есть ли сервлет по умолчанию, web.xmlкоторый сопоставлен с /*? В противном случае tomcat использует список файлов приветствия. Обычно только первый сегмент пути интерпретируется как корень контекста. Таким образом, проблема не в том, чтобы найти ваше веб-приложение.
мана
первый сегмент пути является корневым контекстом и действительно работает, он находит его, но следующие пути вместо того, чтобы быть частью первого пути, tomcat ищет webapp по всему пути ... У меня нет ничего, что сконфигурировано так, чтобы не по умолчанию ..
Я не совсем понимаю, что вы говорите. Сожалею. Если у вас настроено MyAppвеб-приложение с именем, tomcat будет использовать этот контекст веб-приложения, используя оставшийся путь page/. Если нет, он будет искать ROOTконтекст, используя полный путь для поиска.
мана
У меня есть веб-приложение, которое вызывает MyApp, и example.com/MyApp работает, но при посещении example.com/MyApp/foo вместо поиска содержимого foo внутри MyApp он ищет в веб-приложении вызовы «MyApp / foo /» и не ищет контент под MyApp называет foo ..
2
Попробуйте это: stackoverflow.com/q/11055608/1031900

Ответы:

1

Древний вопрос, но, поскольку я недавно боролся с завершающей косой чертой в Tomcat 8, я знаю, что проблемы со косой чертой продолжают преследовать мир пользователей Tomcat. :-)

Возможно, вы столкнетесь с изменениями в способе, которым Tomcat обрабатывает перенаправления при загрузке корневого контекста. Проверьте ошибку 58660 и прочитайте некоторые обсуждения разработчиков там. Возможно, вам придется отключить отображение по умолчанию, изменив mapperContextRootRedirectEnabledатрибут Contextэлемента в conf/context.xml.

Питер
источник
0

Проверьте ваш список файлов приветствия .. что следует за спекуляцией ...

Я считаю, что суть проблемы заключается в том, что Tomcat представлен с / - у него есть несколько опций - перебрать список файлов приветствия - при отсутствии чего-либо - показать список каталогов (если он включен)

Здесь начинается самое интересное ... Многие хотят использовать * .do для таких вещей, как распорки. Поэтому они хотят, чтобы index.do была домашней страницей. Также распространенным является index.jsp, где * .jsp сопоставляется с JspServlet.

Здесь все становится веселее. Допустим, ваши приветственные файлы - index.jsp, index.do.

Tomcat (IIRC) сначала выполняет перебор списка файлов приветствия в поисках ресурсов с таким именем.

Затем он выполнит второй проход, ища сопоставления, которые соответствуют. Так что если index.jsp указан в списке приветствий и * .jsp отображается. Затем tomcat попытается переадресовать на index.jsp, и вы получите 404.

Так что я собираюсь догадаться, что у вас есть отображение сервлета и перекрытие файла приветствия. И поведение этого сервлета не поддерживает GET. (Отсюда 405)

Тим Функ
источник
0

Если в вашем проекте используется динамический веб-модуль версии 2.2, вам нужно явно создать хотя бы один файл (может быть пустым html-файлом), присутствующий в файле web.xml (например, index.html) в вашем WebContent.

Snehal
источник
1
это комментарий; не ответ; пожалуйста, рассмотрите возможность комментирования в будущем, когда вы получите больше очков. спасибо
Hrvoje Špoljar