- PR -

Tomcat4.0.1に変更したら・・・。

投稿者投稿内容
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2002-10-23 20:44
初めまして。こんばんは。
アレクと申します。

最近、開発環境を Tomcat3.2.1 から 4.0.1 に変更したのですが、
どうも JSP がうまく動きません。
3.2.1 ではちゃんと動いていたんですが 4.x になってからは
コンパイルエラーが表示されるようになってしまいました。

どうも、<jsp:useBean> タグがうまくいっていないようなのですが、
タグの書き方に何か変更があったのでしょうか?
それとも、何か他の要因があるのでしょうか?

どなたか、教えて頂けないでしょうか。
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-10-23 21:51
<jsp:useBean>
をどのように記述したかを書いていただけると
何かわかるかもしれません。
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2002-10-23 22:56
引用:

amnakyさんの書き込み (2002-10-23 21:51) より:
<jsp:useBean>
をどのように記述したかを書いていただけると
何かわかるかもしれません。



そうですよね〜。すみませんでした。
それでは、
下記 JSP は、エラーメッセージを保存してある ErrorMessage Beans から、
値を読み込んで、JSP で表示するという簡単なものです。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<jsp:useBean id="EM" class="ErrorMessage" scope="session" />

<html>
<head><title>エラー</title></head>
<body>
エラー内容:<%=EM.getErrorMessage()%>
</body>
</html>

自分のコードが間違ってるんですかね〜?
何か分かりましたら教えてください。


[ メッセージ編集済み 編集者: アレク 編集日時 2002-10-23 23:03 ]

[ メッセージ編集済み 編集者: アレク 編集日時 2002-10-23 23:05 ]
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-10-24 00:42
どこかで見たことのある現象です。
パッケージ指定なしのクラスをJSPから呼ぶ場合
コンパイルが通らないというやつかな?

jspをコンパイルする際、パッケージをorg.apache.なんとか
パッケージにするため、明示的にimportしないと
コンパイルできないという。

<%@page import="ErrorMessage" %>
を書くと動いたりしません?

あと、コンパイルエラーの内容も書いてくださいね。
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2002-10-24 23:26
引用:

パッケージ指定なしのクラスをJSPから呼ぶ場合
コンパイルが通らないというやつかな?

jspをコンパイルする際、パッケージをorg.apache.なんとか
パッケージにするため、明示的にimportしないと
コンパイルできないという。

<%@page import="ErrorMessage" %>
を書くと動いたりしません?

あと、コンパイルエラーの内容も書いてくださいね。



amnaky さん、ありがとうございます。
確かに、パッケージの指定をするとちゃんと動きました。

でも、以前はこんな設定必要なかった気が・・・。
やっぱり Tomcat 4.x からは何か変わったんですかね〜。

そういえば、JSP タグでもう一つ分からないのがありました。
<jsp:getProperty>なんですが、これも以前と同じ方法では使えなくなってしまった?
例えば、

<%@ page contentType="text/html; charset=Shift_JIS" %>
<jsp:useBean id="EM" class="db.ErrorMessage" scope="request"/>

<html>
<head><title>エラー</title></head>
<body>

エラー内容:<jsp:getProperty name="EM" property="error" />

</body>
</html>

と、書くと以前は、通っていたはずなのにエラーが生じてしまいます。
エラー内容は、

Apache Tomcat/4.0.1 - HTTP Status 500 - Internal Server Error
type Exception report
message Internal Server Error
description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: タイプ 'db.ErrorMessage' のbean中の属性 'error' の情報を発見できませんでした

と、いうものです。

ちゃんと、ErrorMessage Beans の中で、errorプロパティも
アクセスメソッドも設定してあるんですけどね〜。

何ででしょうか?
やっぱり、Tomcat4.x は何かが違う!?
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-10-25 00:46
scopeがもともとのsessionから
次のではrequestとなっていますが、ServletRequestには
ErrorMessageをセットしてるんですよね。

あと、もともとのやつでは
<%=EM.getErrorMessage()%>
としていますが、
error
プロパティもあるんですか?
getError()を実装しているんですよね。

うーん、ちょっとわからないですね。
何かミスがあるとしか思えません。

Tomcat3と4が違うというのは全くそのとおりです。
4からCATALINAという全く違うアーキテクチャになってます。
Servlet2.3,JSP1.2を実装している点も違いますし。

同じ4でもディレクトリ構成とかも変わりますし、
その都度ReleaseNoteを見て確認するのがいいと思います。
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2002-10-25 06:49
引用:

あと、もともとのやつでは
<%=EM.getErrorMessage()%>
としていますが、
errorプロパティもあるんですか?
getError()を実装しているんですよね。



ちゃんと実装してるんですけどね〜。
とか、思いつつもう一度JSPを確認してみたら・・・。

ぶふー!getError()実装してないやんか〜!!

getError()の実装をすっかり忘れていたようでした・・・。
ということで、getError()を実装すると、
<jsp:getProperty>もちゃんと動きました。

結局(やっぱり)、自分が間違っていたのね〜!(爆)

amnakyさん。本当に申し訳ありませんでした。

引用:

Tomcat3と4が違うというのは全くそのとおりです。
4からCATALINAという全く違うアーキテクチャになってます。
Servlet2.3,JSP1.2を実装している点も違いますし。

同じ4でもディレクトリ構成とかも変わりますし、
その都度ReleaseNoteを見て確認するのがいいと思います。



確かに。そうですよね。
これからはReleaseNoteをちゃんとチェックするようにしたいと思います。

ところで、もう一つ疑問が・・・。(何度もすみません)
今回の例だと、

<%= EM.getErrorMessage() %>
<jsp:getProperty name="EM" property="error" />

の二つを利用することで、どちらも同じ結果を得ることが出来たわけです。

では、どちらを使った方が良いのか?
または、場面によって使い分ける必要があるのか?

等、新たな疑問がわき上がってまいりました。

ご意見をお聞かせ下さい。

[ メッセージ編集済み 編集者: アレク 編集日時 2002-10-25 07:05 ]
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-10-25 10:55
正確な動きの違いについてはわからないですが、
条件がそろってれば本質的には変わらないんじゃないでしょうか。

getterを実装してない場合や、
a.getB().getC()のようにとらなきゃいけない場合とかは
<%=%>を使ったほうが早いですよね。
タグライブラリを使う手もありますが。

見た目上、
scliptletはなるべくないほうがいいというのは(
デザイナーとの共同作業、デバッグの容易さにおいて)
よく言われますが、
その辺もやりやすいルールに統一すれば大丈夫でしょう。

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