Servletの作成
これでやっと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.parseIntはgetParameterで取りだした値が文字列であるため、それを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名を指定します。


