- PR -

HTTPステータス500エラーが解消できません。

投稿者投稿内容
モンブラン男爵
会議室デビュー日: 2008/05/13
投稿数: 6
投稿日時: 2008-05-13 13:27
JSPからServletにデータを渡したいのですが、以下のエラーが出てなかなか解決できません。

------------------------------------------------------------------------------------------

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: パス /demo2008/servlet/social.RegisterServlet にサーブレットインスタンスを割り当てられません
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:389)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:134)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

原因

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:620)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
java.net.URLClassLoader.access$100(URLClassLoader.java:56)
java.net.URLClassLoader$1.run(URLClassLoader.java:195)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:188)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
java.lang.ClassLoader.loadClass(ClassLoader.java:251)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1277)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1208)
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:370)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:134)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

----------------------------------------------------------------------------------------


以前このエラーが急にできてたりして、時間がたつと直りコンパイルしてTomcatを再起動するとこのエラーが再びでてくるという現象がおきました。
今回は違うアプリで新たに開発を試みてるところこのエラーがすぐに出てきました。

tomcatのbin/setclasspath.shの
# Set standard CLASSPATH
if [ "$1" = "debug" -o "$1" = "javac" ] ; then
CLASSPATH="$JAVA_HOME"/lib/tools.jar
fi

の部分のCLASSPATH=...の行を、CLASSPATH=$CLASSPATH:"$JAVA_HOME"/lib/tools.jarに変更 すると直ると調べたらあったのですが、
こちらを直してもうまくいきません。

初歩的な質問かもしれませんが、どなたかご回答いただけるとありがたいです。
お願いします。

ちなみに環境は
Linux CentOS5
java 1.5
tomcat 5.5です。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-05-13 14:29
FD が枯渇してクラスのロードに失敗しているのではないでしょうか。
ログに"Too many open files"などと記録されていませんか?

こちらが参考になるかもしれません。
・BEA トラブルシューティング ガイド > サポート診断パターン
http://www.beasys.co.jp/cs/support_news/product_troubleshooting/Too_Many_Open_Files_Pattern.html
モンブラン男爵
会議室デビュー日: 2008/05/13
投稿数: 6
投稿日時: 2008-05-14 13:05
>インギさん
ご回答ありがとうございます。

ログを見たところToo many open filesとは記録されてませんでした。

環境設定やパスの問題でしょうか。それともweb.xmlやsever.xmlが誤った記述をしているのでしょうか。
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-05-14 19:23
> java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
これって、common/lib/servlet-api.jarですよね?
モンブラン男爵
会議室デビュー日: 2008/05/13
投稿数: 6
投稿日時: 2008-05-14 22:30
>rancoさん
だと思います。
一応/etc/profileにしっかりとservlet-api.jarのパスは通してあります。
またコンパイルのときにもパスを通してやりました。

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
が原因なのはすべてservlet-api.jar関連のエラーなのでしょうか…
それともほかの原因があるのでしょうか。

chuuzako
会議室デビュー日: 2008/05/15
投稿数: 2
投稿日時: 2008-05-15 06:40
助かりました。
http://imatakutin.blogspot.com/2008/03/javalangnoclassdeffounderror.html

意外な盲点?
困っている人多いのでは?
TOMCAT起動用の.bash_profileと
サーブレットコンパイル用の.bash_profile
を分けるしかないかな?
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-05-15 12:44
> 一応/etc/profileにしっかりとservlet-api.jarのパスは通してあります。
> またコンパイルのときにもパスを通してやりました。
パスじゃなくてクラスパスが…。

しかも、tools.jarなんてCLASSPATH設定しなくてよいのに…。

余談:CLASSPATH環境変数は無設定にせよ、という説に私は大賛成です。
javac -cp ...
java -cp ...
がいちばん安心。
モンブラン男爵
会議室デビュー日: 2008/05/13
投稿数: 6
投稿日時: 2008-05-15 15:02
>chuuzakoさん
.bash_profileに書いてある
#export JAVA_HOME=/usr/local/jdk1.5.0_13
#export PATH=$PATH:$JAVA_HOME/bin:
#export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
を消しましたが、ダメでした。

.bash_profileを分けるということはどういうことでしょうか?

>rancoさん
すいません、クラスパスですね。
無設定というのもありなんですね。

スキルアップ/キャリアアップ(JOB@IT)