[Tomcat]appBaseとdocBaseの違い

#インストール
デフォルトのパッケージ管理ツールで入れておく
今回設定はすべてserver.xmlで行うことを想定。

#appBase
Tomcatが扱うアプリケーションのトップディレクトリを指定する。
デフォルトだと**$CATALINA_HOME/webapp**で、LinuxMintはデフォルトだと**/var/lib/tomcat7/webapps**となっている。
設定にもよるけど、**ここにwarファイルを置いておけばTomcat起動時などに自動でwarを展開して配備してくれる。**
URLは自動的に`localhost:8080/warファイル名(.war無し）`となるので、ブラウザでアクセスしてみれば確認できる。

以下のように、`Host`に`appBase属性`として指定する。（ちなみに以下はデフォルト）

```xml:/var/lib/tomcat7/conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">

<!--長い上に今回とは関係ないので省略-->

      <!--ここのHostという部分が重要-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

<!--長い上に今回とは関係ないので省略-->

</Server>
```

#docBase(warの解凍後（ディレクトリ）の指定）
warを手動で解凍して配置したい場合や、warに固めず開発環境で開発しているままをサーバにアップロードして、そのままTomcatで動かしたい場合に利用するパターン。
`Context`という要素を`Host`に追記し、`docBase属性`にそのディレクトリのフルパスを指定する。
`path属性`に値を設定することでURLをデフォルトのwarファイル名から変更することができる。（今回の場合は/appAになる）



```xml:/var/lib/tomcat7/conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">

<!--長い上に今回とは関係ないので省略-->

      <!--ここのHostという部分が重要-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!--これを追加-->
        <!--/var/www/tomcattest/docBaseAというディレクトリにWebアプリを設置している-->
        <Context path="/appA" docBase="/var/www/tomcattest/docBaseA" reloadable="true" />

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

<!--長い上に今回とは関係ないので省略-->

</Server>
```

なお、今回のサンプルの**docBaseA**というディレクトリ自体を`appBase`配下に配置すれば、ワザワザ`Context`を追記しなくてもデフォルトのままで問題ない。
最後のまとめに書くけど、URLを変更したい場合に、今回のように`Context`を追加して`docBase`にディレクトリ名を指定＆`path`を指定する必要がある。

#docBase(warの指定）
`appBase`に指定したディレクトリ以外にwarファイルを設置したい場合、`docBase`にそのwarファイルを直接指定することができる。
なお、warのデプロイ先(解凍先)は`appBase`で指定されたディレクトリになり、作成されるティレクトリ名は`path`に指定されたものになる。（今回の場合はappB）

前述のディレクトリ名を`docBase`に指定するパターンと同じで、`Context`という要素を`Host`に追記し、`docBase属性`にその対象のwarファイルをフルパスで指定する。
`path属性`に値を設定することでURLをデフォルトのwarファイル名から変更することができる。（今回の場合は/appBになる）


```xml:/var/lib/tomcat7/conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">

<!--長い上に今回とは関係ないので省略-->

      <!--ここのHostという部分が重要-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!--これを追加-->
        <!--appBase外にwarファイルを配置でき、URLも任意に変更できる-->
          <Context path="/appB" docBase="/var/www/tomcattest/myApp.war" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

<!--長い上に今回とは関係ないので省略-->

</Server>
```

#まとめ
基本的にdocBaseは使わないほうがいいと思う。混乱の元になりそう。
docBaseを使うメリットとしては、**Tomcatだけで**複数のアプリケーションを扱いたい場合に、URLをwarファイル名じゃなくて任意のものに変更することができる点だと思う。
ただ、Apacheなどと連携する場合、Apache側でそのURLの指定ができるので、その場合にはdocBaseを使うメリットは無い。と思う。。。