気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Apache Tomcatの基本を復習してみる

Java ServletをWebサーバー上で動作させるための「サーブレットコンテナ」の一つ。
作成したJava Servletの動作確認をするための簡易的なWebサーバーとしての機能も備えています。

本格的にWebサービスを作成する場合は、Apache(Webサーバーソフト)をサーバーにインストールして
サーバーを動作させます。

ディレクトリ構成

Tomcatで重要なディレクトリとファイルを記載します。

tomcat($CATALINA_HOME)
  ∟ bin ・・・Tomcatプログラム格納先
  ∟ conf ・・・各種設定ファイル格納先
    ∟ context.xml
    ∟ sever.xml
    ∟ tomcat-users.xml  
    ∟ web.xml
  ∟ lib ・・・必要なAPIを格納。DB接続など
  ∟ logs ・・・ログ格納先
  ∟ temp
  ∟ webapps ・・・作成アプリの格納先(デプロイ先)
    ∟ ROOT ・・・http://localhost:8080/でアクセスできる(ROOTの名前の通り、ルートでアクセス可)
      ∟ index.html
      ∟ WEB-INF ・・・WEB-INF以外は公開される。WEB-INF以下は、公開されない。設定ファイルなどを配置
        ∟ web.xml ・・・classes以下のクラスファイルへどのようなURLでアクセスさせるかを記載
        ∟ classes ・・・コンパイル済みファイルを格納
    ∟ docs・・・http://localhost:8080/docs/でアクセスできるアプリ
    ∟ examples
    ∟ host-manager
    ∟ manager
  ∟ work

設定ファイル

次にTomcatの設定ファイルの概要について確認していきます。

  ∟ conf ・・・各種設定ファイル格納先
    ∟ context.xml
    ∟ sever.xml
    ∟ tomcat-users.xml  
    ∟ web.xml

実際の設定ファイルの配置先は、conf¥Catalina¥localhost以下になります。 localhostはホスト毎のディレクトリ。

  ∟ conf ・・・各種設定ファイル格納先
    ∟ Catalina
      ∟ localhost
        ∟ ROOT.xml  ・・・ 静的ファイルを保持するプロジェクトの読み込み使ったりする
        ∟ sampleApp.xml ・・・実際に作成したアプリのcontext.xml

context.xml

コンテキストの登録を行うファイルです。
アプリの配置先とその呼び出し方を設定します。

<Context path="/hello"
docBase="c:/sampleApp/helloworld"/>

docBaseにアプリケーションのルートディレクトリを指定。
pathには、アプリケーションを呼び出すための文字列を指定します。

helloworld以下にindex.htmlが配置されている前提とすると。
呼び出す際は以下のようなURLとなります。

http://localhost:8080/hello/index.html

sever.xml

サーバー単位の設定ファイルです。
Webアプリケーションの登録、ロギング、アクセス方法などが指定してあります。

EnginタグのNameでCatalinaが指定してあったり、defaultHostでlocalhostが指定して
あったりします。Catalinaがサーブレットコンテナ。

昔は、Context pathの指定もこのファイルに存在していたが、現状は、context.xmlとなっている。

tomcat-users.xml

Webアプリケーションマネージャーを使う際にお世話になるファイル。
Webアプリケーションマネージャーは、ウェブ画面でサーバーの配備や起動、停止を行えるツールです。

ウェブ画面にログインするためのアカウントを設定したりします。

以下のアカウントを設定する場合、は以下のように設定します。
ユーザー名:admin
パスワード:pass

<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="pass" roles="manager"/>

<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
-->
</tomcat-users>

web.xml

コンテキストの登録により、静的ファイル(.html)などは参照できますが、
Servletなどは、別途web.xmlに指定が必要です。

フレームワークを導入していると、独自の設定ファイルやアノテーションやクラス名からの推測で設定が不要だったりします。
フレームワークなしの場合の設定を押さえておくことで、Servletを用いていた際の基本設定を理解しておきます。

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">

  <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/helloworld</url-pattern>
  </servlet-mapping>
</web-app>

上記のようにサーブレットのクラス名とサーブレット名、サーブレット名と呼び出しURLに付与するパス名を 紐付けるように指定します。

以下のように呼び出します。

http://localhost:8080/hello/helloworld