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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top