• ベストアンサー

java サーブレットについて

プログラム初心者で困っています。 サーバ上で動作するプログラムを作成中です(Java)。サーバ上で常に動いているクラスを作成したのですが、画面からリクエストがあった際には、この常に動いているクラスに別の動作をさせたいと思っています。画面からのリクエストによって動きだすのはサーブレットですよね? ここで分からなくなってしまいました。常に動いているプログラムが、さらに画面からのリクエストで動き出したら2つ動いてしまうことになりますよね? 自分が行いたいことは、常に動いているクラスに画面からリクエストがあったという情報を渡したいのです。 お願いします!!!

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

  • ベストアンサー
  • kana_m
  • ベストアンサー率40% (26/65)
回答No.2

ちょっと問題を整理しましょう。 > サーバにおいた時に最初に動きだすプログラムです。 > さらに数時間に一度処理を行うように実装されています。 バッチみたいなものでしょうか。 この数時間とは、どこでスケジュールされているのでしょう。 通常サーバに置いただけでJVMが動作してクラスをロードすることは無いので、 サーブレットコンテナなど何らかのトリガーたる部分があると思うのですが・・・。 推測での答えになりますが、上記のバッチみたいなものが リクエストを処理する部分と同じVM上で別スレッドであるなら 双方から参照できるstaticな値を使えばよいと思います。 別のVM上で動作するものであれば、双方から参照できる外部資産が必要です。 通常それはDBであったり、テキストファイルだったりしますね。 何となくですが、ご質問の説明に肝心な何かが足りないか もしくはサーブレットについての知識不足・勘違いがあると感じます。

arekore09
質問者

お礼

返信ありがとうございます。 サーブレットについて知識不足は否めないです…。 >この数時間とは、どこでスケジュールされているのでしょう >通常サーバに置いただけでJVMが動作してクラスをロードすることは無いので、サーブレットコンテナなど何らかのトリガーたる部分があると思うのですが・・・。 Timerクラスを実装してschedule()メソッドでスケジュール管理しています。 また、サーブレットはJboss上で動かしています。 static変数を使用して、情報の受け渡しができました!! ありがとうございます!!動作原理はいまいち分かってませんが…

その他の回答 (1)

  • kana_m
  • ベストアンサー率40% (26/65)
回答No.1

ご質問の意図が汲み取れません。 常に動いているクラスっていうのがちょっとわかりません。 自前のリスナーか何かでしょうか。無限ループではないと思いますが・・ サーブレットコンテナがリクエストによって動き出すことは通常ありません。 画面からのリクエストによって動き出すのは、ほとんどの場合スレッドですね。

arekore09
質問者

お礼

回答ありがとうございます。 分かりずらくてすいません。補足します! 例えば、クラス、StartUp.javaを作成するとします。このクラスは、サーバにおいた時に最初に動きだすプログラムです。さらに数時間に一度処理を行うように実装されています。 一定間隔で常に動くようになっています。 しかし、画面からのリクエストによって、このクラスの処理内容を変えたいと思っています。 画面からリクエストがあったという情報をStartUp.javaに渡すのに、良い方法はないでしょうか?

関連するQ&A