2014-01-13 2 views
2

Я столкнулся со следующей проблемой: у меня есть веб-приложение, в котором есть html-страница, которая использует ajax для запроса обновлений в списке из сервлета (идея в том, что я хочу, чтобы один пользователь мог видеть изменения, которые другие пользователи делают это в списке).Почему файлы сервлета, .html не обновляются после перезапуска сервера?

Проблема была в том, что обновления, которые я делал для кода сервлета и файла .html, не были приняты во внимание даже после перезапуска сервера. Я попытался исправить это по-разному, от очистки проекта до создания другого сервера, и примерно через два часа решение, которое я нашел, это удалить временные интернет-файлы и файлы веб-сайтов. Тем не менее, мне все равно нужно делать это каждый раз, когда я делаю модификацию кода.

Затем я обнаружил новую проблему (фактически следствие первой). Из моего .html я использую метод javascript setInterval (...) для выполнения ajax-запросов на сервлетах, но только первый запрос обработан, а затем, пока я снова не очищу временные файлы, похоже, что он просто продолжает получать начальные ответа, даже если список был обновлен. Я знаю, что мой код не ошибается, потому что я делал печать экранов на сервлете, и я вижу, что doGet (...) вызывается только один раз. Если я удаляю временные интернет-файлы во время выполнения программы, doGet (...) вызывается снова, .html правильно обновляется, и все работает нормально.

Так почему это происходит, и есть ли способ исправить это? Я считаю, что eclipse/tomcat как-то кэширует информацию, но может ли она быть отключена (я использую eclipse juno 4.2.1, apache-tomcat-7.0.47, и я развертываю проект непосредственно из eclipse). Кроме того, этот вопрос не произошел с самого начала, он работал нормально, я не уверен, что я изменил, что заставило его перестать работать.

ответ

1

Servlet контейнеры могут отправить заголовки кэша по умолчанию для статического содержимого или браузеров themselfes кэшируют содержимое, которое не кажется статическим (например, заканчивающиеся в .html, .gif и так далее) и имеет не заголовков кэша. Вот почему вам нужно очистить кеш браузера. Итак, несколько решений (могут быть и другие):

  • Имейте фильтр сервлетов, перехватывайте запросы и добавляйте правильный, недолговечный кэш или не кешируйте все заголовки. (Множество ресурсов там, где это можно сделать.)
  • Добавить параметры запроса на исправление ошибок для запросов GET, например. вместо того, чтобы просить

    http://host/app/index.html 
    

    спросить:

    http://host/app/index.html?q=12345678 
    

    где 12345678 является случайным Numbe или текущая метка времени (JQuery делает это таким образом, если вы укажете cache: false)

+0

Действительно, я всегда отправляю тот же запрос GET, проблема теперь решена. Спасибо, что указали это. –

1

Есть ли способ исправить это?

Вам просто нужен сервер, чтобы использовать обновленный файл, а не извлекать его из кеша. Существует несколько способов сделать это. Для Tomcat 8.0.21 кажется правдой, что сохранение изменений в web.xml приводит к тому, что сервер использует файлы, а не кеш.

Самый быстрый способ, которым я нашел это, - это добавить пробел, сохранить, удалить пробел, сохранить снова. Кроме того, я сделал это в значительной области, например, в тегах URL-шаблона.

+0

Только что столкнулся с этой проблемой и смог восстановить Tomcat путем «касания» файла web.xml. – Ken

Смежные вопросы