サーブレットで Hello Servlet!

メモ:

「Hello Servlet!」と表示するサーブレットを作成していきます。

Hello Servlet!

任意のフォルダーに HelloServlet.java ファイルを作成し、テキストエディタを使用して次のプログラムを作成します。

import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
 
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
 
    out.println("<!DOCTYPE html>");
    out.println("<html><head></head><body>");
    out.println("<p>Hello Servlet!</p>");
    out.println("</body></html>");
  }
}

サーブレットで自前のアプリケーションを作成するには、 HttpServlet を継承します。

ここでは、クライアントからリクエストされる HTTP メソッドが GET メソッドとして、 HttpServlet クラスのメソッドをオーバーライドした doGet() の中で HTML のタグを出力(レスポンスを返す)するよう作成しています。

プログラムが作成出来たらコンパイルします。

C:\src\hello_servlet>javac HelloServlet.java

HelloServlet.java:3: エラー: パッケージjavax.servletは存在しません
import javax.servlet.ServletException;
                    ^
HelloServlet.java:4: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServlet;
                         ^
HelloServlet.java:5: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServletRequest;
                         ^
HelloServlet.java:6: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServletResponse;
                         ^
HelloServlet.java:8: エラー: シンボルを見つけられません
public class HelloServlet extends HttpServlet {
                                  ^
  シンボル: クラス HttpServlet
HelloServlet.java:9: エラー: シンボルを見つけられません
  public void doGet(HttpServletRequest request, HttpServletResponse response)
                    ^
  シンボル:   クラス HttpServletRequest
  場所: クラス HelloServlet
HelloServlet.java:9: エラー: シンボルを見つけられません
  public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                ^
  シンボル:   クラス HttpServletResponse
  場所: クラス HelloServlet
HelloServlet.java:10: エラー: シンボルを見つけられません
    throws IOException, ServletException{
                        ^
  シンボル:   クラス ServletException
  場所: クラス HelloServlet
エラー8個

何も考えずコンパイルを実行すると上記エラーが発生します。これは、サーブレットに必要なライブラリーが JDK の中にはないため発生しており、次のようにコンパイラーの引数にライブラリを指定します。(ライブラリは、 Tomcat のインストールフォルダーにインストールされています。)

C:\src\hello_servlet>javac -classpath C:\tomcat9\lib\servlet-api.jar HelloServlet.java

コンパイルに成功すると HelloServlet.class が作成されます。

サーブレットの配備

Web コンテナが作成したサーブレットを処理できるよう、実行環境に HelloServlet.class を配備します。

Tomcat では、 Tomcat インストールフォルダーの配下にある webapps フォルダーへアプリケーションを配備します。ここでは、 webapps フォルダーの配下に hello_servlet フォルダーを作成し作成したサーブレットを配備します。

Tomcat のアプリケーションフォルダー

Tomcat で必要なフォルダーを確認するため examples フォルダーの中を見てみます。 examples フォルダーにある WEB-INF フォルダーは重要な役割を持っており、このフォルダーの配下にあるサーブレットと URL が対応するよう処理されます。

Tomcat の重要なフォルダー構成

examples/WEB-INF フォルダーには、 lib フォルダー ・ classes フォルダー ・ web.xml ファイルが特に重要になります。

  • classes:プログラムを配置する場所
  • lib:必要なライブラリを配置する場所
  • web.xml:web アプリケーションの設定ファイル

それでは、実際に作成した HelloServlet.class ファイルを配備していきます。

webapps フォルダーに hello_servlet フォルダーを作成し、 次に WEB-INF , その配下に classes フォルダーを作成します。

アプリケーションに必要なフォルダーの作成

作成した classes フォルダーに HelloServlet.class を配備します。

次に WEB-INF フォルダーに設定ファイルの web.xml を作成します。

web.xmlの作成

テキストエディタで web.xml に次のように記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
 
  <servlet>
    <servlet-name>Sample</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>Sample</servlet-name>
    <url-pattern>/Sample</url-pattern>
  </servlet-mapping>
</web-app>

<servlet> タグの中では、作成したプログラムと名前を関連付けており <servlet-mapping> では、 URL とサーブレットの名前を関連付けています。これにより、 URL からサーブレットを呼び出せるように設定されます。

ブラウザーを起動してアドレスに「localhost:8080/hello_servlet/Sample」と入力すると正しく設定されていれば「Hello Servlet!」と表示されます。