BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Tomcat】テスト画面が表示されない!…できない?

はじめに

こんにちは!
株式会社BFT名古屋支店の新人エンジニア ケセランパサランです。

現在Centos7のイメージを使ってDockerコンテナを建て、ApacheTomcatをインストールしたのですが…
Tomcatのテスト画面が表示されません!
多くのサイトでは、Tomcatをインストールしてちょちょっといじるだけでブラウザ上でlocalhost:8080にアクセス(自端末上にTomcatがある場合)できているのに…

↓ この画面になります(泣)

localhost:8080のエラー画面

いろいろとTomcatについて調べて試行錯誤する中で
【テスト画面を表示させるためのディレクトリやファイルが存在しないので、不可能!!】
という結論に至ったので、今回はその経緯と、代わりにTomcatが正常起動していることを証明する簡単な方法についてまとめたいと思います。
※Dockerコンテナで実施していますが、どのような環境でもほぼ同じ手順を踏めると思います。



目次



【前提】環境

  • Apache Tomcat 7.0.76
  • Tomcatに必要なjavaなどはインストール済(今回はyum install tomcatで自動インストール)
  • Dockerコンテナ(イメージ:centos:centos7)

Dockerコンテナ構成図




TomcatでWebアプリケーションを動かすために

TomcatでWebアプリケーションを動かすには、決まった構造に従って必要なファイルなどを配置しなければいけません。
今回公式サイトが提供しているサンプルwarファイルを使用してみたので、それを例にWebアプリケーションの構造を見ていきます。
※warファイルとは、Webアプリケーションを動かすのに必要な要素をまとめた圧縮ファイルです。そのため、このファイルを展開するだけでWebアプリケーションが自動で構築され使用できるようになります。便利!  

 

サンプルwarファイルの展開手順

【手順1】
公式サイト(https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/)から、サンプル画面のwarファイルをダウンロードします。

【手順2】
ダウンロードしたwarファイルを、公式サイトの説明に従ってCATALINA_HOME/webappsに配置します。
このCATALINA_HOMEというのはTomcatをインストールした場所のことで、Tomcatの設定ファイル (/etc/tomcat/tomcat.conf) から確認できます。
※私の場合は、設定ファイルにはCATALINA_HOME="/usr/share/tomcat/"と記載されていましたが、
/usr/share/tomcat/webapps -> /var/lib/tomcat/webappsと設定されていたので、
/usr/share/tomcat/webappsにコピーしたwarファイルは、自動的に/var/lib/tomcat/webappsに配置されました。

【手順3】
CATALINA_HOME/webapps(私の場合は/var/lib/tomcat/webapps)を覗くと、sample.warsampleという2つのディレクトリができていることがわかります。
sample.warが自動で展開され、sampleというディレクトリができたのです!(自動で展開するかはTomcatの設定によります。)

 

サンプル画面の構造

sample配下の構造は以下のようになっています。

sample画面の構造

超~簡単に説明すると、
* 動的ページを生成するためのjspファイル
* 画像ファイル(.gif)
* Webページを作成するときの鉄板htmlファイル
* Javaアプリケーションを実行するための情報がまとめられたjarファイルの製造情報が書かれたMANIFEST.MFファイル
* Javaのクラスファイル(.class)
* Webアプリケーションを動かすためのライブラリを管理するlibディレクト
* アプリケーションを構成するサーブレット(サーバ上で動くJavaで書かれたプログラム)などが設定されたxmlファイル
などが含まれています。
Webアプリケーションを動かすにはいろいろと必要というわけです!
※多少の構造や、含まれるファイルの数や種類などはアプリケーションによって異なります。

この状態で試しにブラウザ上でlocalhost:8080/sampleにアクセスすると、このような画面が表示されました!!

サンプル画面




テスト画面がない!?

ようやく本題に入ります。
Tomcatでテスト画面を表示するためには、そのためのファイルたちが上記のような構造になって配置されているはずです。
しかし、見当たりません。
Tomcatに関連しそうなディレクトリは/etc/tomcatや/usr/share/tomcatなどがあるのですが、どこにもsampleのような構造になっている箇所がないんです。
試しに[find / -name WEB-INF]で重要なファイルたちが入っているWEB-INFのディレクトリ名を検索しても、先ほど配置したsampleディレクトリ内のものしか見つかりません。

そう、ないんです。テスト画面。

そりゃ~いくらTomcatが正常起動していても、テスト画面を表示するための情報がなかったらテスト画面は見れないわけです。
※テスト画面の情報が入っていない原因は不明です(泣)バージョンのせいかなぁ…




Tomcatが正常起動していることの証明

じゃあ、どうしたらTomcatが正常起動していることを証明できるのでしょうか?
テスト画面がないならサンプル画面を表示すればいいということで、先ほど紹介した手順でサンプル画面が表示できれば大丈夫だと考えました!
試しに[cp -r /var/lib/tomcat/webapps/sample /var/lib/tomcat/webapps/sample2]をしてsampleディレクトリをsample2ディレクトリとして同じ場所にコピーしても、ブラウザからlocalhost:8080/sample2にアクセスするとサンプル画面とまったく同じ画面を表示さることができました!
Tomcatで/var/lib/tomcat/webapps配下に置かれたアプリケーションを公開するよう設定されているから、Webアプリケーションを配置するだけでOKなんですね!

sampleとsample2




【余談】他のバージョンではどうなのか?

今回はTomcat 7.0.76と、少しバージョンが古いです。
それでは、別のバージョンではテスト画面あたりはどのようになっているのでしょうか?

今回はCentOS7のコンテナ上にTomcatをインストールしましたが、
別の機会にTomcat 10.1.11のイメージを使ってDockerコンテナを建ててみました!
その場合では、
CATALINA_HOME/webapps
CATALINA_HOME/webapps.dist
が存在し、webappsの方は空で、webapps.distの方にexamplesやhost-managerといったディレクトリが含まれていました!
※distはdistributionの略で、配布や公開といった意味があります。
※実際には多くのファイルやディレクトリが含まれていましたが、この図では省略しています。

Tomcatコンテナの構造
 

CATALINA_HOME/webapps.dist/examplesはhtmlファイルやWEB-INFディレクトリで構成されており…
「これはWebアプリケーションだ~!!」ってなったので、
早速webappsディレクトリの方にコピーしました。
そして、ブラウザ上でlocalhost:8080/examplesにアクセスすると、サンプル画面を表示させることができました!!

localhost:8080/examplesの画面




おわりに

今回はTomcatでWebアプリケーションを動かすための構造と、Tomcatのテスト画面が表示されない理由、そしてTomcatが正常起動していることを証明する代替案について書かせていただきました。
ネットで検索しても、難しい設定値をいじってTomcatのテスト画面を表示させているものばかりだったので、そもそもテスト画面の素がないなんてこともあり得るんだな~と驚きです。

以上、ここまで読んでいただきありがとうございました!




【参考サイト】

tomcatをインストールしてみる。 - Qiita