LoginSignup
52
50

More than 5 years have passed since last update.

[Tomcat]appBaseとdocBaseの違い

Last updated at Posted at 2014-09-15

インストール

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

appBase

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

以下のように、HostappBase属性として指定する。(ちなみに以下はデフォルト)

/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になる)

/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になる)

/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を使うメリットは無い。と思う。。。

52
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
50