フォームによる送信と結果の表示
では、もう少しインタラクティブな操作を行ってみましょう。Webではフォームを送信して、その内容を取り出し処理するというのがサーバとの最も基本的なやり取りとなります。この「フォームの送信」について行ってみます。
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-31j">
<title>JSP SAMPLE</title>
</head>
<body>
<%
request.setCharacterEncoding("windows-31j");
String str = request.getParameter("text1");
str = str == null ? "(未送信)" : str;
out.println("※あなたが送信した内容<br>");
out.println("<font color=#FF0000>" + str + "</font>");
%>
<form method="post" action="./index.jsp">
<input type="text" name="text1" value="<%=str %>">
<input type="submit">
</form>
</body>
</html>
「index.jsp」をこのように書き換えて実行してみましょう。入力フィールドを1つ持ったフォームが表示されます。ここにテキストを記述して送信すると、送信したテキストがページに表示されます。送られたフォームのテキストを取り出して表示を作成していることが分かりますね。

フォームのタグ部分を見てみると、<form method="post" action="./index.jsp">というようになっていることが分かります。<form>タグでは、methodとactionの2つの属性を設定します。methodは送信の方法(POSTかGETか)を指定し、actionでは送信先を指定します。ここでは、この「index.jsp」自身にPOSTで送信をしてますので、method="post" action="./index.jsp"という形になります。
フォーム内には<input>タグを使って入力フィールドを用意していますが、ここで注意したいのは「必ずname属性で名前を指定しておく」という点です。これは、送信されたフォームの情報を取り出すのに必要となります。
では、送信されたフォームの情報はどのように取り出して処理しているのでしょうか。これは、<% %>タグ部分を見てみれば分かります。順に説明しましょう。
request.setCharacterEncoding("windows-31j");
まず、リクエスト(クライアントから送られてきた要求)の文字エンコーディングを設定します。日本語を利用する場合、エンコーディングをきちんと設定しておかないと文字化けの原因となります。「最初にリクエストのエンコーディングを指定する」のは日本語でリクエストを扱う上での基本と考えてください。
ここではrequestというオブジェクトのsetCharacterEncodingというメソッドを呼び出しています。このrequestは、outと同じ「暗黙オブジェクト」です。これはHttpServletRequestというクラスのインスタンスで、クライアントから送られた要求に関する各種の機能がまとめられています。
ここで使ったsetCharacterEncodingは、引数に指定したエンコーディングを設定する働きをします。これをきちんと行っていないと、次のリクエストから送信テキストを取り出す際に文字化けしてしまいます。
String str = request.getParameter("text1");
これが、送信された入力フィールドのテキストを取り出している部分です。暗黙オブジェクトのrequestにあるgetParameterというメソッドを使います。引数には、取り出すパラメータ(送信された情報)の名前をStringで指定します。
先に<input>タグでnameを指定していたのを思い出してください。あのnameが、getParameterで指定するパラメータ名なのです。
str = str == null ? "(未送信)" : str;
取り出したtext1パラメータがnullだった場合には"(未送信)"とテキストを設定します。ここでは、「index.jsp」から「index.jsp」にフォーム送信をしていますね。ということは、初めてこのページにアクセスしたときには、(まだ何もフォーム送信されていないので)getParameterの値はnullになってしまいます。そこで、nullだった場合には初期値を設定してあるのです。
out.println("※あなたが送信した内容<br>"); out.println("<font color=#FF0000>" + str + "</font>");
そして、取り出した値を使って、out.printlnで出力をしています。――以上でJSPを使った処理は終わり……のように思えますが、実はもう1箇所、残っています。どこだか分かりますか?
<input type="text" name="text1" value="<%=str %>">
この部分です。valueの値をよく見てみましょう。<%=str %>というものが設定されていますね。この<%= %>というタグは、そのタグ内に書かれたJavaコードの値を出力する働きをするJSPのタグなのです。<%=str %>は、すなわち変数strの値を書き出していたのです。
作成したWebアプリケーションの出力
さて、とりあえずJSPを使ってWeb開発を行う基本的な流れは大体分かったことと思いますが、実をいえばもう一つだけ重要なことが残っています。それは、「Webアプリケーションのデプロイ(公開)」です。
現在、WTP上で動作テストをしている分には問題なく動くのですが、WTPを終了してからTomcatを起動してWebブラウザからアクセスをするとどうなるでしょうか。おそらく、ページが見つからずアクセスできないはずです。WTPは、Tomcatの起動を操作して公開プロジェクトのWebContentが指定の場所に公開されるようにしてくれます。が、これはあくまで「WTPの機能」なのです。これで、実際にTomcatにプロジェクトの内容がデプロイされているわけではないのです。
Tomcatの場合、インストールされているディレクトリ内にある「webapps」というフォルダが、公開用フォルダとなっています。すなわち、ここにフォルダやファイルを入れておけば、それが公開されるわけです。ですから、プロジェクト内の「WebContent」フォルダをこの「webapps」に入れ、適当にフォルダ名を変更すれば、その名前の場所に公開することができます。
ただし、自分の環境で試すならこれでもいいのですが、外部のサーバ環境にアップして公開するような場合、フォルダやファイルを手作業でアップするというのはあまりスマートな方法とは言えません。もっと簡単で分かりやすい方法があるのです。それは「Web Archive(WAR)ファイル」と呼ばれるファイルの形でWebアプリケーションをまとめるやり方です。
WARファイルというのは、Webアプリケーションを1つの圧縮ファイルの形にまとめたものです。多くのサーブレットコンテナはWARによる公開に対応しています。Tomcatもそうで、このWARファイルを「webapps」フォルダにコピーするだけで、自動的にアーカイブファイルを展開しWebアプリケーションを公開するようになっています。
WARファイルは、WTPから簡単に作成することができます。プロジェクト・エクスプローラーで出力するプロジェクト(ここではmyweb)を選択し、[ファイル]-[エクスポート]メニューを選んでください。データを外部出力するための選択ダイアログが現れます。ここで、「Web」項目内になる「WARファイル」を選んで次に進んでください。

次の画面で、出力するWebモジュールと宛先(保存先)を指定します。Webモジュールでは、「myweb」が選択されているはずです。また宛先は、右側の[参照]ボタンをクリックし、保存先のフォルダを選択します。直接Tomcatに公開したければ、Tomcatの「webapps」フォルダを選んでおくとよいでしょう。
こうして作成したWARファイルを、そのままサーブレットコンテナの公開ディレクトリにコピーすればそのサーバで公開することができます。この先、多数のファイルを組み合わせたWebアプリケーションを開発するようになっても、WARファイルなら簡単で確実に公開できるでしょう。
サーバの終了
最後に、WTPから起動したサーバの終了について触れておきましょう。まぁ、WTPを終了すれば自動的にTomcatも終了するのですが、途中で終了したり再起動したいこともありますので、やり方だけは頭に入れておいた方が良いでしょう。
Tomcatを起動したとき、ウインドウ内の下部に「サーバー」というビューが現れたのに気づいたはずです。これが、現在用意されているサーバを管理するためのビューです(もし見当たらなければ、[ウインドウ]-[ビューの表示]-[その他]メニューを選び、現れたダイアログから「サーバー」を選ぶと開くことができます)。
現在、「Tomcat v5.5サーバー @localhost」という項目が表示され、その中に「myweb」という項目が見えるはずです。これが、現在利用可能なサーバ(Tomcat)と、そこで公開されているWebアプリケーションを示すものです。状況のところに「始動済み」とあれば、現在起動中であり、「停止」と表示されていれば起動していない状態であることを示します。

サーバの起動や停止は、このビューの右上にあるアイコンをクリックして操作することができます。ここには「サーバーを始動」「サーバーを再起動」「サーバーを停止」といったアイコンが用意されており、これらをクリックすればサーバを操作できます。
このサーバー・ビューには他にもいろいろと機能があり、公開中のプロジェクトの管理やデバッグモードでのサーバ起動などが行えるようになっていますが、とりあえず「サーバの起動と停止」についてだけ覚えておけば今は十分でしょう。
まとめ
以上、今回はWebアプリケーション開発のためのプロジェクト作成から、JSPファイルの作成、JSPを使ったごく簡単な処理の実際、そしてWebアプリケーションの公開とサーバの操作まで一通りを説明しました。とりあえず、JSPを使ったWebページを作って動かしてみるという目標は達成できたのではないかと思います。
今回のポイントは、「JSPの処理をどのようにして記述すればいいのか」という点です。<% %>という特殊なタグの使い方、out/requestといった暗黙オブジェクトの利用、それらについてしっかり理解しておきましょう。暗黙オブジェクトについては、その正体が何なのか、他に何ができるのかなどよく分からないことばかりかも知れません。今は「とりあえず、出てきたものだけ使えるようにしておけば十分」と考えてください。
JSPは、この暗黙オブジェクトに代表されるように「その正体は分からなくてよい。使い方だけ知っておけば十分」というものが結構あります。というより、実はJSPというものの存在自体が、「それが何なのか、本当の正体は知らなくていい」というものだったりするのですが……。いずれ、「サーブレット」というものについて説明を行うときになれば、今のもやもやとしたものは、すべて霧が晴れるようにすっきりと分かるようになります。しばらくの間は、「正体不明なJSPの使い方だけ覚えておけば十分」と考えておきましょう。

