EclipseでServletプログラムを作成する


はじめに

前提としてEclipseを導入済みとします。
Eclipseダウンロード
今回はEclipseでServletとJSPを利用してHelloWorldを出力することを目指します。

そもそもServletって何?

サーブレットとはWebサーバー上、つまりバックエンドで動くプログラムであり動的なWebページを実現するためのJavaで書かれたプログラムです。

動的なWebページとは...
同じURLをリクエストされた場合でもアクセスした人に応じてページの見え方を変えて提供するページのこと。例えばECサイト(ネットショッピングができるサイト)で、自分の閲覧履歴やお気に入りに追加した情報などを考慮してページが構成され、アクセスした人それぞれの好みや行動の傾向に合わせたページが提供されます。そのうちの1つの方法としてサーブレットが利用できます。

Servletを学ぶこと

Java初心者にとってサーブレットを学ぶことは良い

  • 現在も非常によく使われている技術。
  • WebフレームワークがServletを隠ぺいしているので、素のServletを書くことはあまりないが 問題が起きたときは、Servletの知識が必要になること。
  • Webアプリの基本的な仕組みが身につく

Servletを動かす

実行環境

  • Eclipse4.16
  • Tomcat9
  • Java11

Servletプロジェクト作成

サーブレットの作成を行なう。
Eclipseのファイル新規その他Webフォルダ動的Webプロジェクトの順に進める。
適したプロジェクト名を入力ターゲットランタイムは自分が持っているJavaのバージョンを選択(設定から使用できるjavaバージョンを確認できる)→完了

Servletクラスの作成

Webサーバー上で動くサーブレットを作成する。
ファイル新規その他Webフォルダサーブレット適したパッケージ名クラス名(今回はservlet,SampleTest)を入力→完了
すると下のようなJavaファイルが作成される。

SampleTest.java

package servlet;

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 SampleTest
 */
@WebServlet("/SampleTest")
public class SampleTest extends HttpServlet {

    /**
     * @see HttpServlet#HttpServlet()
     */
    public SampleTest() {
        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);
    }
}

HelloWorldを出力する

※今回はHTMLをServletで出力する方法もありますが省略します。

フォワードを行うサーブレットクラス

今回はdoGetメソッドを編集します。

SampleTest.java
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    request.getRequestDispatcher("/WEB-INF/view/sample.jsp").forward(request, response);
  }

フォワードは、RequestDispatcherインスタンスのfoward()メソッドで行います。

フォワード構文

RequestDispatcher dispatcher =
  request.getRequestDispatcher("フォワード先");
dispatcher.foward(request,response);

フォワード先はJSPファイルだけでなくサーブレットクラスも指定できる。
※ただし同じWebアプリケーションのものであること

  • JSPファイルの場合
    • /Web-Contentからのパス
  • サーブレットクラスの場合
    • /URLパターン

JSPファイルを利用する

コントローラーはユーザーからリクエストを受けて全体の制御を行うことに適したサーブレットクラスが担当し、
出力を行うビューはHTMLの出力を得意とするJSPファイルが担当する

JSPファイルの作成

WebContent/WEB-INF を右クリックし 新規フォルダフォルダー名を入力完了
※今回のフォルダ名はviewとする
view を右クリックし 新規その他JSPファイル次へフォルダー名を入力完了
でJSPファイル作成
※今回のファイル名はsample.jspとする

JSPファイルへの直接リクエストの禁止

WEB-INF配下に配置すること
WEBアプリケーションを作ると、ブラウザからリクエストされるのは基本的にサーブレットクラスになります。JSPファイルはサーブレットクラスからフォワードされて動くことを前提に作成するので、ブラウザから呼び出されるとエラーや不具合が発生することがあるので直接リクエストができないようにしておきます。
ブラウザはWEB-INF以下に配置されたファイルを直接リクエストすることができません。

表示するJSPファイル

sample.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

今回はHello Worldを出力したいのでJSPファイルに入力します。

サーバーの起動

これで準備は整ったのでサーバーを起動しましょう。
SampleTest.javaを右クリック実行サーバーで実行
サーバーのタイプをTomcat v9.0サーバーを選択

上記の画面が出力されれば成功!

最後に

今回はSevletを使用して基礎のHelloWorldを出力しましたが
次回はdoPostメソッドを使用してパラメーター取得を行います。