Eclipseで作ったJavaのWebアプリをUbuntuのTomcatで動くようにする方法(WARファイルエクスポート・インポート)

# 概要
* 知り合いが勉強会のためJavaのWebアプリを、サーバーに展開することになった。
* 知り合いも私もJavaのWebアプリをサーバに展開する方法を知らなかったので、練習用にUbuntuでTomcat8が動くようにして、そこに展開できるようにした。
* WindowsのEclipseで作ったプロジェクトを、LinuxのTomcat上に展開できるようになった。(WARファイルを利用)
* 似たような手順は散見されるが、単一のページでEclipseからUbuntu上のTomcatに移行する手順は見当たらなかったのでメモしておく。

# こういう人に役に立つ
* 教本とか読んでEclipse上でJavaのWEBアプリ作れるけど、サーバがよくわからないからサーバへ展開できない。
* 細かいことはさておき、Tomcat触ってなんとなく使えるようにしたい。

# 紹介すること
* Ubuntu16.04でTomcatをセットアップする方法
* Tomcatマネージャのインストール
* Eclipseで作ったWEBアプリのエクスポート(WARファイル)
* TomcatマネージャへWARファイルのインポート

# Ubuntu16.04でTomcatをセットアップする方法

(参考)[UbuntuにTomcat8をインストールする](http://itemy.net/?p=588)

上記の手順まんまだが、

## JDKのインストール

Javaを動かすのにJDK(Java Development Kit)が必要なので入れる
簡単のためPPA(非公式の個人リポジトリ)を使ってるので楽。
仕事などでしっかりやるときとかは公式リポジトリを使う。

```
sudo add-apt-repository ppa:webupd8team/java
# リポジトリを追加
sudo apt-get update
# 追加したリポジトリからパッケージリストを取得する
sudo apt-get install oracle-java8-installer
# JDKをインストール
sudo apt-get install oracle-java8-set-default
# Javaの環境変数を設定するパッケージをインストール
```

## Tomcat8のインストール

(2017年3月時点で)
Tomcatのバージョンはもっと新しいのもあったりするけど、
apt-getでさくっと入れられる最新は8までみたいなので、ここでは8で

```
sudo apt-get install tomcat8
```

Tomcatのバージョンを上げると、使えるJavaの機能が増えたり性能が上がったりする様子。
対応しているJDKのバージョンも変わるよう。

http://tomcat.apache.org/whichversion.html

インストールしたら自動でTomcatが立ち上がる。

## インストールできたら確認

ブラウザのアドレスバーに以下を打つと

`http://サーバのIPアドレス:8080`

でTomcatが動いてるのが見える。(テストページ)

![image](https://qiita-image-store.s3.amazonaws.com/0/169947/6449db58-0eac-dc1d-e537-6ceccc44ddf8.png)

ちょっと満足。

## Tomcatマネージャのインストール

Tomcatを使うのにManagerというものも入れると、この後やるWARファイルのインポートができて便利

```
sudo apt-get install tomcat8-admin
```

入れるだけだと、Manegerページにログインできるアカウントがないため使えないので、

`/etc/tomcat8/tomcat-users.xml`

にアカウントを追加する。

`tomcat-users`のタグの部分に

`<user username="admin" password="pass" roles="manager-gui"/>`

の形式で追加。(manager-guiのroleを持ったアカウントを追加する。)
`<!--`と`-->`の間はコメントアウトなので、コメントアウトの外に書く。
(当然のことながら、よく読まないで追記してハマりそうになった)

こんな感じ

```
<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
<!--
  NOTE:  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary.
-->
<!--
  NOTE:  The sample user and role entries below are wrapped in a comment
  and thus are ignored when reading this file. Do not forget to remove
  <!.. ..> that surrounds them.
-->
<user username="好きなアカウント名を入れてね！" password="好きなパスワードを入れてね！" roles="manager-gui"/>
</tomcat-users>
```

書き込みしたらtomcatに変更を反映するため、リスタート

`sudo service tomcat8 restart`

## Tomcat manegerが入ったか確認

`http://サーバのIPアドレス:8080/manager/html`

でManagerページにアクセスできる。(さっき登録したID/PWでログイン)
とりあえず見るだけ。

# Eclipseで作ったWEBアプリのエクスポート(WARファイル)

Eclipse(統合開発環境)での開発のナレッジは世の中にたくさん落ちてる。
UbuntuにTomcat入れてそこでJavaの開発やろうとするとPATHとかいろいろややこしい。
(最初、Tomcat単体でJavaアプリの環境作ろうとしたらややこしくてドハマりした。)

Eclipseの中で作る → 出来上がったものをTomcatにインポートする、が楽そう。

(参考)[Java+Eclipse 開発環境構築 Windows編](http://qiita.com/hiesiea/items/54e49dabfb5606edb54d)

など参考にEclipse環境を用意して、ローカルマシンでWebアプリが動くところまで開発する。

[スッキリわかるサーブレット＆JSP入門 スッキリわかるシリーズ](https://www.amazon.co.jp/dp/B00QPSXXZK/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

が昔やったけどわかりやすかったです。

## EclipseからWARファイルをエクスポートする。

Eclipseでものが作れるようになった後、
`Eclipseで作ったものをどうやって外のTomcatに取り込めばいいねーん！`
って最初思うと思う...思うよね？。(私は思った。)
ファイル1個とかならまだしも、importとかやり始めてディレクトリ構造複雑だとTomcatに持ち込むのえぐい。

でも、大丈夫。
EclipseでWebアプリが出来上がったら所定の形式でエクスポートして、
Tomcatにインポートすればそのまま動く。

やり方はEclipseの`ファイル` → `エクスポート` → `WEB` → `WARファイル`と選択してWARファイルのエクスポート画面へ
プロジェクト名と出力先を選択したら`完了`でWARファイルがエクスポートされる。

# TomcatマネージャへWARファイルのインポート

ここでTomcat Managerに戻る。

`http://サーバのIPアドレス:8080/manager/html`

の`配備`の`WARファイルの配備`からTomcatにインポートできる。

![image](https://qiita-image-store.s3.amazonaws.com/0/169947/f8967fbe-5b66-fa77-3102-17c989495d72.png)

`ファイルを選択`でさっき出力したWARファイルを選択すればOK

# 確認

`http://サーバのIPアドレス:8080/プロジェクト名/ページ名`

でアクセスできるようになっている。
(プロジェクト名、ページ名はEclipseでローカルマシンで動かしていたのと一緒)

# お疲れ様でした。
Eclipseで作ったWEBアプリがUbuntu上のTomcatで表示できるようになりました。
よかったよかった。

今回はTomcatで動かせるかの確認用途だったのでそこまでやってませんが、世間に公開するときはApacheとTomcatを連携させてやるらしいです。(Apacheがhttpdの仕事を任せる)

# 思う

![image](https://qiita-image-store.s3.amazonaws.com/0/169947/a220e0a9-c016-edf3-ca40-dae5eabf0cb0.png)

↑ Tomcatさん初心者殺し過ぎる気がする。