LoginSignup
2
1

Java Servlet Webアプリで Hello World する

Last updated at Posted at 2023-03-07

Java Servlet Webアプリで Hello World する

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 22.04 で Java Servlet Web アプリケーションを作成して Hello World を表示する方法を紹介します。
java_on_jetty.png

目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

実現すること

ローカル環境の Ubuntu で、Java Servlet war ファイル形式のアプリをビルド、起動します。

Java Servlet は、Web アプリケーションの基本的な要素を学ぶ上で重要です。しかし、現状では Servlet をそのまま使用することは少なくなっています。それでも、Servlet を使った Web アプリケーションを自分で作成し、ビルドして動作させることは、学習に役立ちます。初心者の方も、ぜひチャレンジしてみてください。

技術トピック

Java Servlet とは?

こちらを展開してご覧いただけます。

Java Servlet

Java Servlet は、Java プログラムによって動作するサーバーサイドの WEB コンポーネントであり、HTTP リクエストを受信して HTTP レスポンスを生成する機能を提供します。

以下は Java Servlet の主な特徴とメリットです。

特徴やメリット 内容
プラットフォームの独立性 Java Servlet は Java で開発されており、プラットフォームに依存しないため、どのオペレーティングシステム上でも動作することができます。
大規模な Web アプリケーションの開発が可能 Java Servlet を使用することで、大規模な Web アプリケーションを開発することができます。Java Servlet は、スケーラビリティやセキュリティなど、高度な機能を提供するため、大規模な Web アプリケーションの開発に最適です。
リクエストとレスポンスの制御 Java Servlet は、HTTP リクエストとレスポンスを制御することができます。つまり、クライアントから送信されたリクエストを処理し、必要に応じて HTTP レスポンスを生成することができます。
セッション管理 Java Servlet は、セッション管理をサポートするため、Web アプリケーションでユーザーの状態を管理することができます。
プログラマブルなAPI Java Servlet は、プログラマブルな API を提供するため、開発者が Web アプリケーションの振る舞いを制御することができます。また、Java Servlet は、多数のサードパーティ製ライブラリをサポートするため、Web アプリケーションの開発を容易にします。

開発環境

  • Windows 11 Home 22H2 を使用しています。

WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。

WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます

> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47

Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04

Java JDK ※ こちらの関連記事からインストール方法をご確認いただけます

$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

Maven ※ こちらの関連記事からインストール方法をご確認いただけます

$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

この記事では基本的に Ubuntu のターミナルで操作を行います。Vim を使用してコピペする方法を初めて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。

作成する Web アプリケーションの仕様

No リクエストURL HTTPメソッド MIME タイプ
1 /hello GET text/html

"/hello" というリクエストURLに対して HTTP GET リクエストを送信すると、HTMLがレスポンスされるシンプルな Web アプリを実装します。

Hello World を表示する手順

プロジェクトの作成

プロジェクトフォルダを作成します。
※ ~/tmp/hello-servlet をプロジェクトフォルダとします。

$ mkdir -p ~/tmp/hello-servlet
$ cd ~/tmp/hello-servlet

Servlet クラスの作成

Servlet クラスを作成します。

$ mkdir -p src/main/java/com/example/servlet
$ vim src/main/java/com/example/servlet/HelloServlet.java

ファイルの内容

HelloServlet.java
package com.example.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;

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("message", "Hello World!");
        request.getRequestDispatcher("/WEB-INF/views/hello.jsp").forward(request, response);
    }
}
説明を開きます。

このコードは Java Servlet を実装しています。

内容
@WebServlet アノテーションを使用して、"/hello" のリクエストパスにマッピングされた Servlet クラスを作成しています。
HelloServlet は、doGet() メソッドをオーバーライドし、HttpServletRequest と HttpServletResponse を受け取ります。
リクエスト属性に "message" という名前の文字列を設定し、JSP ファイルにフォワードします。
JSP ファイルは、設定されたメッセージを表示するために使用されます。
Servlet API は、Web アプリケーションの開発を簡素化し、再利用可能なコンポーネントの作成を可能にする多数のクラスとインタフェースを提供しています。

JSP ファイルの作成

JSP ファイルを作成します。

$ mkdir -p src/main/webapp/WEB-INF/views
$ vim src/main/webapp/WEB-INF/views/hello.jsp

ファイルの内容

hello.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>
        <h1><c:out value="${message}" /></h1>
    </body>
</html>
説明を開きます。

このコードは、JSTL (JSP Standard Tag Library) を使用して、Java Servlet によって設定されたリクエスト属性の値を表示するための JSP (JavaServer Pages) を作成しています。

内容
この JSP では、リクエスト属性 "message" の値を取得し、h1 要素に表示しています。
また、JSTL の c:out タグを使用して、HTML エスケープされたメッセージを表示するためのセキュリティ対策が行われています。

pom.xml の作成

pom.xml ファイルを作成します。

$ vim pom.xml

ファイルの内容

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>hello-servlet</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>hello-servlet</name>

    <properties>
        <javax.servlet.version>4.0.1</javax.servlet.version>
        <java.version>11</java.version>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- Servlet -->
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>${name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>10.0.13</version>
                <configuration>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
説明を開きます。

Maven プロジェクトのプロジェクトオブジェクトモデル (POM) です。プロジェクトの情報、依存関係、ビルド設定などが含まれています。

各項目は以下のとおりです。

項目 内容
groupId プロジェクトのグループIDを定義します。
artifactId プロジェクトのアーティファクトIDを定義します。
packaging プロジェクトのパッケージングタイプを定義します。(例えば、jar、war、pom など)
version プロジェクトのバージョンを定義します。
name プロジェクトの表示名を定義します。
properties プロジェクトで使用されるプロパティー値を定義します。
javax.servlet.version サーブレット API のバージョンを定義します。
java.version Java のバージョンを定義します。
failOnMissingWebXml web.xml ファイルが存在しない場合に、ビルドエラーを出力するかどうかを設定するプロパティーです。
dependencies 依存関係のリストを定義します。ここでは、Web アプリケーションで使用される Servlet や JSP のライブラリに依存しています。
build プロジェクトのビルド設定を定義します。ここでは、Maven コンパイラプラグインを使用して Java バージョン11 でコンパイルするように指定し、Jetty Web サーバを Maven プラグインとして使用できるようにします。また、最終的に生成される WAR ファイルの名前を ${name} に設定しています。

ディレクトリ・ファイル構成

プロジェクトのファイル構成を表示してみます。

$ tree
.
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── servlet
        │               └── HelloServlet.java
        └── webapp
            └── WEB-INF
                └── views
                    └── hello.jsp

Java Servlet アプリをビルド、実行

Java アプリをビルドします。
※ target/hello-servlet.war ファイルが作成されます。

$ mvn clean package

アプリを起動します。 (※ ctrl + C で停止します)

$ mvn jetty:run

mvn jetty:run コマンドは、Maven のプラグインにより Jetty Web サーバーを一時的に立ち上げ、その中で war ファイル形式の Web アプリケーションが実行されます。

WEBブラウザで確認します。

http://localhost:8080/hello

image.png
WEBブラウザに "Hello World!" と表示することが出来ました。

まとめ

Ubuntu に構築したシンプルな Java 開発環境で、Java Servlet Web アプリを実行することができました。

実際の業務での Java Servlet の使用ケースでは、構成ファイルなどが追加されるため、ここで示したようなシンプルな構成とは異なる場合があります。しかしながら、最小構成の例を学ぶことで、Java Servlet Web アプリがどのような構成が必要なのかを理解することができます。

どうでしたか? WSL Ubuntu で、Java Servlet Web アプリケーションを手軽に実行することができます。ぜひお試しください。今後も Java の開発環境などを紹介していきますので、お楽しみに。それでは失礼します。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1