SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

GlassFishからアプローチするJava

GlassFishからアプローチするJava~入門編~
第3回「Webアプリケーションの作成 JSPの基礎を学ぶ」

JSPはWebアプリケーションのUIの基本

スコープについて

 当連載の説明でスコープという言葉を使用します。文字どおり「範囲」を指していますが、それはWebコンポーネントからアクセス可能な変数の範囲を指しています。意外と間違った指定の仕方を見かけますので、JSPの本題に入る前に説明します。スコープには表1の4種類が存在します。

表1 スコープ一覧
スコープ名 JSPの暗黙オブジェクト
application application ServletContext
session session HttpSession
request request HttpServletRequest
page pageContext PageContext

 以下で、表内に記載されているスコープの概要を説明します。

application

 型がServletContextのためよく誤解されるスコープです。あたかも1つのサーブレット内を指すように考えてしまいがちですが、型で判断するよりスコープ名称で判断すべきです。しかし、アプリケーションという非常に一般的な言葉が、JavaのWebアプリケーションの場合、どの範囲を指すのかが理解できなければ、applicationスコープの理解もできません。結論を言うと、コンテキストルート配下で構成されるアプリケーションを指します。Tomcatをご存知の方にはwebapps配下に配置するwarファイルを指すと言った方が分かりやすいでしょう。「Java EE 5 Tutorial」のp83のWebモジュール構造に従えば、Assembly Rootがコンテキストに相当します。つまりAssembly Root配下にあるWebコンポーネントすべてからアクセス可能な範囲をapplicationスコープと呼びます。

session

 セッションという言葉は、クライアントとサーバの一連のやり取りを指します。セッション中、他のクライアント同士の変数やオブジェクトが見えてしまうと何かと不都合です。セッションの間、クライアント同士を隔離する範囲がsessionスコープです。第2回のServletの説明で、Servletにフィールド変数を定義すると、スレッド同士がその変数を奪い合い、期待した結果を得られない状況について解説しました。実はセッションの中に変数を格納すると、このような状況を回避できます。ただし、何も考えずにすべてのオブジェクトをセッションに入れると非常に重いアプリケーションになるため、他のスコープに格納しても大丈夫か検討する必要があります。

request

 リクエストはクライアントからWebコンポーネントに要求が送られる間のみ保持されるスコープです。このスコープもクライアント同士を隔離しますが、1回のリクエスト内で保持されるのがrequestスコープです。

page

 pageとは名前どおりJSP pageを指します。先述のとおり、JSPを記述するということは第2回のServletの説明のprocessRequestメソッドに相当するメソッドを記述するのと同義です。JSPで記述しているものはServletのメソッドを記述していることになるため、そこで定義したものはローカル変数となります。つまり、JSP内部のみからアクセスできる範囲がpageスコープです。

 JSPの暗黙オブジェクトとはJSPにimportすることなしに、後述するスクリプトレットの中で使用できるオブジェクトです。上記4つのオブジェクトに加え、config、exception、out、page、responseがあります。

次のページ
JSPの構造

この記事は参考になりましたか?

GlassFishからアプローチするJava連載記事一覧

もっと読む

この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4775 2010/02/17 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー