Tomcat не может найти класс, который находится прямо в папке классов - PullRequest
2 голосов
/ 06 октября 2011

У меня есть следующий JSP:

<%@ page import="foo.*" %>
<html>
    <body>
        The page count is:
        <%=Counter.getCount()%>
    </body>
    </html>

У меня есть Counter класс в пакете foo, который хранится в:

C: \ apache-tomcat-6.0.32 \ webapps \ God \ WEB-INF \ classes

И контейнер может найти класс из своего пакета foo.

Но когда я пытаюсь добавить некоторыедругой файл класса находится непосредственно под \WEB-INF\classes, а не в каком-либо определенном пакете, например foo, тогда контейнер не может найти этот класс.

Как это вызвано и как я могу его решить?

1 Ответ

9 голосов
/ 06 октября 2011

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

Таким образом, когда вы хотите иметь возможность повторно использовать класс где угодно, он должен быть помещен в конкретный пакет, а не в пакет по умолчанию.В качестве упражнения создайте два класса самостоятельно, один из которых находится внутри пакета, а другой - вне пакета.Теперь, внутри одного с пакетом, попробуйте import и используйте тот без пакета.Вы увидите, что это невозможно, и код не скомпилируется.Контейнер сервлета сталкивается с точно такой же проблемой «под капотами».

См. Также:


Не связано с конкретной проблемой: написание сырого кода Java в файлах JSP - плохая практика .Попробуйте изучить и использовать сервлеты .

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