- 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
最終更新: 2022.7/31
以下はJDK 18・Tomcat 10・MySQL 8 によるWebアプリ(Java/JSP)の運用環境構築の手順をメモしたものです。9年ぶりにメインPCを更新してシステムドライヴのクローンでは移行できなくなり,超メジャーヴァージョンナップになったので稿を改めました。ちなみに四半世紀ぶりの非Intel,AMD Ryzen 5 3550H です。
※今回は開発環境の都合で OpenJDK を使いました。各バイナリのバージョンは 2022.7/26-30 現在です。
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
OpenJDKのサイトからJDKをダウンロードする。
ダウンロードした openjdk-18.0.2_windows-x64_bin.zip を適当な所で解凍し,jdk-18.0.2フォルダを C:\ 直下にコピーする。
コマンドプロンプトを開け,いきなり以下を打ってversion番号が表示されればOK。
java -version
Apache TomcatのサイトからTomcatをダウンロードする。
ブラウザを立ち上げてアドレスバーに以下を指定し,Tomcatのウェルカム頁が表示されればOK。
http://localhost:8080/
Windowsのサービスで Apache Tomcat 10.0 Tomcat 10 が自動開始登録されていることを確認する。
MySQLのサイトからMySQLをダウンロードする。
途中の [Login][Sign Up]ボタンは失礼して[No thanks, just start my download.]へ進む。
続けて Configure する。
JDBCコネクタ mysql-connector-java-8.0.30.jar をMySQLのフォルダからTomcat配下へコピーする。
from: C:\Program Files (x86)\MySQL\Connector J 8.0\
to: Tomcatフォルダ\lib\
コマンドプロンプトで以下をいきなりタイプして,"Welcome to the MySQL Monitor."と表示されればOK。
mysql -uroot -p[パスワード]
Windowsのサービスで MySQL80 が自動開始登録されていることを確認する。
ここまで来たら Windows を再起動して上述の確認事項をもう一度やってみる。
Tomcatフォルダ\webapps\ 下にwebアプリの設置フォルダを作成する。ここにJSPやJavaScriptのソースを置くことになる。取りあえず適当なHTMLを書いて index.html の名前で格納しておく。
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アプリ/
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>
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>
Tomcatフォルダ\webapps\webアプリ\WEB-INF 下に classes\webアプリ という名のフォルダを作成する。この下に Servlet の classファイルを設置する。
Windowsサービスの Tomcat を再起動する。
コマンドプロンプトでMySQLにログインしてひとまづDBをcreateし,そのDBのデータ格納先フォルダを生成させる。
mysql -uroot -p[パスワード]
create database DB名称;
以下の.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 を再起動する。
コマンドプロンプトで以下をタイプする。
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\ |
+--------------------------+---------------------------------------------------------+
本項はあくまでも筆者個人の開発環境の話で汎用性はない。やらずに済むならやりたくない。「よそ行って言いなや」案件である。localhostで https:// を実現する。
コマンドプロンプトで Tomcatフォルダ\conf\ に移動したのち,以下のように投入してKeystoreファイルを生成する。-keystoreの出力ファイル名・パスワード要求には項番2.1.2で決めた tomcat.keystore と keystoreパスワード を入れる。
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
コマンドプロンプトで以下のように投入してCSRファイルを生成する。ここでも項番2.1.2と呼応する箇所に注意。
keytool -certreq -sigalg SHA1withRSA -alias tomcat -file tomcat.csr -keystore tomcat.keystore
Windowsサービスの Tomcat を再起動する。
ブラウザを立ち上げてアドレスバーに以下を指定し,項番2.1.1で作ったindex.htmlが表示されればOK。
https://localhost:8443/webアプリ/
以上でインストールとセットアップはおしまい。
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();
}
Tomcatフォルダ\webapps\webアプリ\ に,退避しておいたJSP・JavaScript・CSS・HTMLの各ファイルをコピーする。
Servletのclassファイルは webapps\webアプリ\WEB-INF\classes\webアプリ\ の下に配置。
DBは素直に create table して新規に作りなおしたほうがいい。
データは select * from x into y しといたのを load data infile y into table x する。