記事の紹介

この記事ではサーブレットクラスを作成して実行する方法に対して扱います。

Eclipseでサーブレットクラスを定義

Eclipseを使って簡単な色占いを作ってみましょう。占いの結果はランダムなので、Webを実行するたびに結果が変わります。まず、新規のサーブレットを作りましょう。

新規サーブレットの作り方

  • パッケージを右クリックして「新規」⇨「サーブレット」をクリックしましょう。
  • クラス名をExampleに設定して「完了」を押せば完了です。

実装

Eclipseでサーブレットクラスを新規作成すると、インポートやアノテーションなどサーブレットクラスの「お約束」は自動で書かれます。以下のコードを追加してサーブレットクラスを完成させてください。追加のimport文はEclipseが必要に応じて自動で記述してくれるので、doGet()の中を追加しましょう。

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Example
 */
@WebServlet("/Example")
public class Example extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Example() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 運勢をランダムで決定
		String[] luckArray = {"赤", "青", "緑"};
		int index = (int)(Math.random() * 3);
		String luck = luckArray[index];

		// 実行日を取得
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日");
		String today = sdf.format(date);

		// HTMLを出力
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>今日のラッキーカラー</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<p>"+today+"のラッキーカラーは「"+luck+"」です</p>");
		out.println("<p>Made by <a href='https://dripcoke.com/'>Dripcoke</a></p>");
		out.println("</body>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

  • line(15)の解説:URLパターン
    • Eclipseでサーブレットを作成すると、URLパターンは「/クラス名」が自動的に設定されます。従って、基本的にはサーブレットクラスは下記のURLでリクエストできます。
      http://<サーバ名>/<アプリケーション名>/<クラス名>
      なお、Eclipseで設定されるURLパターンを初期の設定から変更する場合は、アノテーションを変更してください。また、Eclipseが@WebServletアノテーションを自動で記述するのは、サーブレットクラスを「新規作成」したときだけです。既存のサーブレットクラスをコピーして作成、またはサーブレットクラスの名前を変更した場合、@WebServletアノテーションは自動で変更されません。必要に応じて修正してください。なお、サーブレットクラスのURLパターンが重複すると、サーバが起動しなくなるので注意してください。
  • line(17)の解説 : serialVersionUIDフィールド
    • Eclipseでサーブレットクラスを作成すると、このフィールドが定義されます。現時点では気にしなくても結構です。
  • line(41)の解説 : HTMLの出力
    • この例でレスポンスされるHTMLは、DOCTYPE宣言と、metaタグによるブラウザの文字コードの指定を省いた簡単なHTMLです。
  • line(31)の補足の説明 : ラッキーカラーをランダムに決定
    • java.lang.Mathクラスのrandom()メソッドは0~1未満の値の乱数を返します。その戻り値をN倍してint型にキャストすると、0~Nー1の整数の乱数を取得できます。今回は0~3未満の整数の乱数をしとくし運勢を判定にしようしています。
  • line(36)の補足の説明 : 実行日の取得
    • java.util.Dateのインスタンスを生成すると実行日時の情報が格納されます。java.text.SimpleDateFormatを使用すると、Dateが持つ情報を、指定したフォーマットで取得する事ができます。今回は「x月x日」という形式で取得して、todayに代入しています。

サーブレットクラスを実行

サーブレットクラスが定義出来たら、ブラウザからリクエストして実行しましょう。ブラウザが起動して「http://localhost:8080/Study/Example」とURLを入力するか、Eclipseの実行機能を使います。

実行中に問題が発生した場合、アプリケーションサーバから、ステータスコード「500」とともにエラーページである「500ページ」がレスポンスされ表示されます。

500ページなどのエラーページが表示された場合、ページに表示されているメッセージを参考にして解決しましょう。

入門JSP – サーブレットの基礎