Pergunta

Eu tenho essa página JSP simples:

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

O que falha com seguinte erro:

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)

Estou executando-o em Resina 2.1.13.

Qualquer idéia do que está causando isso?

Foi útil?

Solução

Não tenho certeza sobre o assunto. Posso executar o código com sucesso no meu Tomcat. Pode ser este problema é particular a resina. Ou, como disse Dave, pode ser um problema sem cabeça.

Sua melhor aposta é para converter a imagem em algum POJO e depois cuspir que para o navegador, ou pode ser salvá-lo em algum lugar no disco e, em seguida, ligá-lo em sua JSP. Se persistir problema, tente executar no modo sem cabeça, como Dave apontou.

Além disso, é importante compreender que JSP é uma tecnologia de exibição para a web, e não deve fazer esse tipo de manipulação de gráficos.

Outras dicas

Nas classes AWT passado eu usei no interior de recipientes de servlet. A questão que precisa ser tratada é que, em um sistema de servidor, provavelmente não há de exibição de gráficos em execução que AWT pode conectar-se, que por padrão faz com que ele falhar.

A solução é passar uma propriedade do sistema que informa AWT ele está sendo executado em um sistema "sem cabeça". Em geral, isso é feito passando "-Djava.awt.headless = true" para a linha de comando java.

Aqui está uma referência a respeito de realizar isso por Resina: http: // www.caucho.com/support/resin-interest/0209/0062.html . O OP nesse segmento também relatou um erro NoClassDefFound.

Eu tive esse mesmo problema no Tomcat no Linux. Eu recebo essa mensagem de forma intermitente. Foi devido a estourar o limite do número de descritores de arquivos abertos no OS.

Eu não tenho certeza de como Java carrega as classes conforme necessário, mas eu assumo esse limite impediu de carregar classes que precisava de tempo de execução.

Eu segui as instruções descritas aqui:

Como faço para alterar o número de arquivos abertos limitar em Linux?

A saber:

A definição de um limite rígido no /etc/security/limits.conf

* hard nofile 64000

O logoff e login novamente, em seguida, executando:

ulimit -n 64000

na minha sessão de shell antes de iniciar Tomcat. Eu adicionei o comando acima para meu arquivo .bashrc para se certificar de que os limites foram definidos cada vez que eu conectado.

Alguns VM com a opção -server não carregar o java.awt. pacote em tudo (nem javax.swing e outros)

Isso é para evitar carregar classes que não serão necessários.

A propósito, a classe

java.awt.Color

Não vai ser qualquer útil em uma página jsp. Ele é usado para exibir cores em aplicativos de desktop java.

O que você está tentando fazer? Talvez haja uma maneira melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top