Вопрос

У меня есть простая страница Jsp:

<%@ page language="java" import="java.awt.Color"%> <%
Color background = Color.white;
%>

Что терпит неудачу со следующей ошибкой:

java.lang.NoClassDefFoundError
    at _text__jsp._jspService(/text.jsp:3)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
    at com.caucho.jsp.Page.subservice(Page.java:506)
    at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
    at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:346)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:534)

Я запускаю его на Resin 2.1.13.

Есть идеи, что является причиной этого?

Это было полезно?

Решение

Не уверен насчет проблемы. Я могу успешно запустить ваш код в моем Tomcat. Может быть, эта проблема является особенной для смолы. Или, как сказал Дэйв, это может быть проблемой без головы.

Лучше всего преобразовать изображение в какой-нибудь POJO, а затем плюнуть на него в браузер, или, возможно, сохранить его где-нибудь на диске и затем связать его в вашем JSP. Если проблема не устранена, попробуйте запустить в автономном режиме, как указал Дейв.

Кроме того, важно понимать, что JSP - это технология просмотра для Интернета, и она не должна выполнять подобные графические манипуляции.

Другие советы

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

Решение состоит в том, чтобы передать системное свойство, которое сообщает AWT, что оно работает на " headless " система. Как правило, это делается путем передачи " -Djava.awt.headless = true " в командной строке Java.

Вот справка о том, как выполнить это для Ресина: http: // www.caucho.com/support/resin-interest/0209/0062.html . ОП в этом потоке также сообщил об ошибке NoClassDefFound.

У меня была такая же проблема с Tomcat в Linux.Я получал это сообщение периодически.Это произошло из-за максимального количества открытых файловых дескрипторов в ОС.

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

Я следовал этим инструкциям, изложенным здесь:

Как изменить ограничение количества открытых файлов в Linux?

А именно:

Установка жесткого ограничения в /etc/security/limits.conf

* hard nofile 64000

Выходим из системы и снова входим в систему, затем запускаем:

ulimit -n 64000

в моем сеансе оболочки перед запуском Tomcat.Я добавил приведенную выше команду в свой файл .bashrc, чтобы убедиться, что ограничения устанавливаются каждый раз, когда я вхожу в систему.

Некоторые виртуальные машины с параметром -server не загружают java.awt. пакет вообще (ни javax.swing, ни другие)

Это сделано для того, чтобы избежать загрузки классов, которые не понадобятся.

Кстати, класс

java.awt.Color

На странице jsp ничего не пригодится. Он используется для отображения цветов в настольных приложениях Java.

Что ты пытаешься сделать? Возможно, есть лучший способ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top