サーブレットのハローワールド

今度はサーブレットを開発していきます。 TomcatでJSPが開発・使用できるようになった段階から、 サーブレットを開発できるようにするには、前準備が少し必要です。
JSPの開発をするには、テキストエディタ以外何も必要ないのですが、 サーブレットは純然たるJavaのプログラムですから、 当然のことながらJ2SEのjavacなどのJavaコンパイラが必要です。 また、サーブレットのAPIを提供するクラスライブラリも入手して、 環境変数CLASSPATHに通しておく必要があります。 これはTomcatでは、$CATALINA_HOME/common/libに置いてある 「servlet-api.jar」にCLASSPATHを通せばOKです。


サーブレットのコーディング

以下に固定のHTML文書を出力するだけの役を果たす、 最も基本的なサーブレットのプログラム(クラス定義)を紹介します。

/*
 * HelloServlet.java
 * 2002/01/02
 */
package hello;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        // 日本語のHTML文書を出力する時必要
        response.setContentType("text/html;charset=euc-jp");
        PrintWriter out = response.getWriter();
        out.println("<html><body bgcolor=\"white\">");
        out.println("<h2>こんにちは</h2>");
        out.println("これはサーブレットのサンプルです。 <br>");
        out.println("</body></html>");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        doPost(request, response);
    }
}

サーブレットをコンパイルしてできたクラス (この例では HelloServlet.class) は、 Tomcatのアプリケーションディレクトリを「app」としますと $CATALINA_HOME/webapps/app/WEB-INF/classes/hello に置きます。 「hello」の部分はサーブレットクラスのパッケージ修飾に正確に対応するように、 適宜変更する必要があります。
なお、この短いプログラムで最も注意が必要な点は、 HttpServletResponse.setContentType()は、getWriter()より先に実行しないといけないという点です。 getWriter()の時点で応答ヘッダが固定されるので、逆にしてはいけません。
そしてもうひとつ、 サーブレットなどのJavaクラスの配備位置を指定するテキストファイル、「web.xml」 を書く必要があります。これは、最初から作られている 「demo」アプリケーションディレクトリ内にある「web.xml」を参考に、 $CATALINA_HOME/webapps/app/WEB-INF/web.xml となる位置に置きます。 ここでURLとロードされるサーブレットのクラス名の対応付けなどを定義するわけです。

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <!-- Define servlets that are included in the example application -->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>hello.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>

これで作業は完了です。Tomcatのポート番号を8765とすると、 http://localhost:8765/app/HelloServlet にアクセスしてみて、期待した通りのHTML文書が表示されれば大成功です。

また、サーブレット名は必ずしも「〜Servlet」である必要はなくて、

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>hello.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

のようにすることもできます。この場合は http://localhost:8765/app/loginと、簡潔なURLとなります。 ただし、url-patternには、アプリケーション名(app)は含めてはいけないことに注意してください。 要は、servlet-classタグが、サーブレットのクラスをパッケージ修飾も含めて正確な位置を指してさえいれば、 Web上での見え方は自由にできるということですね。

Server Side Java Index Top

(first uploaded 2002/01/02 last updated 2007/02/11, KQ TAURA-URANO398)

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!