0

我有这个简单的 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 上运行它。

知道是什么原因造成的吗?

4

4 回答 4

1

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

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

以下是有关为 Resin 完成此操作的参考:http: //www.caucho.com/support/resin-interest/0209/0062.html。该线程中的 OP 还报告了 NoClassDefFound 错误。

于 2009-01-09T20:53:41.650 回答
0

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

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

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

于 2009-01-09T09:48:35.570 回答
0

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

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

我遵循了此处概述的这些说明:

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

即:

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

* hard nofile 64000

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

ulimit -n 64000

在启动 Tomcat 之前在我的 shell 会话中。我将上述命令添加到我的 .bashrc 文件中,以确保每次登录时都设置了限制。

于 2013-07-17T07:11:13.130 回答
-1

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

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

顺便说一句,班级

java.awt.Color

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

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

于 2009-01-09T09:26:35.397 回答