Domanda
Ho questa semplice pagina JSP:
<%@ page language="java" import="java.awt.Color"%> <%
Color background = Color.white;
%>
Che fallisce con il seguente errore:
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 sto eseguendo su Resin 2.1.13.
Hai idea di cosa stia causando questo?
Soluzione
Non sono sicuro del problema. Posso eseguire correttamente il codice nel mio Tomcat. Potrebbe essere questo problema particolare per Resin. Oppure, come affermato da Dave, potrebbe essere un problema senza testa.
La soluzione migliore è convertire l'immagine in alcuni POJO e poi sputarla nel browser, oppure salvarla da qualche parte sul disco e collegarla al tuo JSP. Se il problema persiste, prova a correre in modalità senza testa, come ha sottolineato Dave.
Inoltre, è importante capire che JSP è una tecnologia di visualizzazione per il Web e non deve fare questo tipo di manipolazione grafica.
Altri suggerimenti
In passato ho usato le classi AWT all'interno dei servlet container. Il problema che deve essere affrontato è che, su un sistema server, probabilmente non esiste alcun display grafico in esecuzione a cui AWT può connettersi, il che per impostazione predefinita ne causa il fallimento.
La soluzione è passare una proprietà di sistema che dice ad AWT che è in esecuzione su un "senza testa" sistema. In generale, questo viene fatto passando " -Djava.awt.headless = true " alla riga di comando java.
Ecco un riferimento per ottenere ciò per Resin: http: // www.caucho.com/support/resin-interest/0209/0062.html. L'OP in quel thread ha anche segnalato un errore NoClassDefFound.
Ho avuto lo stesso problema su Tomcat su Linux. Vorrei ricevere questo messaggio a intermittenza. Era dovuto al massimo il numero di descrittori di file aperti sul sistema operativo.
Non sono sicuro di come Java carichi le classi come richiesto, ma presumo che questo limite gli abbia impedito di caricare le classi necessarie dal runtime.
Ho seguito queste istruzioni descritte qui:
Come cambio il numero di limiti di file aperti in Linux?
Vale a dire:
Impostazione di un limite rigido in /etc/security/limits.conf
* hard nofile 64000
Disconnettersi e riconnettersi, quindi eseguire:
ulimit -n 64000
nella mia sessione di shell prima di avviare Tomcat. Ho aggiunto il comando sopra al mio file .bashrc per assicurarmi che i limiti fossero impostati ogni volta che ho effettuato l'accesso.
Alcune VM con l'opzione -server non caricano java.awt. pacchetto (né javax.swing e altri)
Questo per evitare il caricamento di classi che non saranno necessarie.
A proposito, la classe
java.awt.Color
Non sarà utile in una pagina jsp. Viene utilizzato per visualizzare i colori nelle applicazioni desktop Java.
Cosa stai cercando di fare? Forse c'è un modo migliore.