【Java】Java ServletをGradleだけで実行する

Java Servlet(以降は「Servlet」と表記します)を実行する場合は、実行環境を用意するためServletコンテナのインストールなどを行う必要があり、手軽に試すには敷居が高いように感じてしまいます。

今回は、手軽に試すため Gradle のインストール前提になりますが、Gradle のプラグインを使用することで Servlet を実行するサンプルプログラムの実行方法を紹介します。

また、紹介するために使用するServletコンテナは以下に記載するものになります。

  • Apache Tomcat
  • Jetty
スポンサーリンク

前提条件

検証に使用する環境には、以下のソフトウェアのインストールが必要になります。

  • Java Development Kit(JDK):11以上
  • Gradle:6.0

JDKの種類の指定はありません。検証には「AdoptOpenJDK(build 11.0.6+10)」を使用しました。

環境

検証に使用する環境を以下に記載します。

  • Java:11
  • Gradle:6.0
  • Servlet:4.0.1
  • Servletコンテナ
    • Jetty:9.4.24.v20191120
    • Tomcat:9.0.34

ディレクトリ構成

サンプルプログラムを実行するためのディレクトリ構成例を次に記載します。 example-simple-servlet がルートディレクトリになります。

example-simple-servlet/
  src/
    main/
      java/
      webapp/

ビルドスクリプト

Gradle を実行するためのビルドスクリプトを作成します。

buidle.gradleファイル作成

builde.gradle ファイルを作成します。作成したファイルはルートディレクトリに保存します。

plugins {
  id 'war'
  id 'org.gretty' version '3.0.3'
}

sourceCompatibility = '11'
targetCompatibility = '11'

compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'

repositories {
  jcenter()
}

dependencies {
  providedCompile 'javax.servlet:javax.servlet-api:4.0.1'
}

plugins の id に記載している org.gretty を使用することで、Servletコンテナを簡単に使用することができます。

Gradle Wrapper作成

Gradle 実行方法として推奨されている Gradle Wrapper を作成します。次のコマンドを実行して作成します。

$ gradle wrapper --gradle-version=6.0
BUILD SUCCESSFUL in 3s

作成に成功すると builed.gradle と同じディレクトリに gradlew ファイルが作成されます。以降は gradlew ファイルを使用して Gradle を実行します。

サンプルプログラム

サンプルプログラムの作成と実行時の動作を確認します。

Servletプログラムの作成

Servletプログラムを作成します。

  • パッケージ名:com.example.controllers
  • ファイル名:HelloServlet.java
  • 作成先:src/main/java
package com.example.controllers;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/")
public class HelloServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    resp.setContentType("text/html; charset=utf-8");

    PrintWriter out = resp.getWriter();
    out.println("<html><body>");
    out.println("<h1>Hello, Servlet World!</h1>");
    out.println("</body></html>");

  }

}

Servletプログラムの実行と動作確認

作成したServletプログラムを Gradle から実行します。

ビルドスクリプトに追加した org.gretty プラグインに用意されている appRun タスクを実行することでWebアプリを起動することができます。正しく実行できた場合は、コンソールに次の情報が出力されます。

$ gradlew appRun
...
00:17:15 INFO  Jetty 9.4.24.v20191120 started and listening on port 8080
00:17:15 INFO  simple-webapp-gradle runs at:
00:17:15 INFO    http://localhost:8080/simple-webapp-gradle
> Task :appRun
Press any key to stop the server.

実行に成功した後は、Webブラウザを使用してServletプログラムの動作を確認してみます。確認するためのURLはコンソールに表示されています。今回の場合のURLは、「http://localhost:8080/simple-webapp-gradle」になります。

正常に動作している場合は、以下の画面が表示されます。

Servlet実行確認の画面イメージ

終了する場合は、コンソールに「Press any key to stop the server.」と表示されているので任意のキー入力をすることで終了することができます。

Servletコンテナの指定方法

サンプルプログラムの実行は、appRun タスクを使用しました。

このタスクを使用して起動するとServletコンテナは Jetty になります。別のタスクを使用することで起動するServletコンテナを変更することができます。

Tomcatを使用する

Tomcatを使用して起動する方法は、tomcatRun タスクを使用します。

$ gradlew tomcatRun
...
00:18:13 INFO  Tomcat 8.5.49 started and listening on port 8080
00:18:13 INFO  simple-webapp-gradle runs at:
00:18:13 INFO    http://localhost:8080/simple-webapp-gradle

実行後のコンソールに使用しているServletコンテナが出力されていることがわかると思います。

00:18:13 INFO  Tomcat 8.5.49 started and listening on port 8080

Jettyを使用する

Jettyを使用して起動する方法は、jettyRun タスクを使用します。

$ gradlew jettyRun
...
00:18:53 INFO  Jetty 9.4.24.v20191120 started and listening on port 8080
00:18:53 INFO  simple-webapp-gradle runs at:
00:18:53 INFO    http://localhost:8080/simple-webapp-gradle

実行後のコンソールに使用しているSerlvetコンテナが出力されていることがわかると思います。

00:18:53 INFO  Jetty 9.4.24.v20191120 started and listening on port 8080

デフォルト起動のServletコンテナを変更する

ビルドスクリプトを修正することで appRun タスクを使用して起動するデフォルトのServletコンテナを変更することもできます。

gretty {
  servletContainer = 'tomcat9'
}

appRun タスクを実行して起動します。

$ gradlew appRun
...
00:20:00 INFO  Tomcat 9.0.34 started and listening on port 8080
00:20:00 INFO  simple-webapp-gradle runs at:
00:20:00 INFO    http://localhost:8080/simple-webapp-gradle

実行後のコンソールに Tomcat を使用して起動していることがわかると思います。

【Tips】

起動するServletコンテナのバージョンを変更することもできます。対応しているバージョンは こちら から確認することができます。

記載されていないバージョンを指定しても動作することがあります。記載されていない場合でも、とりあえず試してみるものよいかなと思います。今回の場合は「tomcat9」が記載されていないも関わらず実行することができました。

まとめ

Gradle を使用しての Servlet の実行方法の紹介をしました。実行するためのServletコンテナを個別に用意する必要がないため、手軽に試すことができるようになると思います。

完成したサンプルプログラムは、GitHubから取得することができます。