Question

J'ai cette simple page Jsp:

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

Qui échoue avec l'erreur suivante:

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)

Je l'exécute sur la résine 2.1.13.

Avez-vous une idée de la cause de cela?

Était-ce utile?

La solution

Pas sûr du problème. Je peux exécuter votre code avec succès dans mon Tomcat. Peut-être que ce problème est particulier à la résine. Ou, comme l'a dit Dave, peut être un problème sans tête.

Votre meilleur choix est de convertir l’image dans un POJO, puis de la cracher au navigateur ou de la sauvegarder quelque part sur le disque, puis de la lier dans votre JSP. Si le problème persiste, essayez de fonctionner en mode sans tête, comme l'a souligné Dave.

De plus, il est important de comprendre que JSP est une technologie d'affichage pour le Web et ne doit pas faire ce genre de manipulation graphique.

Autres conseils

Dans le passé, j’utilisais des classes AWT dans des conteneurs de servlets. Le problème à résoudre est que, sur un système serveur, AWT ne peut probablement pas se connecter à un écran graphique, ce qui provoque son échec par défaut.

La solution consiste à transmettre une propriété système indiquant à AWT qu’elle s’exécute sur un "sans tête". système. En général, cela se fait en passant "-Djava.awt.headless = true". en ligne de commande java.

Voici une référence concernant cette opération pour Resin: http: // www.caucho.com/support/resin-interest/0209/0062.html . L'OP de ce fil a également signalé une erreur NoClassDefFound.

J'ai eu le même problème sur Tomcat sous Linux. Je recevrais ce message par intermittence. Cela était dû au nombre maximal de descripteurs de fichiers ouverts sur le système d'exploitation.

Je ne sais pas comment Java charge les classes comme requis, mais je suppose que cette limite l'a empêché de charger les classes dont il avait besoin à partir de l'exécution.

J'ai suivi les instructions décrites ci-dessous:

Comment modifier le Nombre maximal de fichiers ouverts sous Linux?

À savoir:

Définition d'une limite stricte dans /etc/security/limits.conf

* hard nofile 64000

Déconnexion et reconnexion, puis exécution:

ulimit -n 64000

dans ma session shell avant de démarrer Tomcat. J'ai ajouté la commande ci-dessus à mon fichier .bashrc pour m'assurer que les limites étaient définies chaque fois que je me connectais.

Certaines machines virtuelles dotées de l'option -server ne chargent pas le fichier java.awt. paquet du tout (ni javax.swing et autres)

Cela évite de charger des classes inutiles.

Au fait, la classe

java.awt.Color

Ne sera pas utile dans une page jsp. Il est utilisé pour afficher les couleurs dans les applications de bureau java.

Qu'est-ce que vous essayez de faire? Peut-être y a-t-il un meilleur moyen.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top