Pregunta

Tengo esta simple página Jsp:

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

Que falla con el siguiente error:

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)

Lo estoy ejecutando en Resin 2.1.13.

¿Alguna idea de lo que está causando esto?

¿Fue útil?

Solución

No estoy seguro sobre el problema. Puedo ejecutar su código con éxito en mi Tomcat. Puede ser que este problema sea particular de la resina. O, como dijo Dave, puede ser un problema sin cabeza.

Su mejor opción es convertir la imagen en algún POJO y luego escupirla al navegador, o puede guardarla en algún lugar del disco y luego vincularla en su JSP. Si el problema persiste, intente ejecutar en modo sin cabeza, como señaló Dave.

Además, es importante entender que JSP es una tecnología de visualización para la web, y no debe hacer ese tipo de manipulación de gráficos.

Otros consejos

En el pasado, he usado clases AWT dentro de contenedores de servlets. El problema que debe abordarse es que, en un sistema de servidor, probablemente no se esté ejecutando una pantalla gráfica a la que AWT pueda conectarse, lo que por defecto hace que falle.

La solución es pasar una propiedad del sistema que le dice a AWT que se está ejecutando en un " sin cabeza " sistema. En general, esto se hace pasando '' -Djava.awt.headless = true '' a la línea de comando de java.

Aquí hay una referencia sobre cómo lograr esto para Resin: http: // www.caucho.com/support/resin-interest/0209/0062.html . El OP en ese hilo también informó un error NoClassDefFound.

Tuve este mismo problema en Tomcat en Linux. Recibiría este mensaje de forma intermitente. Se debió a maximizar el número de Descriptores de archivos abiertos en el sistema operativo.

No estoy seguro de cómo Java carga las clases según sea necesario, pero supongo que este límite le impidió cargar las clases que necesitaba desde el tiempo de ejecución.

Seguí estas instrucciones descritas aquí:

¿Cómo cambio el ¿Número de límite de archivos abiertos en Linux?

A saber:

Establecer un límite estricto en /etc/security/limits.conf

* hard nofile 64000

Cerrar sesión y volver a iniciarla, luego ejecutar:

ulimit -n 64000

en mi sesión de shell antes de iniciar Tomcat. Agregué el comando anterior a mi archivo .bashrc para asegurarme de que los límites se establecieran cada vez que iniciaba sesión.

Algunas máquinas virtuales con la opción -server no cargan java.awt. paquete en absoluto (ni javax.swing y otros)

Esto es para evitar cargar clases que no serán necesarias.

Por cierto, la clase

java.awt.Color

No será útil en una página jsp. Se utiliza para mostrar colores en aplicaciones de escritorio java.

¿Qué intentas hacer? Quizás haya una mejor manera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top