SHOEISHA iD

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

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

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

GlassFishからアプローチするJava

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

Servletって何?


Servletを実行する

 Servletを実行するにはアプリケーションサーバを起動する必要があります。NetBeansの場合、HTMLかServletクラスを右クリックし[ファイルを実行]を選択するとアプリケーションサーバが起動します。今回は最初HTMLからServletを呼び出す作りになっているため図16のようにHTMLで実行してください。図17はNetBeansの[出力]タブです。GlassFishが起動されたり、ClassLoaderが呼び出されていることが分かります。図18がServletを呼び出すための画面です。

図16.アプリケーションサーバの起動の仕方
図16.アプリケーションサーバの起動の仕方
図17.NetBeansの出力タブ
図17.NetBeansの出力タブ
図18.自動的に起動されたブラウザ
図18.自動的に起動されたブラウザ

 図18の画面のテキストフィールドに100と入力して[実行]ボタンをクリックします(図19)。その結果画面が図20です。次に別ブラウザを立ち上げます。URLにhttp://localhost:8080/ServletThreadsTest/AddNumber.htmlと入力すると、最初起動したときと同じ画面(図21)が表示されます。テキストフィールドに200と入力し[実行]ボタンをクリックした結果の画面が図22です。合計が300となっています。この時点で入力した人は驚いてしまいます。次に最初の画面に戻り300と入力します(図23)。図24が結果画面です。入力した人は400になると思っていたはずですが600と表示されています。これは先述したとおり、両者が同じメモリを共有しているために起きます。これ以降の図では同じブラウザ内でタブを切り替えて操作していますが、実際には別ブラウザでの実行をお願いします。

図19.テキストフィールドに値を入力して実行
図19.テキストフィールドに値を入力して実行
図20.Servletからの応答結果
図20.Servletからの応答結果
図21.別ブラウザでURLを指定し初期画面を表示後、値を入力し実行
図21.別ブラウザでURLを指定し初期画面を表示後、値を入力し実行
図22.別ブラウザでServletからの応答結果
図22.別ブラウザでServletからの応答結果
図23.最初の画面に戻り値を入力し実行
図23.最初の画面に戻り値を入力し実行
図24.最初の画面での2回目の応答結果
図24.最初の画面での2回目の応答結果

 どのようにすればクライアント毎の値を保持できるかは次回のJSPを含めたWebアプリケーションの作り方で説明します。スレッドが値を保持できないことは悪いことではなく、意図して設計されていることに注意してください。冒頭の説明では、Servletにリクエストが届くたびにスレッドが生成されるようなことを書きましたが、実際にはスレッドプールと呼ばれる、あらかじめ生成されたスレッド群の中から、クライアントの要求に応えるスレッドをあてがう作りになっています。この場合、スレッドに値を保持しているとかえって面倒になることを想像することはたやすいでしょう。無色透明であるからこそ、スレッドをプールしておくことが可能になるのです。プーリングという考え方はJavaに慣れるにつれよく出てきます。効果的に使用すると非常に便利なものです。

 スレッドがメモリを共有化する問題を回避するために、ServletがSingleThreadModelを実装すること薦めているサイトや書籍がありますが、根本的な問題解決にはならず、Servlet 2.4からはdeprecateになったことを考えると使用すべきではありません。

次のページ
Servletのライフサイクルについて

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

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/4748 2010/02/12 11:06

イベント

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

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

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

メールバックナンバー