Как заставить Tomcat перестать кэшировать ответы моего сервлета? - PullRequest
7 голосов
/ 06 января 2009

Я изучаю программирование сервлетов, использую Apache Tomcat 6 на компьютере с Ubuntu 8.10, и у меня очень неприятная проблема, очевидно связанная с кэшированием.

Вот что я делаю: я пишу сервлет, помещаю его в красивую структуру каталогов и разворачиваю его с помощью Tomcat Web Application Manager. Работает как положено. Затем я редактирую сервлет, перекомпилирую и пытаюсь снова получить к нему доступ, но Tomcat продолжает возвращать ту же старую версию. Перезагрузка приложения или даже перезапуск сервера не работает. Единственное, что работает, - это «Развернуть» Приложение, а затем развернуть его заново.

Я должен делать это каждый раз, когда делаю небольшие изменения в своем коде. Это отстой.

Я уверен, что есть способ обойти это, но я нигде не мог найти ответ в Интернете (и я действительно много искал). Я был бы очень признателен за любую помощь. Спасибо!

Ответы [ 5 ]

3 голосов
/ 30 марта 2011

Совет от Адиля Ансари ошибочен: вам никогда не следует изменять CATALINA_HOME / conf / context.xml с настройкой, специфичной для веб-приложения. Вот для чего предназначен ваш webapp / META-INF / context.xml.

Вы также никогда не должны указывать атрибут "docBase" . Вы также никогда не должны указывать атрибут «path» .

ОП имеет несколько вариантов:

  1. Используйте менеджер для перезагрузки веб-приложения (отмена / повторное развертывание не требуется: простая перезагрузка должна работать) (http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Reload_An_Existing_Application)

  2. Установите для элемента в META-INF / context.xml значение reloadable = "true". (http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)

При всем уважении к SO, если вам нужна помощь с Tomcat, присоединитесь к списку рассылки пользователей и получите реальные ответы.

2 голосов
/ 06 января 2009

Я столкнулся с похожими проблемами с Tomcat 5.5. Я никогда не выяснял причину, но я обошел ее, удалив папку, соответствующую веб-приложению, из% CATALINA_HOME% / work / Catalina / localhost. Это не лучшее решение, но оно позволяет избежать необходимости развертывания / повторного развертывания всего приложения.

2 голосов
/ 06 января 2009

В вашем TOMCAT_HOME / conf / вы найдете файл с именем Context.xml. Контент будет выглядеть так:

<Context>
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/classes</WatchedResource>
</Context>

Обе строки здесь не закомментированы, вы также должны раскомментировать обе. Вполне вероятно, что у вас будет 2-й комментарий, или он может вообще не быть. Попробуйте раскомментировать или добавить в последнем случае. Я предполагаю, что вы развертываете свое приложение в TOMCAT_HOME / webapps.

[Изменено]

Попробуйте использовать атрибуты docBase и path в элементе Context . Ниже приведен пример

<Context docBase="path-to-WEB-INF" path="/your-app">

ПРИМЕЧАНИЕ. Не включайте WEB_INF

[Изменено]

Может быть, я что-то упустил. Проверьте это . Это то же самое, но гораздо более наглядно и наглядно, включая несколько других вариантов.

1 голос
/ 13 января 2009

Вы не говорите, используете ли вы Ubuntu Tomcat или отдельную загрузку с tomcat.apache.org . Если вы используете Ubuntu, попробуйте упростить ее с помощью отдельной загрузки. Стандартная загрузка очень проста в администрировании и довольно удобна для работы. Может быть (я не знаю), что Ubuntu один может быть настроен в большей степени для производственного использования, например это может быть несколько закалено.

Рекомендованный производственный параметр для tomcat - это то, что вы описываете (например, нет автоматического развертывания и т. Д.). Настройка разработки намного проще в использовании.

0 голосов
/ 06 января 2009

Если вы используете Netbeans, он автоматически перекомпилирует класс и внедряет его в работающее веб-приложение при сохранении файла. Никаких дополнительных шагов не требуется, просто нажмите «Сохранить».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...