Frage

Ich habe diese einfache JSP-Seite:

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

Welche schlägt mit folgenden Fehlern:

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)

Ich laufe es auf Resin 2.1.13.

Jede Idee, was dies verursacht?

War es hilfreich?

Lösung

Nicht sicher über das Thema. Ich kann Ihren Code erfolgreich in meinem Tomcat laufen. Dieses Problem kann sein, ist insbesondere Harz. Oder die wie von Dave, kann eine Maden Thema sein.

Ihre beste Wette ist, um das Bild in einigen POJO zu konvertieren und spucken dann, dass an den Browser, oder sei es auf der Festplatte irgendwo speichern kann und es dann in Ihrem JSP verknüpfen. Wenn das Problem weiterhin besteht, versuchen in Headless Modus ausgeführt wird, wie Dave wies darauf hin.

Darüber hinaus sein wichtig zu verstehen, dass JSP eine Ansicht Technologie für das Web ist, und muss diese Art von Grafiken Manipulation nicht tun.

Andere Tipps

In der Vergangenheit habe ich AWT Klassen innerhalb Servlet-Container verwendet. Das Problem, das behandelt werden muss, ist, dass auf einem Server-System, gibt es wahrscheinlich keine Grafik-Display ausgeführt, dass AWT verbinden kann, was standardmäßig bewirkt, dass es zum Scheitern verurteilt.

Die Lösung ist eine Systemeigenschaft zu übergeben, die AWT sagt es auf einem „Headless“ System läuft. In der Regel wird dies, indem man „-Djava.awt.headless = true“, um die Java-Kommandozeile.

Hier ist eine Referenz in Bezug auf dies zu erreichen für Harz: http: // www.caucho.com/support/resin-interest/0209/0062.html . Der OP in diesem Thread berichtete auch einen NoClassDefFound Fehler.

Ich hatte das gleiche Problem auf Tomcat unter Linux. Ich würde intermittierend diese Nachricht erhalten. Es war aufgrund der Anzahl offener Dateien auf dem O maxing.

Ich bin mir nicht sicher, wie Java laden Klassen je nach Bedarf, aber ich nehme diese Grenze gestoppt es aus Belastungsklassen, die sie von der Laufzeit benötigt wird.

Ich folgte diesen Anweisungen hier beschrieben:

Wie ändere ich die Anzahl der geöffneten Dateien beschränkt in Linux?

Nämlich:

eine harte Grenze in /etc/security/limits.conf Einstellung

* hard nofile 64000

Abmelden und wieder anmelden, dann läuft:

ulimit -n 64000

in meiner Shell-Sitzung vor Tomcat starten. Ich habe den obigen Befehl an meine .bashrc Datei, um sicherzustellen, dass die Grenzen jedes Mal eingestellt wurden ich angemeldet.

Einige VM mit der Option -server nicht die java.awt laden. Paket überhaupt (noch javax.swing und andere)

Dies ist zum Laden von Klassen zu vermeiden, die nicht benötigt werden.

Durch die Art und Weise, die Klasse

java.awt.Color

Wird nicht nützlich in einer jsp Seite sein. Es wird verwendet, um Farben in Java-Desktop-Anwendungen angezeigt werden soll.

Was wollen Sie tun? Vielleicht gibt es einen besseren Weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top