初めてのサーブレット

本章のプログラムを御覧の際には、Tomcatが必要です。
こちらからダウンロード出来ます。

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

サーブレットの構成

サーブレットは、HttpServletクラスを継承して作ります。
サーブレットの基本構成を下記に示します。
アプレットに似てますね。

サーブレットの基本構造

package パッケージ名
import
public class クラス名 extends HttpServlet{
        クラス変数の宣言
        public void init(){
                初期化処理
        }
        public void doPost(・・・){
        }
        public void doGet(・・・){
        }
}

HTTPの要求に対する応答メソッド

doGetメソッドは、HTTPのGETリクエストに対し、呼び出されます。
又、doPostメソッドは、POSTリクエストに対して呼び出されます。
詳細は後述しますが、クライアントがURLを指定してサーブレットを要求するとdoGetメソッドが呼び出され、HTMLのフォームからPOST指定で要求するとdoPostメソッドが呼び出されます。
何れも、2つの引数を取ります。

HttpServletRequest:クライアントからのリクエスト情報
HttpServletResponse:サーバ側からの応答情報

コンテントタイプの設定

クライアントに応答する形式を設定します。
HTMLを生成して出力する時は、

res.setContentType("text/html");

と書きます。
此の文は、次のHTMLの送信より先に書かなければなりません。
ブラウザに表示したい内容が日本語の場合には、此の侭では文字化けして終います。
此は、サーブレットのデフォルトの文字コードが「ISO8859-1」と言う規格に有るのに対し、Windowsの文字コードが「シフトJIS」であり両者が異なる為です。
文字化けを防ぐ為に「setContentType」では、漢字コードの指定をします。

res.setContentType("text/html charset = shift_jis");

HTMLの生成

初めに、「今晩は/エーステレビニュースをお伝えします」と言う文字をブラウザに表示させるHTMLファイルを作って実験しておきましょう。
HelloServlet2.htmlを前節にして作成した、

C:\javasrc\yoyaku

フォルダの直下に置いて下さい。
Tomcat、ブラウザの順に起動してアドレスに、

http://localhost:8080/yoyaku/HelloServlet2.html

と指定します。
正しく表示できたのでしょうか?
サーブレットは、此の様なHTMLを生成して、其れをクライアントに送信するプログラムなのです。
サーバからクライアントに文字列を送るには、第8章で学んだストリームを使います。
HttpServletResponseクラスのgetWriterメソッドを使うと、PrintWriterクラスの出力ストリームを確立出来ます。

PrintWriter out = res.getWriter();

HTMLはテキストですから、1行作成する度にprintlnメソッドで送信します。
MS-DOSの画面に表示した時と全く同様に、文字列をクライアントに送信出来ます。
上記で説明したHTMLファイルをJavaプログラム中に書いた場合は、次の様になります。

out.println("<html><head>"); //HTMLの送信
out.println("<title>Hello Servlet<title>");
out.println("</head><body>");
out.println("今晩は<BR>");
out.println("エーステレビニュースをお伝えします");
out.println("</body></html>");

HTTPヘッダに画像が有る事を指定

サーブレットで画像データをクライアントに送信する時は、「setContentType」を「image」とします。

res.setContentType("image/gif");

バイナリファイルの送信

画像データをクライアントに送信するには、第8章で学んだバイトストリームを使います。
HttpServletResponseクラスのgetOutputStreamメソッドを使うと、OutputStreamクラスの出力ストリームを確立出来ます。

OutputStream out = res.getOutputStream();

ファイルから読み込む方は、FileInputStreamクラスを使う事にしましょう。
読み込むファイル名の指定は絶対パスで行います。
「\」は、エスケープシーケンスの記号なので、「\\」とします。

ソース ダウンロード
HelloServlet2.java HelloServlet02.zip
GIFServlet.java

戻る