[解決済み] サーブレットの各インスタンスとサーブレットの各スレッドの違い?重複
2023-06-11 11:38:28
質問
サーブレットクラスは複数存在するのでしょうか?私は、サーブレットの各インスタンスと聞いています。 誰かこのことについて詳しく説明できますか?
どのように解決するのですか?
サーブレットコンテナが起動するとき、それは
-
は読みます
web.xml
; - はクラスパスで宣言されたServletを見つけます。
- 各Servletをロードし、インスタンス化する を一度だけ .
ざっくりと、こんな感じ。
String urlPattern = parseWebXmlAndRetrieveServletUrlPattern();
String servletClass = parseWebXmlAndRetrieveServletClass();
HttpServlet servlet = (HttpServlet) Class.forName(servletClass).newInstance();
servlet.init();
servlets.put(urlPattern, servlet); // Similar to a map interface.
これらのサーブレットはメモリに保存され、リクエストの URL がサーブレットに関連付けられた
url-pattern
. そして、サーブレットコンテナは、次のようなコードを実行します。
for (Entry<String, HttpServlet> entry : servlets.entrySet()) {
String urlPattern = entry.getKey();
HttpServlet servlet = entry.getValue();
if (request.getRequestURL().matches(urlPattern)) {
servlet.service(request, response);
break;
}
}
この
GenericServlet#service()
のいずれかを決定します。
doGet()
,
doPost()
などをベースに呼び出すと
HttpServletRequest#getMethod()
.
サーブレットコンテナは 同じサーブレットインスタンス を再利用します。言い換えれば、サーブレットは すべてのリクエスト . そのため、サーブレットコードをスレッドセーフに書くことは非常に重要です。 ではなく は、リクエストやセッションのスコープ付きデータをサーブレットインスタンス変数としてではなく、メソッドのローカル変数として代入します。例えば
public class MyServlet extends HttpServlet {
private Object thisIsNOTThreadSafe;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object thisIsThreadSafe;
thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
}
}
関連
-
java send https request prompt java.security.cert.について。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java の switch case 文で必要な定数式の問題の解決法
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
Jsoup-Crawlingの動作
-
アノテーション「@Retention」の役割
-
コンストラクタDate()が未定義である問題
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
htmlとwordの相互変換の実装(画像あり)
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
-
[解決済み] サーブレットにおけるdoGetとdoPost