Почему мои изменения JSP не отражаются без перезапуска Tomcat? - PullRequest
27 голосов
/ 05 января 2010

Я редактирую файлы JSP, которые находятся непосредственно внутри tomcat/webapps/myapp/WEB-INF, но чтобы увидеть изменения, мне нужно перезагрузить сервер. Насколько я знаю, изменения JSP не требуют перезагрузки сервера. Единственная найденная мною конфигурация, связанная с автоматической перезагрузкой, это reloadable = "true"

Установите значение true, если хотите, чтобы Каталина следить за занятиями в / WEB-INF / classes / и / WEB-INF / lib для изменений, и автоматически перезагрузить веб приложение, если обнаружено изменение.

Я использовал этот атрибут в context.xml, но проблема все еще сохраняется. Что может быть другой возможной причиной не обнаружения изменений в файлах JSP без перезапуска?

@ Bozho: Это выдержка из web.xml. Нужно ли что-то менять?

 <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

Ответы [ 12 ]

28 голосов
/ 05 января 2010

В документах tomcat см. Настройку development. Для перезагрузки jsps необходимо установить значение true.

разработка - Используется ли Jasper в режиме разработки? Если установлено значение true, частота, с которой JSP проверяются на наличие изменений, может быть указана с помощью параметраificationTestInterval.true или false, по умолчанию true.

Это у вас CATALINA_HOME/conf/web.xml

Кроме того, если вам нужно обновить jsp в производственной среде без перезапуска, вы можете перейти к CATALINA_HOME/work/Catalina/localhost/contentName/org/apache/jsp и удалить файлы your_jsp.java и your_jsp.class. Они будут воссозданы при следующем обращении.

Редактировать: после предоставления вашей конфигурации и комментариев о том, что не нужно обновлять содержимое, у меня есть еще один вариант: очистить кеш браузера или открыть страницу из другого браузера.

9 голосов
/ 05 сентября 2014

Еще более поздний ответ ...

Установка «antiResourceLocking» на «true» в файле контекста может помешать перезагрузке JSP Tomcat ( Bugzilla 37668 ).

Это задокументировано в Tomcat doc , в объяснении параметра "antiResourceLocking"

4 голосов
/ 05 декабря 2014

У меня была такая же проблема, и я ее исправил. Убедитесь, что в conf/context.xml у вас нет следующей конфигурации

<Context antiJARLocking="true" antiResourceLocking="true">

Если у вас есть тот, удалите оба antiJARLocking="true" antiResourceLocking="true", просто напишите

<Context>
3 голосов
/ 25 марта 2014

Легко понять, что это может быть, но вот что означает "установка разработки в true" (подробнее для краткого справочника):

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <!-- Add the following init-param -->
    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

А затем перезапустите.

2 голосов
/ 17 июня 2013

Поздний ответ, хотя кто-то может найти это полезным.

Проверьте разрешения для папки Tomcat, я пробовал много других решений, и это не сработало.

Наконец, я дал моей «учетной записи пользователя» разрешение «Полный доступ» на папку Tomcat, и Tomcat принимал изменения всякий раз, когда вносил изменения в JSP. Я предполагаю, что вы используете Windows. Обоснование этого было следующее: всякий раз, когда вы вносите изменения в JSP, его нужно скомпилировать и развернуть (записать) в папку webapps. Если для этой папки нет разрешения на запись, она молча завершится ошибкой. Это происходило в моем случае. Поэтому, если reloadable = true и development = true в context.xml не работают, попробуйте исправить это разрешение.

Я использую Tomcat 7 в Windows 7.

1 голос
/ 09 июля 2013

Синхронизация времени сервера и клиента

Вы можете проверить время своего сервера и системное время клиента. У меня несколько дней назад после смены сервера время правильно работало. Отражены изменения файлов .jsp .

0 голосов
/ 29 июня 2017

На самом деле движок jsp проверяет, является ли страница jsp старше своей страницы сервлета или нет, и на основании этого он решает, нужны ли изменения.

0 голосов
/ 11 апреля 2017

Я тоже столкнулся с этой проблемой при внесении изменений jsp в myeclipse, которые не отражаются в приложении во время работы. Я надеюсь, что эти проверки помогут вам.

  1. Дважды щелкните по серверу Tomcat из MyEclipse.
  2. выберите меню «Публикация» в окне «Обзор».
  3. Выберите переключатель «Автоматически публиковать при изменении ресурсов»
  4. введите интервал публикации в 1 секунду.

enter image description here enter image description here

Надеюсь, это вам поможет.

0 голосов
/ 29 марта 2016

(Tomcat 7.0.62) Мне пришлось перейти в CATALINA_HOME / temp / xx -mysite /, найти мой jsp-файл в этом дереве каталогов и отредактировать его.

xx - это случайный (?) Номер префикса, в моем случае 11, но у каждого сайта был один.

0 голосов
/ 08 февраля 2016

Я использую TomEE 1.7.2 в Windows 7 с Eclipse. Решение, которое работало для меня, заключалось в простом изменении файла web.xml для сервера TomEE в localhost-config (в моей IDE), чтобы параметр init init разработки был верным:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
...