- PR -

サンプル実行時のエラーについて(サーブレット+javamail)

1
投稿者投稿内容
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 2008-01-22 14:26
お世話になります。

http://www.atmarkit.co.jp/fjava/rensai2/jspservlet12/jspsevlet12_1.html
上記のページにありますサンプルプログラムを動かすと、以下のエラーメッセージが出力されます。

例外
javax.servlet.ServletException: サーブレットの実行により例外を投げました

原因
java.lang.NoClassDefFoundError: javax/mail/Address
servletmail.ServletMail.doPost(ServletMail.java:16)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


ServletMail.javaの16行目ではSendMail.javaをnewしています。
SendMail.javaのtransform()メソッドが原因らしいのですが、
サーブレットから呼び出さず、直接smtpなどを指定して実行すると問題なく動くのです。

どこからどう解析していったらいいのかも分からず、お聞きしている次第です。
開発環境は、WindowsXP、Eclipse3.2、Tomcat5.5、javamail1.4です。

同じようなエラーが出たことがある方、ぜひご教授願います。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-01-22 14:34
jarが足りていないみたいですね。

リンク先を参照すると、以下のように記載があります。
----
なお、本サンプルを動作させるためには、以下のサイトからJavaMailとJAF(Java Activation Framework)をダウンロードし、あらかじめサーバ環境にインストールしておく必要があります。
----
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 2008-01-22 14:40
早々のご返答ありがとうございます。

>jarが足りていないみたいですね。

とのことですが、activation.jarのことでしょうか?
それならばEclipseのプロジェクトにインポートしてあります。
また、サーブレットを介さず、直接SMTPサーバ、宛先メールアドレスを設定したプログラムは同じプロジェクトの中で問題なく動くのです。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-01-23 10:46
引用:

とのことですが、activation.jarのことでしょうか?
それならばEclipseのプロジェクトにインポートしてあります。


Eclipseの設定とは、Javaのビルド・パスのライブラリのことですか?

NoClassDefFoundErrorは実行時にクラスパスから該当のクラスを見つけられない場合に発生します。
Eclipseの設定ではなく、Webアプリケーション側の実行環境の確認をしてみてください。
実行環境に該当のjarはありますか?たとえば、WEB-INF/lib配下など。

first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 2008-01-23 11:37
>Eclipseの設定とは、Javaのビルド・パスのライブラリのことですか?

はい、その通りです。

> 実行環境に該当のjarはありますか?たとえば、WEB-INF/lib配下など。

WEB-INF/lib配下とはLinux環境でのことですよね?
WindowsXPだとその場所はどこに当たるのでしょう?
\\Tomcat 5.5\\webapps\\ROOT\\WEB-INF\\lib 配下にjarファイルを置いてみたのですが、
見当違いのことをしているようで、実行結果は変わりません。

お恥ずかしい限り、お手数かけて申し訳ないのですが、ご教授願えれば幸いです。
よろしくお願いします。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-01-23 13:11
引用:

first-tryさんの書き込み (2008-01-23 11:37) より:
> 実行環境に該当のjarはありますか?たとえば、WEB-INF/lib配下など。

WEB-INF/lib配下とはLinux環境でのことですよね?
WindowsXPだとその場所はどこに当たるのでしょう?
\Tomcat 5.5\webapps\ROOT\WEB-INF\lib 配下にjarファイルを置いてみたのですが、
見当違いのことをしているようで、実行結果は変わりません。



どこにアプリを配備しているのでしょうか?参考にしている@ITのサイトを見ましたが、
http://localhost:8080/javatips/mail.html
というように起動していると思いますが、コレは同じですか?

仮にあっているとすると、
\Tomcat 5.5\webapps\javatips
にサンプルをコピーして動作させている。というのであっていますか?

ここまであっているのであれば、
\Tomcat 5.5\webapps\javatips\WEB-INF
というフォルダがあると思います。
そこに、libというフォルダがなければフォルダを作成し、そこにmail.jarとactivation.jarをコピーしてみてください。
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 2008-01-23 14:55
>どこにアプリを配備しているのでしょうか?参考にしている@ITのサイトを見ましが、
>http://localhost:8080/javatips/mail.html
>というように起動していると思いますが、コレは同じですか?

はい、同じです。

>\\Tomcat 5.5\\webapps\\javatips
>にサンプルをコピーして動作させている。というのであっていますか?

サンプルは、Eclipseのワークスペースにjavatipsというtomcatプロジェクトを作成し、
D:\\Eclipse\\javatips\\WEB-INF\\src にサンプルをコピーして動作させています。
(D:\\EclipseはEclipseのワークスペースです)
このjavatipsプロジェクトに外部jarファイルとして
mail.jar と active.jar を追加しています。

このプロジェクト内にWEB-INF/lib フォルダはありますが、ここにjarファイルは
コピーできません。(コピーしようとするとエラーになります)

先にも記述しましたが、サーブレットを通さず、SendMail.javaを実行すると成功する
のです。
GENZOさんのおっしゃる通り、実行環境に該当のjarがないのでしょうが・・・
理解力が足らず、すみません。
ご助言ありましたら、お願いします。
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 2008-01-23 16:05
GENZOさん、ありがとうございました。

私の勘違いで、Eclipseプロジェクト内のWEB-INF/libにjarファイルをコピペしたら
エラーが直りました。
サーブレットを利用する場合は、ここにjarファイルが必要なのですね。

長々とお付き合い下さり、本当にありがとうございました。
1

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