Проблема с classpath в Tomcat 9 и подкаталоге веб-приложения - PullRequest
0 голосов
/ 14 декабря 2018

Как настроить веб-приложение так, чтобы файлы .jsp в подкаталогах могли находить те же классы, что и файлы .jsp в корневом каталоге приложения?

Я переместил старое веб-приложение с сервера tomcat6 всервер Tomcat9.Однако файлы .jsp в подкаталогах приложения больше не могут импортировать Java-классы, которые находятся в WEB-INF / classes.Веб-приложение установлено в виде разнесенного файла войны.Чтобы продемонстрировать проблему, у меня есть файл test.jsp, который просто содержит:

<%@ page import="com.example.serverutils.StringUtil" %>
<%= StringUtil.MILLISECONDS_PER_DAY %>

Этот файл прекрасно компилируется, когда он находится в корневом каталоге приложения.Но если я переместлю test.jsp в подкаталог, он не сможет найти класс StringUtil.

Структура каталога выглядит следующим образом:

domain\test.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class

Фактическая регистрируемая ошибка - «Толькотип может быть импортирован. com.example.serverutils.StringUtil преобразуется в пакет "

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Я выяснил причину проблемы, сравнив настройку приложения в файле server.xml в старом (tomcat6) и новом (tomcat9) каталоге conf.

Конфигурация, которая НЕ работалаимел

   <Host appBase="/path/to/root/of/webapp">
       <Context docBase="">

Но работающая конфигурация имела

   <Host appBase="/path/to/root/of">
       <Context docBase="webapp">

Очевидно, что при установке docBase для контекста в "" это поведение вызывается.Изменив файл server.xml, чтобы в docBase для контекста было указано имя последнего подкаталога пути, а для appBase элемента Host, установленного на один каталог, оттуда была устранена эта проблема.

0 голосов
/ 21 декабря 2018

Ваш вопрос может быть похож на Как включить файл JSP из другой папки

Может работать с такой структурой:

domain\test.jsp
domain\import_class.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class

С domain\import_class.jsp, содержащим:

<%@ page import="com.example.serverutils.StringUtil" %>

И domain\sub\test.jsp, содержащие относительный путь, включают:

<jsp:include page="../import_class.jsp"></jsp:include>
<%= StringUtil.MILLISECONDS_PER_DAY %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...