JSP 組み込みオブジェクト スコープ
アプリケーション: すべてのアプリケーションで有効です。つまり、Web サイトが実行されている限り、このスコープは有効です。これは、次のことを指します。プログラムの作業プロセス。
session: 現在のセッションで有効、つまりブラウザからサーバーにアクセスするところから始まり、ユーザーのアクセスプロセス、つまりセッションの開始から終了までを指します
request: 現在のセッション内 リクエスト内で有効。複数のサーブレット間での情報共有を担当します。つまり、リクエストに情報を入力します。リクエストの段階全体で有効です。つまり、ユーザーはこのデータを取得できます。アクセスのこの段階では
page : 現在のページで有効、つまり JSP ページで有効です。
まず最初に、いわゆる「スコープ」とは「情報共有の範囲」、つまり、ある情報が有効な範囲であることを宣言しなければなりません。
Web インタラクションの最も基本的な単位は HTTP リクエストです。各ユーザーが Web サイトにアクセスしてから Web サイトから退出するまでのプロセスを HTTP セッションと呼び、サーバーの運用中に複数のユーザーがアクセスすることになります。これが複数の HTTP セッションです。範囲については以下で説明します。
application: サーバーが起動してから停止するまでの期間。
session: HTTP セッションの開始から終了までの期間。
request: HTTP リクエストの開始から終了までの期間。
page: 現在のページが開いてから閉じるまでの時間。
1. アプリケーション スコープ
アプリケーション スコープは、サーバーの起動から停止までの全期間であり、このスコープに設定された情報はすべてのアプリケーションで利用できます。アプリケーション スコープでの情報転送は ServletContext を通じて実装され、ServletContext が提供する主なメソッドは次のとおりです。
Object getAttribute (文字列名): アプリケーションから情報を取得します。
void setAttribute(文字列名, オブジェクト値): アプリケーションスコープに情報を設定します。
2. セッション スコープ
セッション スコープは、同じブラウザが複数回サーバーにアクセスし、その複数回のアクセスの間で情報を転送することをより理解しやすくするための実施形態です。セッションスコープの。 Session は HttpSession インターフェイスを通じて実装され、提供される主なメソッドは次のとおりです。
Object HttpSession.getAttribute(文字列名): セッションから情報を取得します。
void HttpSession.setAttribute(文字列名, オブジェクト値): 情報をセッションに保存します。
HttpSession HttpServletRequest.getSession(): 現在のリクエストが存在するセッション オブジェクトを取得します。
セッションの開始時間は比較的判断しやすく、ブラウザが最初のHTTPリクエストを送信した時点でセッションが開始されると考えられます。ただし、ブラウザを閉じるとサーバーに通知されないため終了時刻の判断が難しく、クライアントが一定時間応答しない場合はセッションが終了したものとみなす、という方法でしか判断できません。終わる。 Tomcat のデフォルト値は 120 分ですが、この値は HttpSession の setMaxInactiveInterval(int interval) メソッドを通じて設定することもできます。ユーザーが「ログアウト」ボタンをクリックしたときなど、セッションをアクティブに終了したい場合は、HttpSession のvalidate() 現在のセッションを強制的に終了するために使用されるメソッド。
3. リクエストの範囲
HTTP リクエストの処理には複数のサーブレットの連携が必要な場合があり、何らかの方法でこれらのサーブレット間で情報を転送できます。リクエストの完了後、情報は無効になります。
サーブレット間の情報共有は、HttpServletRequest インターフェイスの 2 つのメソッドを通じて実現されます。
void setAttribute(String name, Object value): name を名前として、オブジェクト値をリクエスト スコープに保存します。
Object getAttribute(String name): リクエストスコープから指定された名前の情報を取得します。
JSP の doGet() および doPost() メソッドの最初のパラメータは HttpServletRequest オブジェクトです。情報を転送するには、このオブジェクトの setAttribute() メソッドを使用します。
では、情報を設定した後、その情報を他のサーブレットにどのように渡すのでしょうか?これには、RequestDispatcher インターフェースの forward() メソッドを使用する必要があり、これを通じてリクエストが他のサーブレットに転送されます。
RequestDispatcher ServletContext.getRequestDispatcher(String path): 転送するディスパッチャーを取得します。 path は転送先のサーブレットです。
void RequestDispatcher.forward(ServletRequest request, ServletResponse response): リクエストとレスポンスを転送します。
したがって、現在のサーブレットで setAttribute() メソッドを使用して対応する属性を設定し、次に forward() メソッドを使用してジャンプし、最後にジャンプしたサーブレットで getAttribute() メソッドを使用するだけで済みます。情報伝達が実現できます。
PHP プログラマーは、この段落をよく理解していない可能性があります。PHP には転送の概念がなく、リクエストは 1 つの PHP ファイルによってのみ処理できるため、PHP にはリクエスト スコープの概念がありません。サーブレットは異なります。リクエストはアプリケーション内で任意に転送できるため、リクエスト スコープは、異なるサーブレット間で情報を転送するために使用されます。
2 つの点に注意してください:
転送はリダイレクトではなく、転送は Web アプリケーション内で実行されます。 PHP はリダイレクトをサポートしますが、転送はサポートしません。
転送はブラウザに対して透過的です。つまり、サーバー上で転送方法に関係なく、元のサーブレットのアドレスがブラウザのアドレス バーに表示されます。リダイレクトされたブラウザのアドレスが変わります。
4. ページ スコープ
ページ オブジェクトのスコープは、ユーザーが要求した現在のページに制限されます。ページ オブジェクトへの参照は、応答がクライアントに返されます。解放されるか、要求が他の場所に転送された後に解放されます。ページ オブジェクトへの参照は通常、pageContext オブジェクトに保存されます。
上記の導入の範囲はますます小さくなっています。リクエストとページのライフサイクルは短命です。両者の違いは、リクエストには複数のページ (インクルード、転送、フィルター) を含めることができるということです。
以上がjsp の 4 つの主要なスコープとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。