我有这个简单的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上运行它。
知道造成这种情况的原因是什么?
答案 0 :(得分:1)
过去我在servlet容器中使用了AWT类。需要解决的问题是,在服务器系统上,可能没有运行AWT可以连接的图形显示,默认情况下会导致它失败。
解决方案是传递一个系统属性,告诉AWT它在“无头”系统上运行。通常,这是通过将“-Djava.awt.headless = true”传递给java命令行来完成的。
以下是关于为树脂完成此操作的参考资料:http://www.caucho.com/support/resin-interest/0209/0062.html。该线程中的OP也报告了NoClassDefFound错误。
答案 1 :(得分:0)
不确定这个问题。我可以在Tomcat中成功运行您的代码。可能这个问题特别适用于树脂。或者,如戴夫所说,可能是一个无头的问题。
最好的办法是在某些POJO中转换图像,然后将其吐出到浏览器中,或者将其保存在磁盘上的某个位置,然后将其链接到JSP中。如果问题仍然存在,请尝试在无头模式下运行,正如Dave指出的那样。
此外,了解JSP是一种用于Web的视图技术非常重要,并且不能进行那种图形操作。
答案 2 :(得分:0)
我在Linux上的Tomcat上遇到了同样的问题。我会间歇地收到这条消息。这是由于最大化操作系统上打开的文件描述符的数量。
我不确定Java如何根据需要加载类,但我认为这个限制阻止了它从运行时加载所需的类。
我按照这里列出的说明进行了操作:
How do I change the number of open files limit in Linux?
即:
在/etc/security/limits.conf中设置硬限制
* hard nofile 64000
注销并再次登录,然后运行:
ulimit -n 64000
在启动Tomcat之前的shell会话中。 我将上述命令添加到我的.bashrc文件中,以确保每次登录时都设置了限制。
答案 3 :(得分:-1)
某些带有-server选项的VM不会加载java.awt。包完全(也不是javax.swing和其他人)
这是为了避免加载不需要的类。
顺便说一下,班级
java.awt.Color
在jsp页面中没有任何用处。它用于在Java桌面应用程序中显示颜色。
你想做什么?也许有更好的方法。