SHOEISHA iD

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

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

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

GlassFishからアプローチするJava

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

Servletって何?


Servletの作成

 これでやっとServletを記述する準備が整いました。ブラウザで数値を入力し、それが前回までに入力した値に加算されるという非常に簡単なプログラムです。ただし、フィールド変数として値を持った場合、他のクライアント(他のブラウザ)と同時に同じサーブレットにアクセスするとメモリが共有され、期待した値が得られないことを確認します。

図14.メモリを奪い合うスレッドをテストするためのServlet
図14.メモリを奪い合うスレッドをテストするためのServlet

 フィールド変数(どのメソッドにも属さない変数。staticを指定すればクラス変数、指定しなければインスタンス変数と呼ばれる)として合計値を格納するtotalという変数を定義します(図14の1)。次にブラウザから入力された値を取り出し、totalに足しこむ処理が図14の2です。詳しく説明すると、request.getParameter("number")processRequestメソッドの引数HttpServletRequestです。このクラスはブラウザから送られてくるリクエストをクラスとして表現したものです(レスポンスをクラス化したものがHttpServletResponseです)。難しい言い方に聞こえますが、クラスは変数と変数を扱うメソッドから構成されています。この場合、リクエストが変数、リクエストを扱うメソッドがgetParameterと考えれば分かりやすいでしょう(HttpServletRequestにはたくさんのメソッドを持っています。APIで確認してください)。

 getParameterの引数の文字列numberはHTMLのinputタグのname属性を指します。つまり、リクエストに含まれているnameという箱に入れられた値を取り出すメソッドがgetParameterです。Interger.parseIntgetParameterで取りだした値が文字列であるため、それをint型に変換するためのIntegerクラスのメソッドです。試しにブラウザで値を入力せずに[実行]ボタンを押すと例外が発生し処理が続行できなくなります(例外自体の概念は難しくないのですが、その扱いには注意が必要です。例外をどのように扱うべきかはソフトウェアアーキテクトが決定することのひとつです。例外は当連載の後の回で説明します)。リクエストから値を取り出しint型に変換したものをローカル変数addNumberに代入します。次の行でインスタンス変数totalに加算しています。

 図14のtry節の中のout.printlnはブラウザに処理結果を返すためにHTMLを生成する処理です。3がブラウザのタイトル、タブブラウザの場合、タブ名に表示する文字列です。4が2で処理したtotalを表示するためのコードです。

 Servletを呼び出すためにはHTMLやJSPを作成する必要がありますが、JSPは次回で詳しく説明します。図15がServletを呼び出すAddNumber.htmlというHTMLファイルです。formタグのaction属性には図12で指定したServlet名を指定します。

図15.Servletを呼び出すためのHTML
図15.Servletを呼び出すためのHTML

次のページ

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー