Javaでサーバアプリ開発

今更だけどJavaでWebアプリケーション開発を久しぶりに行うことになったので、その整理。

# 0.はじめに
## 0-1.環境

Windows10 20H2
pleiades-2020-12-java-win-64bit-jre_20201222

## 0-2.書式

|記号|説明|
|:---:|:---|
|「 」|画面名|
|[ ]|画面内の項目名|
|【 】|入力値|

# 1. 環境構築

## 1-1.Tomcatの準備

pleiadesにはTomcat9が標準で入っているので、それを使用する。
そのため手動で設定は不要だが、設定手順を明記するため、Tomcat10を使用するための手順を記載する。

### 1-1-1.Tomcatのダウンロード

以下のURLからTomcat10をダウンロードする。
https://tomcat.apache.org/download-10.cgi

ダウンロードするモジュールは「Binary Distributions」のCoreにあるZioファイル。(黄色の個所)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/670fda05-4a7f-b1e2-d845-6455873b4354.png)

「apache-tomcat-10.0.4.zip」というファイルがダウンロードされたので、「pleiades\Tomcat」の下に保存する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/800d558a-90b8-a612-cd0c-f4bef3f1174e.png)

「10」というフォルダ名で展開する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/b35f65df-88a8-6f3b-7ce2-e5521e1c2cd9.png)

### 1-1-2.EclipseにTomcatを追加する方法

Tomcatの展開まで終わったら次にEclipseの設定を行う。

1. [ウィンドウ]-[設定]で「設定」画面を開く。
2. 「設定」画面で、[サーバ]-[ランタイム環境]を選択すると、以下の画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/a093683f-f5bb-5210-078e-54f6793fbe31.png)

3. [追加]ボタンをクリックし、【Apache Tomcat v10.0】を選択し、[新規ローカル・サーバの作成]にチェックを付け、[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/1a0a5077-761c-9c20-e052-e5a03ee3dd9f.png)


4. [Tomcat インストール・ディレクトリー]に先ほど展開したフォルダを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/4678e5c7-4784-0383-b0d9-10fa47786c95.png)

5. [完了]をクリックすると以下の用に追加される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/10cc5cdb-819a-13e2-546a-f522084d37d5.png)

6. [適用して閉じる]をクリックすると、【Servers】が追加される。※3の処理で、チェックを付けている場合。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/1fcfcca1-b918-03d2-5cf5-e8eb89897cfd.png)

## 1-2.Eclipseのプロジェクト作成(動的Webプロジェクト)

1. [ファイル]-[新規]-[その他]
2. 「ウィザードを選択」画面で[Web]-[動的Webプロジェクト]を選択し、[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/b13ab1ec-b6a5-788c-6c24-8b4ef0c567f4.png)
3. [プロジェクト名]に任意の名前、ここでは【WebSample】を入力し、[ターゲット・ランタイム]に【Tomcat9(Java11)】を選択し、[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/96ebfdf6-528f-6eb6-4c26-1f5689149112.png)
4. とりあえず初期状態のまま[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/150f1c5b-99d0-033c-8311-37c2672efc9b.png)
5. [web.xmlデプロイメント記述子の生成]にチェックを付け、[完了]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/087b7b49-645d-f259-7843-9fe6aff7e589.png)

## 1-3.Eclipseのプロジェクト作成(Maven)
1. [シンプルなプロジェクトの作成]にチェックを付けないで[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/2068e220-aef9-dff5-8b49-b9d721b62430.png)

2. [フィルター]に【maven-archetype-webapp】を入力し、[グループID]が【org.apache.maven.archetypes】になっているものを選択し、[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/797b7dfb-cd5b-c32e-dbe7-3ad30e153f6b.png)

# 2.Tomcatの起動・停止
ここでは1-2で作成した動的Webプロジェクトを使用して説明する。

## 2-1.Java EEのパースペクティブ

Java EEのパースペクティブを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/3cb5d838-ac25-54ea-e1e9-552d78819add.png)

## 2-2.サーバー設定

1. 画面下に[サーバー]タブが表示されるので選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/5e613d45-9517-e7fd-dc98-3dd5760d8445.png)

2. 「使用可能なサーバーがありません。このリンクをクリックして新規サーバーを作成してください」というリンクをクリックする。

3. 「新規サーバー」画面が表示されるので、【Tomcat9.0サーバー】を選択し、[次へ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/dda4a569-d1c1-4a36-6d97-dce156732d6c.png)

4. 作成したプロジェクト名が表示されているので、[追加]し、[完了]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/df13a98a-0d21-4b7d-e84e-2aa541760779.png)

5. [サーバ]タブが以下の用に表示されたら、準備完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/23b6f7d1-c9d9-16d1-7052-6db278ed1447.png)

## 2-3.起動と停止
サーバタブの緑色の矢印をクリックすると起動する。（赤枠で囲った個所）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/56983b4d-2cd1-d381-bdc2-053922da43b4.png)

起動後にブラウザで【http://localhost:8080/】にアクセスすると以下の用に表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/eefe691a-53a0-e444-9618-db51a41acd09.png)

停止は起動の２つ右にある赤いボタンで停止する。

停止中にブラウザでアクセスすると以下の用に表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/24baa1d6-aa96-b073-6496-7809d292ba65.png)

## 2-4. Tomcatの起動オプション

TomcatにJConsoleなどで接続する場合など、Javaの起動オプションを設定したい場合がある。
その場合は以下の手順で設定することが可能。

1. Eclipseから一度Tomcatを実行する。
2. Eclipseの[実行]-[実行構成]を選択。
2. 左のツリーの「Apache Tomcat」の下に「ローカルホストのTomcat ＊＊」が出来ているので選択。
2. 「引数」タブに「VM引数」の設定があるので、そこに追加する。

## 2-5.TomcatのプロセスID

タスクマネージャからTomcatのプロセスは見えない。javaw.exeとして表示される。

# 3.Java標準?Tool

## 3-1.JConsole

### 3-1-1.説明

メモリやスレッドの状態を確認するためのGUIツール。

### 3-1-2.使い方

Tomcat側の設定

|設定|説明|
|:---|:---|
|-Dcom.sun.management.jmxremote|JMX を使用してリモート監視することを JVM に通知します。|
|-Dcom.sun.management.jmxremote.port=18888|監視のために JVM が開く必要があるポート。|
|-Dcom.sun.management.jmxremote.ssl=false|SSL を使用しません。|
|-Dcom.sun.management.jmxremote.authenticate=false|認証は必要ありません。|
|-Djava.rmi.server.hostname=<host or IP>|基盤となる RMI クライアント接続が使用するホスト名と IP。|

## 3-2.jstack

### 3-2-1.説明

スレッドダンプ取得用ツール

### 3-2-2.使い方

引数にプロセスIDを指定

### 3-2-3.備考

Oracle JDK5には含まれていない。
Amazon Corretto8には含まれている。

### 3-2-4.トラブルシューティング

１．問題
C:\Program Files\Amazon Corretto\jdk1.8.0_232\bin>.\jstack.exe 1872
1872: Unable to attach to 32-bit process running under WOW64
The -F option can be used when the target process is not responding

１.原因
64bitのツールで32bitのプロセスに対して実行したため

２．問題
1872: Unable to enqueue operation: the target VM does not support attach mechani
sm
The -F option can be used when the target process is not responding

２．原因
32bitのツールでEclipseから動いたTomcat5に対して実行したけど、エラーになった。
Tomcat5の問題か？

## 3-3.jmap

### 3-3-1.説明

ヒープダンプ取得用ツール。
JDK6から含まれるようになった。

### 3-3-2.使い方

jmap -dump:format=b,file=ファイル名 プロセスID


# 4.メモリについて



# 5.サンプルプログラム

## 5-1.Servlet

### 5-1-1.メモリ枯渇

-jmap

###