• ベストアンサー

java servlet で大域変数

SERVLETで大域変数(count)を定義したいです。 ・ページの中のボタンを押すと他のservletのクラスを呼び、countの値を一つ 増やす。 ・その新しいページでも、ボタンを押すと同じcountの値がもう一つ増え、また他のservletを呼ぶ。 ……… (プログラムで使うすべてのservletのクラスでcountを有効にしたい) といった感じのプログラムを作るとしたら、 どこで、どのようにcountを定義すればいいでしょうか?

  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

全ての Servlet を HttpServlet から派生させるのではなく、全ての Servlet 共通の クラスを HttpServlet から派生させて、その他の Servlet は、そのクラスから 派生させる。 例えば、 class MyServletCommon extends HttpServlet {  private int count;  synchronized void setCount(int c) { count = c; }  synchronized int getCount(void) { return count; } } class MyServlet_1 extends MyServletCommon {  … } という感じ。 でも、気持ちは分からないではないけど、大域の変数なんて考え方は止めて おいた方が良いですよ。 本当に、どんな Servlet でも参照したい値であれば、ServletContext に 置いておく方が良いと思います。どちらにしろ、全員にアクセス権がある 属性であれば、排他は必要なんだし…

myrimyri
質問者

お礼

ありがとうございました。そうですね、大域変数という考え方はやめておいて、 ServletContextにしてみます。

その他の回答 (2)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.3

ANo.#2を答えた者ですが、間違えて「自信なし」に なってしまいました。 自信ありです。 Servletのセッション管理は基本中の基本です。 もし理解できていなかったら、まずは本を見て勉強してください。 私のお勧め本 「コア・サーブレット&JSP」 Marty Hall著 岩谷 宏訳 ソフトバンク パブリッシング株式会社発行

myrimyri
質問者

お礼

ご丁寧にどうも(^-^)! 本屋へ行ってみて、見てみます。

  • yuji
  • ベストアンサー率37% (64/169)
回答No.2

案1  <INPUT TYPE="HIDDEN" NAME="COUNT" VALUE="1"> みたいにHIDDENで値を渡す。 案2  HttpSessionにcountを格納する。  はじめにcount=1でHttpSessionに格納する。  次の画面でcountを取り出して、+1する。  countをHttpSessionに格納する。  ・・・

myrimyri
質問者

お礼

ありがとうございました。さっそく頑張ってみます。

関連するQ&A

  • 大域変数について

    配列の大域変数externの使いかたがよくわかりません。 BCC Developerを用いて分割コンパイルをしています。 headerファイルにて配列 int map[10][10]; と定義してその配列を他のファイルで使いたい場合は extern int map; ではいけないのでしょうか? あと、headerにて static int * map[10][10] と記述して他のファイルにて extern int *map という記述の仕方は可能なのでしょうか? 大域変数なのにstaticを用いるのはおかしいかとおもいますが… ご教授よろしくお願いします。

  • Servletにおけるスレッド間でのグローバル変数の関係

    お世話になっております。 サーブレットクラスにて定義したグローバル変数へ、それぞれ別のスレッドからアクセスした場合、 それぞれの値には関連性が無いと認識していたのですが、それは誤りでしょうか? グローバル変数を有するサーブレットクラスを作成し、2つのスレッドを流したところ、1つ目のスレッドでセットした値が、後追いで流した2つ目のスレッドでセットした値に置き換わってしまいました。 それぞれの値を関連性の無いようにしたいのですが どのようにしたら良いのか、ご存知の方いらっしゃいましたらご教授願います。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • java servletでファイルを表示

    SERVLETのプログラム中から、あるHTMLファイルを表示させたいのですが、どういう風に書けばいいでしょうか? 例えば、あるボタンを押したら、test.htmlをブラウザに表示する。 といったような感じにしたいです。

    • ベストアンサー
    • Java
  • 変数とフィールドの使い分け

    Javaを勉強し始めて半年くらいの者です。最近、プログラムを作成する際に変数とフィールドの使い分けがあいまいになってきました。フィールドとして定義すれば、そのクラス全体で使う事が出来ますよね?しかし、これは変数として最初に適用範囲が全体になるように(要はメソッドの中とかではないところに)定義すればそのクラス全体で使う事が出来ますよね?そうすると、何を変数にして、何をフィールドにすれば良いかがこんがらがってしまうのです。極端な話。。そのクラスで使う変数を全てフィールドで定義してしまえば、変数なんていらないのではないでしょうか?逆に、フィールドをなくして、全て変数で定義することもできるのではないか等と考えてしまうのです。この2つの明確な違いはなんなのでしょうか?みなさんはどういう風に使い分けていますか?

    • ベストアンサー
    • Java
  • Servlet上でのClass#forName()について

    こんにちは。三田と申します。 Class#forName()で取得したClassオブジェクトが、Servlet上とそうでない場合で結果が違っていました。 実際、行っている処理は、あるクラスのClassオブジェクトをClass#forName()で取得して、次にそのクラスのインスタンスを生成して、Class#isInstance()をしているだけです。 上記の処理を行った場合に、Servlet上ではfalseで そうでない場合は、trueになるのです。 デバックしてみたところ、インスタンスを生成したときにServlet上では、Classオブジェクトの変数に値が入っていないのに対し、Servletを使用しない場合は、Classオブジェクトの変数に値が入っていました。 その違いは発見したのですが、なぜそうなるのかがわかりません。理由を知っている方がいらっしゃいましたら、ぜひご教授をお願いします。 以上、よろしくお願いします。

  • jspからServletを呼び、元のjspページに戻るにはどうしたらよいですか?

    ・jspページにあるボタンを押すとServletに値を渡す。 ・Servletで処理をする。 ・処理の結果を元のjspページに表示する。 というプログラムを作りたいと考えています。 jspページ→Servletで処理をする、という所までは出来たのですが その後元のページに戻すというところで困っています。 jspページは複数(十数ページ)あり、Servletは1つです。 a.jsp→Servlet→a.jsp b.jsp→Servlet→b.jsp このように、どのjspページから呼ばれても、元のjspページに 戻したいのですが、どのようにすれば実現できるでしょうか?

    • ベストアンサー
    • Java
  • インスタンス変数とクラス変数の違い

    1つのクラスオブジェクト内のインスタンス全てで共有できる クラス変数 @@a と、 同じインスタンス内であればメソッドの定義を越えてその値を 参照したり、変更したりできるインスタンス変数 @a のスコープの違いをお手すきでしたらご指導願えませんか? あとクラス変数にはセッターやゲッター等のアクセスメソッドを 設定できるんですか? いろいろ知りたいです。

    • ベストアンサー
    • Ruby
  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

  • 変数が渡らない

    選択するための3つのボタンを作成し、それぞれ変数ansに値を格納しました。下記がそのActionScriptの例です。 ------------------------------- on(release){ ans=1; _root.nextFrame(); } ------------------------------- ボタンを押した後、別のレイヤーのフレームからMCを読み込みます。 しかし、ボタン内で格納した変数が読み込まれずundefined(未定義)となってしまいます。if文で分岐したいのですが出来ずに困っています。 ボタンをクリックすることで変数に格納した値を、ムービークリップのイベント内で読み込むことは可能でしょうか?

    • ベストアンサー
    • Flash
  • C,C++,Javaの変数の種類

    クラス、構造体の変数の中で外部からアクセスできないという設定があります。アクセスできないというのは、 0.値を見ることができるが変更はできない(定数のような感じ? 消費税率とか?) 1.値を見ることはできないが変更することはできる(銀行預金額面風?) 2.値を見ることも変更することもできない (どう利用するのでしょうか?) にわかれるように思います。もし2ならば、その変数は構造体、クラスの外部に影響を与えないように思います。すなわちそのような変数の使用が何を目的としているか不明になるように思いますが。 例えば、Xを2の意味で隠蔽していたとします。 Yを与えて、Z=Y*Xを計算し、Zの値を取り出すと、Xの値が間接的にわかることになります。これだと変数を隠蔽したことならないのでこのような使い方もエラーになるだろうと思いますが。 すなわち、アクセスできないとはどういう意味になるのでしょうか。 C,C++,Javaを同時に見ており、private, staticなどいろいろあって混乱してしまいました。 変数のアクセス制限・隠蔽についてどのように整理すればよろしいでしょうか。 よろしくお願いします。

専門家に質問してみよう