Tomcat 10 覚え書き(Windows 11 Pro)


最終更新: 2022.7/31

以下はJDK 18・Tomcat 10・MySQL 8 によるWebアプリ(Java/JSP)の運用環境構築の手順をメモしたものです。9年ぶりにメインPCを更新してシステムドライヴのクローンでは移行できなくなり,超メジャーヴァージョンナップになったので稿を改めました。ちなみに四半世紀ぶりの非Intel,AMD Ryzen 5 3550H です。

【本稿の前提条件】
OS
Windows 11 Professional
JRE
OpenJDK 18.0.2
Tomcat
Apache Tomcat 10.0.22
MySQL
MySQL Community Server 8.0.30
JDBC Connector
Connector/J 8.0.30

※今回は開発環境の都合で OpenJDK を使いました。各バイナリのバージョンは 2022.7/26-30 現在です。


1. インストール

C:
├jdk-18.0.2
│├bin
││├java.exe
││└keytool.exe
│└lib
│ └security
│  └cacerts
├Program Files
│└MySQL
│ └MySQL Server 8.0
│  └bin
│   ├mysql.exe
│   └mysqld.exe
├Program Files (x86)
│└MySQL
│ └Connector J 8.0
│  └mysql-connector-java-8.0.30.jar
└ProgramData
 └MySQL
  └MySQL Server 8.0
   ├Data
   │├DB名称
   ││├テーブル名称.ibd
   ││├ :
   ││
   │├ib_logfile0
   │├ib_logfile1
   │└ibdata1
   └my.ini
x:
└Tomcat
 ├conf
 │├server.xml
 │├tomcat.csr
 │└tomcat.keystore
 ├lib
 │└mysql-connector-java-8.0.30.jar
 ├logs
 └webapps
  └webアプリ
   ├logs
   ├META-INF
   │└context.xml
   ├WEB-INF
   │├classes
   ││└jp
   ││ └webアプリ
   ││  └xxx
   ││   └*.class
   │└web.xml
   ├index.html
   ├*.css
   ├*.html
   ├*.js
   ├*.jsp
   └*.xml

1.1 Java実行環境の導入

1.1.1 ダウンロードと展開

OpenJDKのサイトからJDKをダウンロードする。

ダウンロードした openjdk-18.0.2_windows-x64_bin.zip を適当な所で解凍し,jdk-18.0.2フォルダを C:\ 直下にコピーする。

1.1.2 環境変数設定
  1. [田Start][設定][システム][バージョン情報][関連リンク][システムの詳細設定][詳細設定][環境変数...]を開く。
  2. [ユーザ環境変数]に JAVA_HOME C:\jdk-18.0.2 を新規登録する。
  3. [システム環境変数][Path]に C:\jdk-18.0.2\bin を追記する。
1.1.3 動作確認

コマンドプロンプトを開け,いきなり以下を打ってversion番号が表示されればOK。

java -version

1.2 Tomcatの導入

1.2.1 ダウンロードと設定

Apache TomcatのサイトからTomcatをダウンロードする。

  1. ダウンロードした apache-tomcat-10.0.22.exe を実行する。
  2. 「Choose Components」窓で[Select the type of install:][Custom]を選択する。
  3. 「Java Virtual Machine」窓でJavaの導入ディレクトリ C:\jdk-18.0.2 を記入する。
  4. 「Choose Install Locacion」窓で任意のインストール先を指定する。
  5. [Install]を実行する。
1.2.2 動作確認

ブラウザを立ち上げてアドレスバーに以下を指定し,Tomcatのウェルカム頁が表示されればOK。

http://localhost:8080/

Windowsのサービスで Apache Tomcat 10.0 Tomcat 10 が自動開始登録されていることを確認する。

1.3 MySQLの導入

1.3.1 MySQLの導入

MySQLのサイトからMySQLをダウンロードする。

途中の [Login][Sign Up]ボタンは失礼して[No thanks, just start my download.]へ進む。

  1. ダウンロードした mysql-installer-community-8.0.30.0.msi を実行する。
  2. [MyDeveloper Default]を選択する。
  3. [MySQL Server 8.0.30]を選択する。[Install Directly][Data Directly]はデフォルトのままが無難(泣)。
  4. 「Installation」窓で[MySQL Server 8.0.30][Connector/J 8.0.30]がリストされていることを確認する。
  5. [Install]を選択する。

続けて Configure する。

  1. 「High Availability」窓で[Standalone MySQL Server / Classic MySQL Replication]を選択する。
  2. 「Accounts and Roles」窓で[Current Root Password:]を適当に決める。それなりの強度が求められる。
  3. [Excecute][Finish]を選択する。
1.3.2 JDBCコネクタの導入

JDBCコネクタ mysql-connector-java-8.0.30.jar をMySQLのフォルダからTomcat配下へコピーする。

from: C:\Program Files (x86)\MySQL\Connector J 8.0\
to: Tomcatフォルダ\lib\
1.3.3 環境変数設定
  1. [田Start][設定][システム][バージョン情報][関連リンク][システムの詳細設定][詳細設定][環境変数...]を開く。
  2. [ユーザ環境変数][Path]に C:\Program Files\MySQL\MySQL Server 8.0\bin を追記する。
1.3.4 動作確認

コマンドプロンプトで以下をいきなりタイプして,"Welcome to the MySQL Monitor."と表示されればOK。

mysql -uroot -p[パスワード]

Windowsのサービスで MySQL80 が自動開始登録されていることを確認する。

ここまで来たら Windows を再起動して上述の確認事項をもう一度やってみる。


2. 環境設定

2.1 webappsの設定

2.1.1 webアプリ用フォルダの作成

Tomcatフォルダ\webapps\ 下にwebアプリの設置フォルダを作成する。ここにJSPやJavaScriptのソースを置くことになる。取りあえず適当なHTMLを書いて index.html の名前で格納しておく。

2.1.2 server.xmlの編集

Tomcatフォルダ\conf\server.xml を開き,non-SSL HTTP/1.1 Connector on port 8080 の Connectorタグの port を"80"に,redirectPortを"443"に変更する。

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
 <Connector port="80"
  protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="443"
 />

Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2 の下に次のようなConnectorタグを追記する(SSL通信用; 後述)。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
      maxThreads="150" SSLEnabled="true"
      defaultSSLHostConfigName="localhost">
 <SSLHostConfig hostName="localhost">
  <Certificate
   certificateKeystoreFile="conf/tomcat.keystore"
   certificateKeystorePassword="keystoreパスワード"
   certificateKeyAlias="tomcat"
   certificateKeystoreProvider="SUN"
   certificateKeystoreType="JKS"
   type="RSA"
  />
 </SSLHostConfig>
</Connector>

Engineタグ内の最後に次のようなwebアプリのHostタグを追記する。

 <Host name="webアプリ" appBase="webapps/webアプリ" />
</Engine>

ここでWindowsサービスの Apache Tomcat を再起動する。ブラウザを立ち上げてアドレスバーに以下を指定し,項番2.1.1で作ったindex.htmlが表示されればOK(ファイル名までURIで指定するなら当該ディレクトリ下のどのファイルでも呼び出せる。また:8080を付けないことに注意)。

http://localhost/webアプリ/
2.1.3 context.xmlの編集

Tomcatフォルダ\webapps\webアプリ\ 下に META-INF という名のフォルダを作り,以下のような内容の context.xml を設置する。

<Context docbase="webアプリ" path="webアプリ" reloadable="true">
 <Resource
  name="jdbc/DB名称"
  auth="Container"
  type="javax.sql.DataSource"
  username="root"
  password="MySQLのrootパスワード"
  driverClassName="com.mysql.cj.jdbc.Driver"
  url="jdbc:mysql://localhost/DB名称"
  maxActive="4"
  maxWait="5000"
  maxIdle="2"
 />
</Context>
2.1.4 web.xmlの編集

Tomcatフォルダ\webapps\webアプリ\ 下に WEB-INF という名のフォルダを作り,以下のような内容の web.xml を設置する。context.xmlと呼応する箇所に注意。

<?xml version="1.0" encoding="utf-8"?>
 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

 <resource-ref>
  <description>DB名称</description>
  <res-ref-name>jdbc/DB名称</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>

 <servlet>
  <servlet-name>動かしたいclass名</servlet-name>
  <servlet-class>webアプリ.動かしたいclass名</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>動かしたいclass名2</servlet-name>
  <servlet-class>webアプリ.動かしたいclass名2</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>動かしたいclass名</servlet-name>
  <url-pattern>/呼びだすときの名前</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>動かしたいclass名2</servlet-name>
  <url-pattern>/呼びだすときの名前2</url-pattern>
 </servlet-mapping>
</web-app>
2.1.5 classesフォルダの設置

Tomcatフォルダ\webapps\webアプリ\WEB-INF 下に classes\webアプリ という名のフォルダを作成する。この下に Servlet の classファイルを設置する。

Windowsサービスの Tomcat を再起動する。

2.2 MySQLの設定

2.2.1 DBとその格納フォルダの生成

コマンドプロンプトでMySQLにログインしてひとまづDBをcreateし,そのDBのデータ格納先フォルダを生成させる。

mysql -uroot -p[パスワード]
create database DB名称;
2.2.2 my.iniの編集

以下の.iniファイルを開き,character-setに utf8 を指定する。2箇所ある。

C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
[mysql]
default-character-set=utf8mb4

[mysqld]
(中略)
#Path to installation directory. All paths are usually resolved relative to this.
basedir="インストールフォルダ"
#Path to the database root
datadir="データフォルダ/Data/"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
init-connect='SET NAMES utf8mb4'
collation_server=utf8_unicode_ci
character-set-server=utf8mb4
skip-character-set-client-handshake

Windowsサービスの MySQL を再起動する。

2.2.3 文字コードの確認

コマンドプロンプトで以下をタイプする。

mysql -uroot -p[パスワード]
show variables like 'character%';

次のようにutf8が並んでいればOK。

+--------------------------+---------------------------------------------------------+
| Variable_name      | Value                          |
+--------------------------+---------------------------------------------------------+
| character_set_client   | utf8mb4                         |
| character_set_connection | utf8mb4                         |
| character_set_database  | utf8mb4                         |
| character_set_filesystem | binary                         |
| character_set_results  | utf8mb4                         |
| character_set_server   | utf8mb4                         |
| character_set_system   | utf8mb3                         |
| character_sets_dir    | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+

2.3 SSL通信の設定

本項はあくまでも筆者個人の開発環境の話で汎用性はない。やらずに済むならやりたくない。「よそ行って言いなや」案件である。localhostで https:// を実現する。

2.3.1 keystoreの作成

コマンドプロンプトで Tomcatフォルダ\conf\ に移動したのち,以下のように投入してKeystoreファイルを生成する。-keystoreの出力ファイル名・パスワード要求には項番2.1.2で決めた tomcat.keystorekeystoreパスワード を入れる。

cd Tomcatフォルダ\conf
keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
姓名は何ですか。
 [Unknown]: localhost
組織単位名は何ですか。
 [Unknown]:
組織名は何ですか。
 [Unknown]:
都市名または地域名は何ですか。
 [Unknown]:
都道府県名または州名は何ですか。
 [Unknown]:
この単位に該当する2文字の国コードは何ですか。
 [Unknown]: JP
CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=JPでよろしいですか。
 [いいえ]: y
2.3.2 CSR(証明書署名要求)の作成

コマンドプロンプトで以下のように投入してCSRファイルを生成する。ここでも項番2.1.2と呼応する箇所に注意。

keytool -certreq -sigalg SHA1withRSA -alias tomcat -file tomcat.csr -keystore tomcat.keystore
2.3.3 CSRのインポート

Windowsサービスの Tomcat を再起動する。

2.3.4 動作確認

ブラウザを立ち上げてアドレスバーに以下を指定し,項番2.1.1で作ったindex.htmlが表示されればOK。

https://localhost:8443/webアプリ/

以上でインストールとセットアップはおしまい。


3. コーディング例

3.1 JDBC接続と切断

JSPやServletでJDBC接続するときのコーディングはこんな感じ。

Connection db = null;
try {
 Context ctx = new InitialContext();
 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/DB名称");
 db = ds.getConnection();
} catch (Exception e) {
 e.printStackTrace();
}

切断は従来どおりclose。

try {
 db.close();
} catch (Exception e) {
 e.printStackTrace();
}

4. バックアップからの復元

4.1 JSPファイルの回復

Tomcatフォルダ\webapps\webアプリ\ に,退避しておいたJSP・JavaScript・CSS・HTMLの各ファイルをコピーする。

Servletのclassファイルは webapps\webアプリ\WEB-INF\classes\webアプリ\ の下に配置。

4.2 DBデータの回復

DBは素直に create table して新規に作りなおしたほうがいい。

データは select * from x into y しといたのを load data infile y into table x する。


© (c) Copyright 2022; nii.n All Rights Reserved.
counter