TomcatのWebアプリケーションのフォルダ構成

TomcatのWebアプリケーションのフォルダ構成についてです。Tomcatのバージョンは 9.0.x のものです。OSはlinuxを想定しています。

Tomcatをインストールすると、その配下には bin、conf、lib、logs、webapps などのフォルダが配置されます。conf配下の server.xml は tomcat全体の設定をするものです。logs配下の catalina.out にはtomcat起動時、終了時のログが出力されます。Webアプリケーションは webapps配下になります。以下はwebapps配下にtoolsというWebアプリケーションを配置した例です。

META-INF配下の context.xml とWEB-INF配下の web.xml について記載しておきます。

context.xml にはWebアプリケーションの設定を記載します。自動リロードの設定やデータベースの設定をする際に使います。web.xml はWebアプリケーションの動作設定を記載するファイルです。サーブレットのURLや初期化パラメータ、フィルターなどの設定を行います。META-INF、および、WEB-INFのフォルダはブラウザからURLを指定して開くことはできません。ユーザーにはこの配下のファイルを隠蔽します。

Webアプリケーション自体のソースファイルは src配下、クラスファイルはclasses配下に配置します。この例ではsample01はパッケージを表しており、他のパッケージ(例えば、sample02、sample03)を追加することができます。その際はフォルダを追加します。

クラスファイルのコンパイルですが、独自に compile.sh というものを用意しました。src配下にソースファイルを配置して compile.sh を実行すると(実行権限をつけてください)、classesフォルダにクラスファイルを生成します。

以下が compile.sh の中身です。サーブレットをコンパイルするために servlet-api.jar へクラスパスを通しています。


#!/bin/bash
export CLASSPATH="../../../../lib/servlet-api.jar"
javac -encoding utf-8 -d ../classes -sourcepath ./ $1

Tool1.java をコンパイルする例です。srcファイル配下で実行してください。

$ ./compile.sh sample01/Tool1.java

実行するとclassesフォルダ配下にsapmle01フォルダ、および、 Tool1.classが自動生成されます。

クラスファイルとURLとの紐づけですが、WebServletアノテーションで設定するか、web.xml にURLを記載するかの方法があります。Tool1.java の中で、@WebServlet(urlPatterns={“/sample01/tool”}) と記載した場合、Tool1.class へのブラウザからのアクセスは以下のようになります。

http://localhost:8080/tools/sample01/tool

WEB-INF配下の libフォルダにはサーブレットが必要なjarファイルを配置しておきます。データベースに接続する際にに必要なJDBCドライバのjarファイルなどです。

AL2023(Amazon Linux 2023)にdnfコマンドでMySQLをインストールしてみた。

AL2023(Amazon Linux 2023)にdnfコマンドでMySQLをインストールしてみました。その手順を記載しておきます。AL2023はLightsailで使用しています。

まずはリポジトリの取得です。MySQLのダウンロードサイトから「MySQL Yum Repository」を選択します。

リポジトリのセットアップパッケージの中から「Red Hat Enterprise Linux9/Oracle Linux9」を選択します。

ダウンロード画面になります。アカウントがなければ「No thanks, just start my download.」をクリックします。

ファイルがダウンロードされます。ダウンロードされたファイルは mysql84-community-release-el9-1.noarch.rpm というファイル名でした。

これをAL2023にアップロードします。scpコマンドを使います。LightsailDefaultKey.pem は ec2-user の秘密鍵ファイルです。


$ scp -i .ssh/LightsailDefaultKey.pem ./work/mysql84-community-release-el9-1.noarch.rpm ec2-user@xxx.xxx.xxx.xxx:~/

AL2023にrpmファイルがアップロードされていることが確認できたら、リポジトリのインストールをします。rootユーザーで行います。


# dnf install mysql84-community-release-el9-1.noarch.rpm

以下のコマンドで MySQL Yum リポジトリが正常に追加されたことを確認できます。


# dnf repolist enabled | grep "mysql.*-community.*"

インストールするパッケージは mysql-community-server であるため、情報を見てみます。


# dnf info mysql-community-server

dnf info で確認したところ、現状ではバージョン 8.4.0 のものがインストールされます。

それでは実際にMySQLのインストールをします。


# dnf install mysql-community-server

インストールされたMySQLのバージョンを確認しておきましょう。


# mysql --version

MySQLを起動します。


# systemctl start mysqld

起動できたか状態を確認しておきましょう。


# systemctl status mysqld

MySQLサーバーにログインする前にrootのパスワードを確認しておきます。rootのパスワードは /var/log/mysqld.log ファイルに出力されています。


# cd /var/log
# cat mysqld.log

ログファイルに「A temporary password is generated for root@localhost: xxxxx」という文言があるので、探します。xxxxx となっているところがrootの初期パスワードです。

それではMySQLサーバーにログインしてみましょう。


# mysql -u root -p
Enter password: 
 :

Enter password: と尋ねられるのでrootの初期パスワードを入力します。正しくパスワード入力できれば、MySQLサーバーに入ることができます。プロンプトは mysql> という表示です。

rootのパスワードは変更しておきましょう。ALTER USER コマンドで変更します。


mysql> alter user 'root'@'localhost' identified by 'xxxxx';

xxxxx がパスワードになるのですが「Query OK」と表示されれば変更ができています。MySQLのパスワードポリシーにあわないと「ERROR 1819 (HY000): Your password does not satisfy the current policy requirements」と表示されますので、英字大文字小文字、記号を含めて再度パスワードを設定してみてください。

データベースの作成をします。


mysql> create database testdb;

testdb はデータベース名です。これは任意でつけることができます。作成したデータベースを確認しておきます。


mysql> show databases;

一覧に testdb が表示されます。

ユーザーを作成します。


mysql> create user 'test' identified by 'xxxxx';

test がユーザー名です。ユーザー名も任意でつけてください。xxxxx がパスワードですが、rootのパスワードのときと同じくパスワードポリシーにあわないとエラーになりますので気をつけてください。

test ユーザーが testdb を使用できるように権限を付与します。


mysql> grant all on testdb.* to 'test';

これで test ユーザーで testdb データベースに表の作成などができるようになります。一度、MySQLから抜けます。


mysql> exit
Bye

test ユーザーでMySQLにログインしなおします。


$ mysql -u test -p
Enter password: 
 :

testdbを使用するようにします。


mysql> use testdb;

実テーブルを作ってみましょう。


mysql> create table SHOHIN(NUMBER INT(2) NOT NULL PRIMARY KEY, PRODUCT VARCHAR(20), PRICE INT(5));

行をインサートしてみます。


mysql> insert into SHOHIN (NUMBER, PRODUCT, PRICE) values (1, 'Apple', 120);
mysql> insert into SHOHIN (NUMBER, PRODUCT, PRICE) values (2, 'Orange', 150);
mysql> insert into SHOHIN (NUMBER, PRODUCT, PRICE) values (3, 'Banana', 100);
mysql> commit;

select で抽出できることを確認します。


mysql> select * from SHOHIN;

これでMySQLのインストールは完了です。テーブル作成後となりますが、操作イメージの画像をつけておきます。