■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2007年10月28日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.076

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.Tomcatのアプリケーション開発
========================================================

では、今回はJSPのお話をしましょう。


JSPの正式な名称は「JavaServer Pages」で、サーバー側で実行
されるJavaのプログラムの一種です。
Javaのプログラムといいながら、Webページの出力のために特化
された仕様なので、ほとんどの部分は通常のWebページ(HTMLで
書かれたページ)と同じようなコードで書かれます。
いわば、HTMLのコードの中に部分的にJava独自のコードが埋め
込まれたような形のプログラミング・スタイルになっています。
ここでJava独自のコードというのは、これまでに出てきた通常の
Javaのプログラミングのコードだけではありません。HTMLのタグ
以外にJSPが独自に用意しているタグも含みます。


では、手始めに、ごく簡単なJSPプログラムを作ってみましょう。

Eclipseのパッケージ・エクスプローラーの中のJStudy2を右クリッ
クし、「新規」→「ファイル」を選択し、「ファイル名」に
date.jsp
と入力して、「終了」ボタンをクリックしましょう。

date.jspのエディターが開いたら、下記のソース・コードを入力
してください。

--------------------------------------------------------
<HTML>
<HEAD>
<TITLE>JSPのテストのページ</TITLE>
</HEAD>
<BODY bgcolor="#77ffff" text="#fa5a00">
<H1>vol.076 [java.util.Date()を使って日時を表示する。]</H1>
現在の日時は、
<%= new java.util.Date() %>
です。
</BODY>
</HTML>
--------------------------------------------------------

編集が終わったら保管し、EclipseからTomcatを起動(Eclipseの
メニュー・バーから「Tomcat」→「Tomcat起動」を選択)してお
きましょう。

Webブラウザーに下記URLを入力することによって、このJSPを実行
します。

http://localhost:8080/JStudy2/date.jsp

そうすると、Webブラウザーに下記のようなページが出力されますね。

--------------------------------------------------------
vol.076 [java.util.Date()を使って日時を表示する。]
現在の日時は、 Sun Oct 28 22:56:27 JST 2007 です。
--------------------------------------------------------

ただし、「現在の日時は、」の右側には、このJSPを実行した時点の
日にちと時刻が表示されますので、皆さんが実行した時点では上と
同じではないです。
ちなみに、上記の「Sun」はSundayの略で、「Oct」はOctoberの略、
JSTはJapan Standard Timeの略であることはおわかりのことと思い
ます。
(なお、「現在の日時は、・・・・です。」が一行におさまっていて、
ソース・コードのように改行されていないのは、<BR>のタグを入れて
いないからです。HTMLでは、ソース・コード上で改行されていれば
Webブラウザー上でも改行されるというわけではなく、改行したい位置
には<BR>などの改行用のタグを入れて明示しておく必要があるのです。)

このJSPのソース・コードは、最初に呼び出されたときに、Webコンテ
ナー(ここではTomcatがWebコンテナーである。Webコンテナーのうち、
特にJSPを動かすための部分をJSPコンテナーと呼ぶことがある)によっ
てサーブレットに変換されます。この変換作業を「ページ・コンパイル」
と呼ぶことがあります。
変換されたサーブレットはコンパイルされてロード(メモリー上に配置
されて実行可能な状態になる)されます。
なお、ページ・コンパイルやコンパイルは最初に1回行われるだけです。
1回コンパイルされれば以後はそれがずっと使い続けられることになりま
す。ただし、ソース・コードが変更された場合は、また最初に1回ページ・
コンパイルやコンパイルがやり直されることになります。
また、一度ロードされてしまえば、あとは呼び出されるたびに(プロセス
ではなく)スレッドとして実行されることは通常のサーブレットと同じ
です。

ところで、文字コードの変換はどうなっているのかというと、皆さんの
環境(Windows)のデフォルトでは、JSPがサーブレットに変換される際に
Shift_JISからUnicodeに変換され、WebブラウザーにWebページを返すと
きにはShift_JISに逆変換されます。
ただし、明示的に指定することによって、文字コードの変換の仕方を変え
ることもできますが、これらのコード変換の詳細は後述します。


上記のソース・コードの中で
--------------------------------------------------------
<%= new java.util.Date() %>
--------------------------------------------------------
のように<%と%>で囲んだ部分は、HTMLの文法にはない部分です。すなわち、
JSP独自の部分です。
ここにはJavaのコードを書いていくことができます。これによって、
今までサーブレットでやっていたような処理をJSPに行わせることが
できます。

ただし、上記の<%=に始まるコードは、その右側に指定したオブジェクト
の文字列表現を取り出してその場に表示するという特殊なコードで、
上記ではDateクラスのインスタンスが生成されていますから、Dateの
インスタンスの文字列表現が取り出されることになります。
この<%=に始まるコードの場合は、通常のJavaのコードと違い、最後に
セミコロン(;)をつけませんので、注意してください。
なお、文字列表現を取り出すためには、そのオブジェクトのtoString()
メソッドが(暗黙に)呼び出されることになります。

ところで、JSPはサーブレットとは違い、doPost()やdoGet()のようなメ
ソッドをここに書くのではなく、それに相当するメソッドはページ・コン
パイルのときに自動的に生成されます。
では、doPost()やdoGet()の引数のHttpServletRequestやHttpServletResponse
はどうなるのかというと、予めrequestとresponseという決まった変数名
で提供されるようになっています。

試しに、前回のTestServlet2のdoPostで行っていたような処理をJSPに
行わせてみましょう。

まず、先ほどのdate.jspと同様にしてtest2.jspというファイルをJStudy2下
に作り、下記のように編集しましょう。(requestという変数を使っている
ことに注目してください。)
--------------------------------------------------------
<HTML>
<HEAD>
<TITLE>JSPのテストのページ</TITLE>
</HEAD>
<BODY bgcolor="#77ffff" text="#fa5a00">
<H1>vol.076 [JSPのテスト・応答ページ]</H1>
<% String dob = request.getParameter("dayOfBirth");
String name = request.getParameter("name");   %>
<%= name + "さんの生年月日は" + dob.substring(0, 4) + "年" + dob.substring(4, 6) + "月" + dob.substring(6, 8) + "日です。"%>
</BODY>
</HTML>
--------------------------------------------------------

また、前回のtestform01.htmlと同じようにtestform02.htmlというファイル
を作り、下記の内容で編集してみましょう。(testform01.htmlとほとんど
同じ内容なのでtestform01.htmlをコピーしてから編集すればよい。)
--------------------------------------------------------
<HTML>
<HEAD>
<TITLE>サーブレットのdoPostのテストのページ</TITLE>
</HEAD>
<BODY bgcolor="#77ffff" text="#fa5a00">
<H1>vol.074 doPostのテスト・ページ</H1>
<FORM action="http://localhost:8080/JStudy2/test2.jsp" method="POST">
氏名を漢字で入力してください。
<BR>
<INPUT TYPE="text" NAME="name" VALUE="" SIZE=20>
<BR>
<BR>
生年月日をYYYYMMDDの形式で入力してください。
<BR>
<INPUT TYPE="text" NAME="dayOfBirth" VALUE="" SIZE=10>
<BR>
<BR>
<INPUT TYPE="submit" NAME="sumit" VALUE="送信">
</FORM>
</BODY>
</HTML>
--------------------------------------------------------

testform01.htmlと何が違うのかわかりますね。特に、FORMタグの中で
action属性にサーブレットではなくJSPが指定されていることを理解し
ていますね。

では、前回のtestform01.htmlのときと同様に、WebブラウザーにURL

http://localhost:8080/JStudy2/testform02.html

を入力してテストしてみてください。

前回のTestServlet2と同じような結果が返ってくることがわかりますね。



では、本格的なWebアプリケーションを作るときには、JSPのソース・コー
ドのうち<%と%>の間にどんどんと複雑なJavaのソース・コードを書いて
いけばいいのでしょうか。


実はそうではありません。JSPに複雑なJavaのコードを書いていくとWebデ
ザイナーが読みづらくなるので、必要最小限のJavaのコードしか書かない、
というのが現在の主流のやりかたなのです。それに、そもそもオブジェク
ト指向では、各オブジェクトの役割分担を明確にするというのが鉄則です
から、JSPやサーブレットになんでもやらせるというのは好ましくないの
です。

現在のWebアプリケーションは主に業務用のものですから、業務にかかわる
さまざまなオブジェクトの集まりとして表現できます。
これらのオブジェクトは、JavaのBeanとして記述することができますから、
業務の処理内容を各種のBeanとしてプログラミングしておき、それらをJSP
やサーブレットが必要に応じて呼び出して使えばよいのです。

そして、現在の主流のやりかたでは、まずtestform01.htmlのようなFORMタ
グを持ったWebページからサーブレットが呼び出され、サーブレットが処理
内容に応じて必要なBeanを呼び出すとともに処理結果を出力するために適切
なJSPを呼び出します。JSPはBeanの処理結果を受け取り、それをWebページ
の中に組み込んでWebブラウザーに返します。

では、次回からこの流れを具体的に説明していき、段々と本格的なアプリ
ケーション開発の話にはいっていきましょう。


今回はここまでにします。
何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。


(続く)



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2007 Future Lifestyle Inc. 不許無断複製