3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Java + Apache Tomcat 10 + Jakarta Servlet 5.0 + JSP で Hello World

Last updated at Posted at 2021-02-04

概要

  • Jakarta Servlet (Java Servlet) と JSP を含む WAR ファイルを Gradle で作成する
  • Apache Tomcat 10 をインストールする
  • WAR ファイルを Apache Tomcat 10 にデプロイする

今回の環境

  • Apache Tomcat 10.0.2 (Jakarta Servlet 5.0, JSP 3.0)
  • Java 15 (AdoptOpenJDK 15.0.2+7)
  • Gradle 6.8.1
  • macOS 10.15.7 Catalina

Apache Tomcat 10 について

  • Apache Tomcat 10.0.2 は Apache Tomcat 10 系列の最初の安定版バージョン
  • Apache Tomcat 10 にて Java EE から Jakarta EE へ移行した
  • API のパッケージ名が javax.* から jakarta.* へ変更になった

Apache Tomcat® - Welcome!

Tomcat 10.0.2 Released
2021-02-02

The Apache Tomcat Project is proud to announce the release of version 10.0.2 of Apache Tomcat. This release is the first stable release in the 10.0.x series and is targeted at Jakarta EE 9.

Users of Tomcat 10 onwards should be aware that, as a result of the move from Java EE to Jakarta EE as part of the transfer of Java EE to the Eclipse Foundation, the primary package for all implemented APIs has changed from javax.* to jakarta.*. This will almost certainly require code changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later. A migration tool is under development to aid this process.

ビルド用・起動用の Java VM を用意する

環境変数 JAVA_HOME と PATH を設定する。

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home

$ PATH=${JAVA_HOME}/bin:${PATH}

$ java -version
openjdk version "15.0.2" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.2+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.2+7, mixed mode, sharing)

Servlet と JSP を含む WAR ファイルを Gradle で作成する

ソースコードを置くディレクトリを用意する

今回は任意のディレクトリに mywebapp というディレクトリを作成してその中にシンプルなサンプルコードを用意する。

$ mkdir mywebapp

$ cd mywebapp

ファイル一覧

mywebapp
├── build.gradle
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── MyServlet.java
        └── webapp
            ├── WEB-INF
            │   └── web.xml
            └── myjsp.jsp

build.gradle

plugins {
  id 'war'
}

repositories {
  mavenCentral()
}

dependencies {
  // Jakarta Servlet 5.0 API
  // https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api
  providedCompile 'jakarta.servlet:jakarta.servlet-api:5.0.0'
}

// Java 15
sourceCompatibility = 15
targetCompatibility = 15

// Application
version = '1.0'

src/main/java/com/example/MyServlet.java

package com.example;

// Jakarta Servlet 5.0 API では
// パッケージ名が javax.servlet から jakarta.servlet へ変更された
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
    res.setContentType("text/html; charset=utf-8");
    try (PrintWriter out = res.getWriter()) {
      out.println("<html><body>");
      out.println("サーブレット: Hello Servlet World!<br>");
      out.println(getServletContext().getServerInfo());
      out.println("</body></html>");
    }
  }
}

src/main/webapp/myjsp.jsp

<%@ page contentType="text/html; charset=utf-8" %><html><body>
ジェイエスピー: Hello JSP World!<br>
<%= pageContext.getServletContext().getServerInfo() %><br>
java.vm.name: <%= System.getProperty("java.vm.name") %><br>
java.vm.vendor: <%= System.getProperty("java.vm.vendor") %><br>
java.vm.version: <%= System.getProperty("java.vm.version") %><br>
</body></html>

src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- Web Application Deployment Descriptor (Jakarta Servlet 5.0) -->
<web-app
  xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
  https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
  version="5.0">

  <servlet>
    <servlet-name>myjsp</servlet-name>
    <jsp-file>/myjsp.jsp</jsp-file>
  </servlet>

  <servlet-mapping>
    <servlet-name>myjsp</servlet-name>
    <url-pattern>/myjsp</url-pattern>
  </servlet-mapping>

</web-app>

WAR ファイルを作成する

Gradle の build タスクで WAR ファイルを作成する。

$ gradle build

WAR ファイルが生成されていることを確認する。

$ file build/libs/mywebapp-1.0.war
build/libs/mywebapp-1.0.war: Zip archive data, at least v1.0 to extract

Apache Tomcat 10 をインストールする

インストールするディレクトリを用意する

今回は任意のディレクトリに tomcat10 というディレクトリを作成してその中にインストールする。

$ mkdir tomcat10

$ cd tomcat10

Apache Tomcat 10 をダウンロードして展開する

Apache Tomcat® - Apache Tomcat 10 Software Downloads

$ wget https://downloads.apache.org/tomcat/tomcat-10/v10.0.2/bin/apache-tomcat-10.0.2.tar.gz

$ tar xf apache-tomcat-10.0.2.tar.gz

Apache Tomcat 10 が起動することを確認する

startup.sh で Apache Tomcat 10 を起動する。

$ ./apache-tomcat-10.0.2/bin/startup.sh 
Using CATALINA_BASE:   /Users/foo/tomcat10/apache-tomcat-10.0.2
Using CATALINA_HOME:   /Users/foo/tomcat10/apache-tomcat-10.0.2
Using CATALINA_TMPDIR: /Users/foo/tomcat10/apache-tomcat-10.0.2/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
Using CLASSPATH:       /Users/foo/tomcat10/apache-tomcat-10.0.2/bin/bootstrap.jar:/Users/foo/tomcat10/apache-tomcat-10.0.2/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

curl でアクセスして起動していることを確認する。

$ curl --include -s http://localhost:8080/ | head -15
HTTP/1.1 200 
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 03 Feb 2021 23:34:17 GMT




<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/10.0.2</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />

shutdown.sh で Apache Tomcat 10 を停止する。

$ ./apache-tomcat-10.0.2/bin/shutdown.sh

WAR ファイルを Apache Tomcat 10 にデプロイする

WAR ファイルを Apache Tomcat 10 の webapps ディレクトリに設置する

$ cp mywebapp/build/libs/mywebapp-1.0.war tomcat10/apache-tomcat-10.0.2/webapps/mywebapp.war

Apache Tomcat 10 を起動する

$ ./tomcat10/apache-tomcat-10.0.2/bin/startup.sh

Servlet と JSP にアクセスする

curl で Servlet にアクセスして動作を確認する。

$ curl --include http://localhost:8080/mywebapp/myservlet
HTTP/1.1 200 
Content-Type: text/html;charset=utf-8
Content-Length: 94
Date: Wed, 03 Feb 2021 23:40:23 GMT

<html><body>
サーブレット: Hello Servlet World!<br>
Apache Tomcat/10.0.2
</body></html>

curl で JSP にアクセスして動作を確認する。

$ curl --include http://localhost:8080/mywebapp/myjsp
HTTP/1.1 200 
Set-Cookie: JSESSIONID=A2983AEBEC5A144E1D24059263B734A9; Path=/mywebapp; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 203
Date: Wed, 03 Feb 2021 23:40:45 GMT

<html><body>
ジェイエスピー: Hello JSP World!<br>
Apache Tomcat/10.0.2<br>
java.vm.name: OpenJDK 64-Bit Server VM<br>
java.vm.vendor: AdoptOpenJDK<br>
java.vm.version: 15.0.2+7<br>
</body></html>

参考資料

3
7
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
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?