Вопрос или проблема
Я хотел бы разобраться с проблемой, которая, как я думаю, возникает только в моей недавно созданной среде. У меня установлена almalinux 9 с apache tomcat 10 и openlogic jdk версии 11. Установка, похоже, прошла успешно (всё с использованием tar.gz), и я вижу на ip:9080 приветствие tomcat и могу получить доступ к графическому интерфейсу менеджера. И я вижу, что всё принадлежит существующему пользователю tomcat.
ps aux показывает
tomcat 16179 0.3 7.6 9282676 1897144 ? Sl Nov26 3:47 /opt/java11/bin/java -Djava.util.logging.config.file=/opt/tomcat10j11/conf/logging.properties -Djava.util.logging.man
netstat -polent показывает
tcp6 0 0 :::9080 :::* LISTEN 1000 152959 16179/java off (0.00/0/0)
Я скопировал несколько war файлов в папку /opt/tomcat10j11/webapps/, и логи из catalina.out говорят мне, что для каждого war файла я получил
SEVERE [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Ошибка при развертывании архива веб-приложения [/opt/apache-tomcat-10.1.33/webapps/name_of.war]
java.lang.IllegalStateException: Ошибка при запуске дочернего процесса
Вызвано: org.apache.catalina.LifecycleException: Невозможно инициализировать компонент [org.apache.catalina.webresources.WarResourceSet@533c9e9a] в org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:406)
Вызвано: java.lang.IllegalArgumentException: java.io.FileNotFoundException: /opt/apache-tomcat-10.1.33/webapps/name_of.war (Доступ запрещен) в org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:141)
Поэтому я предполагаю, что ошибка доступа означает, что папка и файл должны принадлежать tomcat. В этот момент я запускаю chown -R tomcat:tomcat /opt/apache-tomcat-10.1.33/
, после этого я пытаюсь перезапустить сервер, но продолжаю получать ошибку 404. Где мне стоит искать и как я могу устранить неполадки развертывания tomcat/war?
Проблема связана с версией tomcat – java, используемой в системе. Чтобы иметь возможность работать с war в этой среде, я должен использовать openlogic jdk версии 11 И tomcat 9.
Ответ или решение
Ошибка HTTP Status 404 – Не найдено при развертывании WAR в Apache Tomcat 10 на AlmaLinux 9 с OpenLogic Java 11
Введение
Ошибки, возникающие при работе с веб-приложениями на Java, могут быть очень разными по своей природе, и одна из самых распространённых — это ошибка 404, означающая, что запрашиваемый ресурс не найден. В вашем случае, несмотря на успешное развертывание Apache Tomcat 10 и использование OpenLogic JDK 11, вы сталкиваетесь с проблемами при работе с загруженными файлами WAR. Давайте подробно разберём возможные причины и пути их устранения.
Причины проблемы
Согласно предоставленной информации, вы наблюдаете следующие ключевые ошибки:
-
Ошибка доступа: В журнале
catalina.out
отображаетсяjava.io.FileNotFoundException: /opt/apache-tomcat-10.1.33/webapps/name_of.war (Permission denied)
. Это свидетельствует о том, что Tomcat не имеет достаточных прав доступа для работы с файлом WAR, даже после того, как вы изменили владельца папки на пользователя tomcat. -
Ошибка развертывания: После изменения прав и попытки перезапуска Tomcat, вы получаете 404 ошибку. Это говорит о том, что Spring Boot или другие настройки приложений не распознают путь к вашему приложению.
Шаги по устранению неполадок
Чтобы решить эту проблему, вы можете выполнить следующие шаги:
-
Проверка прав доступа: Убедитесь, что все файлы и папки в каталоге
/opt/apache-tomcat-10.1.33/
принадлежат пользователюtomcat
и имеют достаточные права для чтения и исполнения. Выполните следующие команды:chown -R tomcat:tomcat /opt/apache-tomcat-10.1.33/ chmod -R 755 /opt/apache-tomcat-10.1.33/
-
Проверка сетевого доступа: Убедитесь, что ваш сервер доступен на указанном порту (9080). Попробуйте выполнить команду:
curl http://localhost:9080/
Если вы получите доступ к приветственной странице Tomcat, это значит, что сервер работает корректно.
-
Логи Tomcat: Внимательно просмотрите все логи Tomcat, особенно
catalina.out
иlocalhost/yyyy-MM-dd.log
, для получения дополнительной информации о том, почему происходит ошибка 404. Следите за строками, начинающимися сSEVERE
илиERROR
, так как они могут содержать критически важную информацию. -
Контекст и путь к WAR: Убедитесь, что вы правильно копируете WAR файл в папку webapps. Имя файла должно соответствовать тому, что ожидает Tomcat. Например, если файл называется
name_of.war
, ваше приложение будет доступно по адресуhttp://ip:9080/name_of
, если вweb.xml
указаны настройки по умолчанию. -
Использование Tomcat 9: Ваша последняя установка Tomcat 10 с OpenLogic JDK 11 может быть несовместима с некоторыми WAR-файлами. Попробуйте использовать Tomcat 9 вместе с OpenLogic JDK 11, как вы упомянули. Возможно, это решит проблемы совместимости.
Заключение
Ошибка 404 – это достаточно распространённая проблема, и она может быть вызвана рядом факторов, включая неправильные права доступа или проблемы с совместимостью между версиями. Следуя предложенным шагам, вы сможете устранить причину возникновения ошибки. Запомните, что записи в логах могут служить хорошим источником информации для выявления источника проблем. Нужна дополнительная помощь? Не стесняйтесь задавать вопросы, и мы с радостью вам поможем.