質問
この単純な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でコードを正常に実行できます。この問題は、Resin固有のものである可能性があります。または、デイブが言ったように、頭のない問題かもしれません。
最善の方法は、一部のPOJOで画像を変換してからブラウザに吐き出すか、ディスク上のどこかに保存してJSPにリンクすることです。問題が解決しない場合は、デイブが指摘したように、ヘッドレスモードで実行してみてください。
さらに、JSPはWebのビューテクノロジーであり、そのようなグラフィック操作を行ってはならないことを理解することが重要です。
他のヒント
過去には、サーブレットコンテナ内でAWTクラスを使用しました。対処する必要がある問題は、サーバーシステムでは、おそらくAWTが接続できるグラフィックディスプレイが実行されておらず、デフォルトでは失敗することです。
解決策は、「ヘッドレス」で実行されていることをAWTに伝えるシステムプロパティを渡すことです。システム。一般的に、これは&quot; -Djava.awt.headless = true&quot;を渡すことで行われます。 javaコマンドラインに。
Resinでこれを実現するためのリファレンスは次のとおりです。 http:// www.caucho.com/support/resin-interest/0209/0062.html 。そのスレッドのOPもNoClassDefFoundエラーを報告しました。
Linux上のTomcatでも同じ問題が発生しました。このメッセージは断続的に表示されます。これは、OSで開いているファイル記述子の数を最大にしたためです。
Javaが必要に応じてクラスをロードする方法がわかりませんが、この制限により、ランタイムから必要なクラスをロードできなくなったと思われます。
ここに概説されているこれらの指示に従いました:
名前:
/etc/security/limits.confでハード制限を設定する
* hard nofile 64000
ログアウトして再度ログインし、実行します:
ulimit -n 64000
Tomcatを起動する前のシェルセッションで。 上記のコマンドを.bashrcファイルに追加して、ログオンするたびに制限が設定されるようにしました。
-serverオプションを使用した一部のVMは、java.awtをロードしません。パッケージ(javax.swingなどもありません)
これは、必要のないクラスのロードを避けるためです。
ところで、クラス
java.awt.Color
jspページでは役に立ちません。 Javaデスクトップアプリケーションで色を表示するために使用されます。
何をしようとしていますか?おそらくもっと良い方法があるでしょう。