我有这个简单的Jsp页面:

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

失败并出现以下错误:

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)

我在Resin 2.1.13上运行它。

知道造成这种情况的原因是什么?

有帮助吗?

解决方案

不确定这个问题。我可以在Tomcat中成功运行您的代码。可能这个问题特别适用于树脂。或者,如戴夫所说,可能是一个无头的问题。

最好的办法是在某些POJO中转换图像,然后将其吐出到浏览器中,或者将其保存在磁盘上的某个位置,然后将其链接到JSP中。如果问题仍然存在,请尝试在无头模式下运行,正如Dave指出的那样。

此外,了解JSP是一种用于Web的视图技术非常重要,并且不能进行那种图形操作。

其他提示

过去我在servlet容器中使用了AWT类。需要解决的问题是,在服务器系统上,可能没有运行AWT可以连接的图形显示,默认情况下会导致它失败。

解决方案是传递一个系统属性,该属性告诉AWT它正在“无头”上运行。系统。通常,这是通过传递“-Djava.awt.headless = true”来完成的。到java命令行。

以下是有关Resin实现此目的的参考资料: http:// www.caucho.com/support/resin-interest/0209/0062.html 。该线程中的OP也报告了NoClassDefFound错误。

我在Linux上的Tomcat上遇到了同样的问题。我会间歇地收到这条消息。这是由于最大化操作系统上打开的文件描述符的数量。

我不确定Java如何根据需要加载类,但我认为这个限制阻止了它从运行时加载所需的类。

我按照这里列出的说明进行了操作:

如何更改Linux中的打开文件数限制?

即:

在/etc/security/limits.conf中设置硬限制

* hard nofile 64000

注销并再次登录,然后运行:

ulimit -n 64000
在启动Tomcat之前的shell会话中

。 我将上述命令添加到我的.bashrc文件中,以确保每次登录时都设置了限制。

某些带有-server选项的VM不会加载java.awt。包完全(也不是javax.swing和其他人)

这是为了避免加载不需要的类。

顺便说一下,班级

java.awt.Color

在jsp页面中没有任何用处。它用于在Java桌面应用程序中显示颜色。

你想做什么?也许有更好的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top