No.3ベストアンサー
- 回答日時:
サーブレットをスレッドセーフを考慮してコーディングする事は非常に重要です。
JSPもサーブレットなので同様。意識していないと、テスト時に一人でテストするぶんには問題なくても、複数の人で一斉テストした場合に「別人問題」が起こったりします。#1の方が示している問題です。私も経験しちゃいました。
サーブレットのインスタンスは1つしかありません。(これ重要)
ですから、リクエスト毎に変化するオブジェクトをインスタンス変数なんかに定義してあると、別人問題が起こります。
JSPの場合も、<%! %>タグで定義したものはサーブレットのインスタンス変数となるので注意です。
No.2
- 回答日時:
1.JSPは最終的にはサーブレットに翻訳されて実行されます。
よってJSPだから自動的にスレッドセーフっていうのはNOが答えだと。
2.
考慮する必要があります。
ただしそのBeanがフィールドをもっていないのであれば必要ないです。(そんなことありえるのか!って感じですけどね)
No.1
- 回答日時:
私もこのご質問に回答できるほど十分なスキルは持ち合わせていないのですが。
。。ツッコミがあること覚悟で書いてみます。(汗)
まず「スレッドセーフ」の意味としては、
「マルチスレッド環境下で正しく動作すること」ですよね。
http://www.atmarkit.co.jp/icd/root/10/86966010.h …
1 JSPの場合はスレッドセーフって関係ないのですか?
JSPの場合は、ユーザーからのリクエストごとに個々のスレッドが発生すると記憶しています。
ですから、そこに記述するスクリプトに対してスレッドセーフを考慮する必要は無いと思います。
しかし、JSPの中で使用するクラスについてはスレッドセーフを考慮する必要があります。
というか、スレッドセーフは個々のクラスについて考慮すべきことではないかと思います。
スレッドセーフについての参考URL
http://www.tetras.co.jp/yada/j_java_thrd_r.htm
http://www-6.ibm.com/jp/developerworks/java/0404 …
2 Beanを使った場合そのBeanはスレッドセーフを考慮する必要があるのですか?
スレッドセーフは個々のクラスについて考慮すべきことだと思いますから「必要あり」です。
でも、その本に書かれていた「スレッドセーフを考慮せよ」というのは、もっと比較的簡単な話のような気がします。
つまり、非常に大雑把に言い換えると、
「変数のスコープに注意」とか、
「サーブレットの場合は、複数のユーザーからほぼ同時にリクエストが送られることがあるからフィールド変数を多用しないように」
という程度なんではないかなと思いました。
例えば、こんなサーブレットで。。。
public class ServletTest extends HttpServlet {
String p1 = "";
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
String p1 = request.getParameter("POST_PARAMETER1");
String reault1 = getResult(p1);
String reault2 = getResult(p1);
out.println("POST_PARAMETER1 = " + p1);
out.println("RESULT1 = " + result1);
out.println("RESULT2 = " + result2);
out.close();
}
private String getResult(String param) {
String result = new String();
....(引数paramを使う何か時間のかかる処理)
return result;
}
}
「p1」のようにクラス全体からアクセスできるフィールド変数は使っちゃダメですよね。
フィールド変数はマルチスレッド環境下で共有されますから、
ユーザーAからのリクエストを処理した直後にユーザーBのリクエストを受けたら、
ユーザーAのgetResultの処理中にp1の値がユーザーBからのリクエストの値に書き換えられてしまう可能性があるわけで、そうなると「result1」と「result2」の値が異なってしまう可能性がありますよね。
そのサーブレットの本では、そういうことが言いたかったんじゃないかと思う次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本語 必要とする場合 5 2023/08/14 18:56
- 工学 送配線における電圧降下の計算について教えてください。添付の図にて、A点の電圧降下を求める場合、Iaと 2 2022/10/26 18:25
- 格安スマホ・SIMフリースマホ 電話番号の移行 7 2022/05/16 15:46
- 物理学 写真の解説の赤枠部分についてですが、 なぜ、(-vk-1)と-が付くのかがわからないです。 解説の③ 1 2023/02/10 23:54
- Java 問題作成のWebアプリの作り方を教えてください 1 2022/11/26 22:01
- その他(悩み相談・人生相談) どうして日本って何でもかんでも先輩後輩、年功序列、実力主義、身分地位といった上下関係を付けたがるの? 26 2023/06/17 11:10
- ゴルフ ゴルフのマッチングスコアカード方式について 3 2023/01/15 18:24
- 計算機科学 最適化方 1 2023/01/06 14:30
- 財務・会計・経理 賃貸物件の退去時原状回復について。 7 2022/03/24 12:58
- その他(ニュース・社会制度・災害) 日本学術会議「性差研究に基づく科学技術・イノベーションの推進」で 1 2022/11/20 18:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
javaのクラスの作り方、エラー...
-
複数の変数を宣言する時、同時...
-
C#「オブジェクト参照が必要で...
-
変数の参照でエラーが出てしま...
-
生成したインスタンスを削除す...
-
String a = "a"; と String b =...
-
SQLを連続発行する時の正しい(?...
-
javaのインスタンス変数とクラ...
-
PHPExcel使用で2枚目のシートを...
-
フォームの存在をチェックする方法
-
C#でオブジェクトの有無を取得する
-
staticメソッドにするかどうか...
-
C#の構造体の開放のしかた
-
Servletにおけるスレッド間での...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報