平成22年春午後1問1(httpservlet)

初心者さん  
(No.1)
webアプリなどのコーディング系は素人なので馬鹿げた質問であることあらかじめご容赦ください。

平成22年春午後1問1(httpservlet)の設問2(下線2)について
他人の勤務時間集計表がダウンロードされたということについて
HttpServletクラスを継承したPDFDownloaderクラスのインスタンスで
pdfファイル(tempPDF)をインスタンス変数としているからという理解をしています。
多分HttpServletクラスは一度呼び出されてたら、再利用というか共用され、
メソッドだけはローカル変数として個々に割り当てられるだろうな、という
個人のイメージでおりますが呼び出される度にインスタンスが生成されないことが
理解できません。

プログラミングに対する苦手意識から逃げてきた人生のため大変お恥ずかしいですが
何卒宜しくお願い致します。
なぜならば同じインスタンスをたくさんのWEBブラウザからのアクセスが
共用することになってしまい、一斉にアクセスした場合、
それをWEBサーバはどのように管理しているのかがよくわからないためです。
アクセスする度にクラスがNewされるのであればイメージがつくのですが、
そんな感じではないため、複数人の場合のWEBサーバ側での管理方法というかなんといえば
よいのかわかりませんが、しっくりきません。
私がプログラミングは超ど素人なため、愚問であることは理解しています。
そんな私めにあたたかい心で分かりやすく思えていただけないでしょうか?
2024.08.25 16:26
さばいばーさん 
(No.2)
私もプログラミングは初心者ですが、個人的に以下のような形で理解しました。

・インスタンス変数は、何人も同時にアクセスした場合、最後に更新した人の値で上書きされる

・同時にアクセスした場合のメソッド(処理)の順番は、サーバが自動的に判断するので、アクセス順とは限らない

例として、設問のdogetメソッドが呼び出された場合を以下に示します。

◾️Aさんが一人で呼び出した場合

1. インスタンス変数のtempPDFがAさんのIDに上書きされる
  tempPDF の値  =  ローカルパス&AさんID.pdf

2.そのままmakePDFが処理される
  ローカル変数のtempUserID  と  インスタンス変数  tempPDF  の値を使用し、
  AさんのIDのPDFが  tempPDF  に格納される

◾️AさんとBさんが同時にdogetメソッドを呼び出した場合

1. インスタンス変数のtempPDFがAさんのIDに上書きされる
  tempPDF の値  =  ローカルパス&AさんID.pdf

2. インスタンス変数のtempPDFがBさんのIDに上書きされる
  tempPDF の値  =  ローカルパス&BさんID.pdf

3.BさんのmakePDFが処理される
  ローカル変数のtempUserID(BさんID)  と  インスタンス変数  tempPDF  の値を使用し、
  BさんのIDのPDFが  tempPDF(ローカルパス&BさんID.pdf)  に格納される

4.AさんのmakePDFが処理される
  ローカル変数のtempUserID(AさんID)  と  インスタンス変数  tempPDF  の値を使用し、
  AさんのIDのPDFが  tempPDF(ローカルパス&BさんID.pdf)  に格納される  ※ここで異常が発生している

5.BさんのURLにアクセスするとAさんのPDFが表示される


このように同時に呼び出した場合は、1〜5の順番がどうなるかはわかりません。
インスタンス変数は、処理するタイミングで呼び出すので途中で変更されると、その値を呼び出してしまいます。

インスタンス変数ではなく、ローカル変数ですと、dogetを呼び出した時点で固定されるので、
AさんとBさんが同時に呼び出しても問題ありません。
(Aさん用doget、Bさん用dogetがそれぞれ動くイメージ)
2024.09.01 10:19

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop