学習17日目:サーブレットの設定。

今日の学習時間。

  • Day:17
  • Today:2h
  • Total:100h

学習内容について。

サーブレットを使う準備。

Eclipseの手順。

STEP
パースペクティブを「Java EE」に変更。
STEP
新規プロジェクトを作成。
  • 「ファイル」→「新規」→「動的webプロジェクト」
  • Webアプリケーションを作るときは動的Webプロジェクトを選択
STEP
動的Webプロジェクトの設定。
  • プロジェクト名:任意
  • デフォルト・ロケーションを使用:☑︎
  • ターゲット・ランタイム:Tomcat8 (Java8)
  • 動的webモジュール バージョン:3.1
  • 構成:Tomcat8 (Java8) デフォルト構成
  • EARメンバーシップ:◽︎
  • ワーキングセット:◽︎
STEP
Webモジュールの設定。
  • コンテキスト・ルート:(プロジェクト名そのまま)
  • コンテンツ・ディレクトリー:WebContent
  • web.xml デプロイメント記述子の生成:◻︎
STEP
プロジェクト・エクスプローラーにファイルが追加される。

Javaで作ったWeb系プログラムのことをServlet(サーブレット)と呼ぶ。

サーブレットを作成してみる。

STEP
サーブレットを作成。

「Javaリソース」→「src」→「新規」→「サーブレット」

STEP
クラス・ファイルの宛先を指定。
  • Javaパッケージ:(任意)
  • クラス名:(任意)
  • その他はデフォルト
  • URLマッピングが/(クラス名)であることを確認
STEP
新規サーブレット作成の最後の画面。
  • public:☑︎
  • スーパークラスからのコンストラクター:☑︎
  • 継承された抽象メソッド:☑︎
  • doGet:☑︎
  • doPost:☑︎
STEP
パッケージとクラスが追加される。

下記にようなコードが自動生成される。

package test;

import java.io.IOException;
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 HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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);
	}

}

Tomcatの設定。

STEP
新規サーバーを作成。

「サーバー」タブを開き、「使用可能なサーバーがありません。このリンクをクリックして新規サーバーを作成してください…」をクリックする。

STEP
新規サーバーの定義を設定。
  • 「Apache」→「Tomcat v8.0サーバー」を選択
  • サーバーのホスト名:localhost
  • サーバー名:ローカル・ホストのTomcat8(Java8)
  • サーバー・ランタイム環境:Tomcat8(Java8)
STEP
Webアプリケーションを追加。
  • 「追加および除去」という画面が表示される
  • Tomcatで動作させたいWebアプリケーションを選択し、追加ボタンをクリック
STEP
サーバーが追加される。
STEP
Tomcatを起動。

「ローカル・ホストのTomcat8(Java8)」の上で右クリックして「開始」をクリック

STEP
動作確認。

http://localhost:8080/first_webapp/HelloServletにアクセス。

Served at: /first_webapp

上記のように表示されればOK。

ブラウザにHTMLを表示させてみる。

HelloServlet のdoGet メソッドを下記のように変更する。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    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("こんにちは、サーブレットの世界へ!!");
    out.println("</body>");
    out.println("</html>");
}
response.setContentType("text/html; charset=UTF-8");

上記コードで文字コードUTF-8のHTMLのデータを戻すと指定。

また、response.getWriter();の入力でEclipseから警告が出るので、import java.io.PrintWriter;を指定する必要がある。

それからは、Tomcatを再起動(右クリック→「再開」)させて先ほどのURLにアクセス。いちいち面倒ではあるがサーブレットを変更するたびに再起動させるのがルール。

Webモジュールから「自動再ロード」の設定項目を「使用可能」に変更すると再起動する必要はなくなる(上書き保存される度に自動でTomcatを再起動)。しかし、PCの負荷が重いなどの理由で自動で再起動されない場合がある。

こんにちは、サーブレットの世界へ!!

このように表示されればOK。

 Java WebアプリケーションのURL構造。

http://localhost:8080/first_webapp/HelloServlet/id=12&s=abc

上記を分解して考える。

  • プロトコル
    • http://https://
    • 通信手段の取り決め
  • ホスト
    • localhost
    • 通信先の名前を指定
    • localhostは自分のPC上で起動したTomcatへのアクセス
  • ポート
    • :8080
    • 通常のインターネットアクセスでは番号は指定しない
    • http は80、https は443
      • 番号指定は不要
    • Tomcatはデフォルトで8080番というポート番号で動作
  • コンテキスト・パス
    • /first_webapp
    • eclipseプロジェクトの名前
    • 指定した文字列の先頭に / をつけたもの
    • Tomcatの設定ファイルの中にコンテキスト・パスの設定が保存されている
      • モジュールタブを開く
  • サーブレット・パス
    • HelloServlet
    • 各プロジェクトで登録されているサーブレットを呼び出すのに必要
    • 「URLマッピング」で指定した文字列
  • クエリ・パラメータ
    • id=12&s=abc
    • 名前=値という形式で指定
    • サーブレットにデータを渡すことができる
    • GETでの通信時しか使えない
サーブレットに変更をかけた内容が反映されない時の対処法
  • プロジェクトのクリーン
    • 「プロジェクト」→「クリーン」
  • Tomcatを再起動
    • PCに負荷がかかったための動作不具合の場合
  • Mavenで取り込むファイルを再ダウンロード
    • ①:「Javaリソース」→「ライブラリー」→「Maven依存関係」
    • ②:.m2フォルダを削除
    • ③:Maven→「プロジェクトの更新」を選択
    • ④:今利用しているプロジェクト、もしくはすべてのプロジェクトを選択
    • ⑤:「pom.xml からプロジェクト構成を更新」「ローカル・ファイルシステムからワークスペース・リソースをリフレッシュ」「プロジェクトをクリーン」の3つにチェックを入れた状態で「OK」をクリック
  • プロジェクトを削除→再作成
    • 最後の手段
    • 「ディスク上からプロジェクト・コンテンツを削除(元に戻せません)」:☑︎

今日の反省と明日の目標。

夕方に旅行から帰ってきて、それから2時間勉強しました。正直、遊び疲れてるけど気合で。

幸いにも今日の内容は設定だけだったので、特に悩むこともなくスイスイ進みました。Javaでどうやってアプリを作っていくのか疑問に思いながら今まで進めてきましたが、ようやく形になっていくので楽しみです。

明日はJSPについて学習していきます。

閉じる