- PR -

JSPから普通のクラスを使う

投稿者投稿内容
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-17 19:52
私は、Lombozプラグインの構文チェッカー周りにはバグがあるらしいので、
使わない、エラーだといわれても気にしない、ということにしています。

引用:

こうすると普通のクラス扱いよりもリソースを取るんでしょうか?



ページコンテキストやセッションコンテキストなど、JSP serviceメソッド
のローカルスコープよりスコープの広いコンテキストの属性として、生成した
オブジェクトの参照が保存されるので、ちょっと気をつけないとバグの原因に
なることが…ということでしょうか。

リソースは特に問題ないですよ。せいぜいリクエストスコープのValueObject
Beanを一個多く作ったせいでリソース不足になるようなシステムだったら、構
成ダメダメでしょう^^;

#誤解を与える文章ですみません。
<jsp:useBean id="myBean" class="パッケージ名.ClassA" />は、
ClassA myBean = (ClassA)pageContext.getAttribute("myBean");
if(myBean == null){
myBean = new ClassA();
pageContext.setAttribute("myBean",myBean);
}

と言ったJavaコードとほぼ等価です。(useBeanタグの属性によっては,
setAttribute()対象がリクエストスコープだったりセッションスコープ
だったりします)

無駄にオブジェクトが作られたりするわけではないです。ターゲットとなる
スコープに指定した名前の属性がないときだけ生成するだけです。


あいまいな言葉の説明を一生懸命読むより、適当なJSPパーサでJSPファイル
からJavaソースを生成してそれを読むほうが良いと思いますよ。

[ メッセージ編集済み 編集者: シュン 編集日時 2004-11-17 21:06 ]
A.K.渡邉
常連さん
会議室デビュー日: 2004/11/15
投稿数: 30
投稿日時: 2004-11-17 20:53
もう少しリソースについて質問させてください。

<jsp:useBean id="myBean" class="パッケージ名.ClassA" />
とした上で、
<%=myBean.hoge()%>
を使うとします。そしてその後もう一度
<%=myBean.hoge()%>
とした場合、最初の<%=myBean.hoge()%>と二番目の<%=myBean.hoge()%>の違いはあるのでしょうか?それとも最初の物が再利用されるのでしょうか?もし新しく作られるのなら、一番初めの<%=myBean.hoge()%>を再利用する方法はあるのでしょうか?

よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-18 01:10
引用:

A.K.渡邉さんの書き込み (2004-11-17 20:53) より:
<jsp:useBean id="myBean" class="パッケージ名.ClassA" />
とした上で、
<%=myBean.hoge()%>
を使うとします。そしてその後もう一度
<%=myBean.hoge()%>
とした場合、最初の<%=myBean.hoge()%>と二番目の<%=myBean.hoge()%>の違いはあるのでしょうか?それとも最初の物が再利用されるのでしょうか?もし新しく作られるのなら、一番初めの<%=myBean.hoge()%>を再利用する方法はあるのでしょうか?


「最初」「二番目」と言っているのは同じページの別の場所、ということでしょうか。
まず、useBeanでscope属性を省略した場合、デフォルトのページスコープになります。
したがって、同一ページ内で参照しているインスタンスは同一になりますが、ページが
表示されるたびにインスタンスが生成されるため、同一のリクエストであっても異なるページ
では異なるインスタンスが参照されます。
A.K.渡邉
常連さん
会議室デビュー日: 2004/11/15
投稿数: 30
投稿日時: 2004-11-19 08:42
返信ありがとうございます。スコープの設定を忘れていまして、先程の質問をしてしまいました。適切な回答ありがとうございます。
A.K.渡邉
常連さん
会議室デビュー日: 2004/11/15
投稿数: 30
投稿日時: 2004-11-19 16:12
一番最初に投稿した問題が解決しましたので報告してこのスレッドをまとめてみようと思います。

JSPコード
<%@ page import="パッケージ名.クラス名(例:ClassA).ClassA" %>
<%
ClassA a;
%>

の時点ではエラーが出ませんでしたが、

<%@ page import="パッケージ名.クラス名(例:ClassA).ClassA" %>
<%
ClassA a = new ClassA();
%>

と変更した時に出るエラーですが、<%@ page の部分でいきなり改行してプロジェクトをSave、その後バックスペースキーで元に戻して再びSave。すると理不尽なほど簡潔に問題が解決されました。<%@ XXX %>タグ辺りの変更とプロジェクトの関連がシンクロしてないために起こったと思われます。コードの問題よりもIDE(プラグイン?)関連のバグでしょうか。

書き込みはしませんでしたが、一番初めは

<%@ page import="パッケージ名.クラス名(例:ClassA).*" %>
<%
ClassA a;
%>

の時点でもエラーが出ていましたが、何やらするうちにエラーが消えるという理不尽な反応をEclipseは見せていました。

返信にお付き合いいただき、ありがとうございました。

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