TomcatとかJavaの世界に片足を突っ込んでみて気になったところ

TomcatとかJavaとかほとんど知らないけど、とりあえず少しは把握してないといけなくなったので調べてみました。片足突っ込んだだけなので、かなり触りの部分。でも、phpとかとは構成が違いすぎて、色々調べないと、とりあえず起動してJavaを書けば実行できるところまでたどり着けなかったです。そういう部分を書き立てた感じ。

ちなみに、Cygwin上で動かしてます。

Tomcatとは

webコンテナ。

Catalina
サーブレットコンテナ
Coyote
HTTPサーバー

TomcatはCatalinaとCoyoteを内包してるプロダクト。Tomcatサーブレットコンテナと呼ぶ事もあるけど、Catalinaもサーブレットコンテナなので、紛らわしいのでwebコンテナと呼ばれるらしい。狭義ではCatalinaがサーブレットコンテナだけど、広義の意味でTomcatサーブレットコンテナと呼ぶこともあるって感じかな。

Tomcatの前にApacheを置いて使う例を良く見るけど、Coyoteがhttpサーバーなので、Tomcat単体でも実は使える。オライリーTomcatの本にちょろっと書いてあった話によると、Apache+Tomcatは速いからというよりApacheに慣れてるからだそう。Coyoteは遅くないし不安定でもないし、場合によってはCoyoteを使った方が速いこともあるんだとか。

サーブレットコンテナ

Javaの世界はいちいち用語が独自でややこしい。サーブレットアプレットとかコンテナとか。確かにphpperlとかで書いたサーバーサイドのコードの事を表す単語はちょっと思いつかないけどね。ざっくりと、サーブレットはサーバーサイドのコード・プログラムの事を指すと思う。サーブレットコンテナは、多分mod_phpとかmod_perlとかになるのかな。

$CATALINA_HOME/bin/catalina.sh

Tomcatを起動したり停止したりするコマンドを提供するスクリプト
$CATALINA_HOMEは、要するにTomcatがインストールされたディレクトリ。

$ ./bin/catalina.sh
Using CATALINA_BASE:   C:\cygwin\home\myuser\dev\tomcat
Using CATALINA_HOME:   C:\cygwin\home\myuser\dev\tomcat
Using CATALINA_TMPDIR: C:\cygwin\home\myuser\dev\tomcat\temp
Using JRE_HOME:       C:\Program Files\Java\jdk1.7.0_03
Usage: catalina.sh ( commands ... )
commands:
  debug             Start Catalina in a debugger
  debug -security   Debug Catalina with a security manager
  jpda start        Start Catalina under JPDA debugger
  run               Start Catalina in the current window
  run -security     Start in the current window with security manager
  start             Start Catalina in a separate window
  start -security   Start in a separate window with security manager
  stop              Stop Catalina
  stop -force       Stop Catalina (followed by kill -KILL)
  version           What version of tomcat are you running?

こんなコマンドがあるけど、例えば起動と停止はshutdown.shstartup.shというラッパースクリプトがある。

$CATALINA_HOME/bin/version.sh

$ ./bin/version.sh
Using CATALINA_BASE:   C:\cygwin\home\myuser\dev\tomcat
Using CATALINA_HOME:   C:\cygwin\home\myuser\dev\tomcat
Using CATALINA_TMPDIR: C:\cygwin\home\myuser\dev\tomcat\temp
Using JRE_HOME:       C:\Program Files\Java\jdk1.7.0_03
Server version: Apache Tomcat/6.0.18
Server built:   Jul 22 2008 02:00:36
Server number:  6.0.18.0
OS Name:        Windows 7
OS Version:     6.1
Architecture:   amd64
JVM Version:    1.7.0_03-b05
JVM Vendor:     Oracle Corporation

バージョン情報を出力するスクリプトもある。

Tomcatに関連する環境変数

# -----------------------------------------------------------------------------
# Start/Stop Script for the CATALINA Server
#
# Environment Variable Prequisites
#
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.
#
#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   or "run" command is executed.
#
#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
#                   the JVM should use (java.io.tmpdir).  Defaults to
#                   $CATALINA_BASE/temp.
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" or "javac" argument.
#
#   JRE_HOME        Must point at your Java Development Kit installation.
#                   Defaults to JAVA_HOME if empty.
#
#   JAVA_OPTS       (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
#                   command is executed. The default is "dt_socket".
#
#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is 8000.
#
#   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. Specifies whether JVM should suspend
#                   execution immediately after startup. Default is "n".
#
#   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
#                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
#                   and JPDA_SUSPEND are ignored. Thus, all required jpda
#                   options MUST be specified. The default is:
#
#                   -Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,
#                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
#
#   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension
#                   (JSSE) installation, whose JAR files will be added to the
#                   system class path used to start Tomcat.
#
#   CATALINA_PID    (Optional) Path of the file which should contains the pid
#                   of catalina startup java process, when start (fork) is used
#
# $Id: catalina.sh 656834 2008-05-15 21:04:04Z markt $
# -----------------------------------------------------------------------------

$CATALINA_HOME/bin/catalina.shにコメントで記載されている。Tomcat初心者な自分としてはTOMCAT_HOMEじゃなくてCATALINA_HOMEなところに、ちょっとした憤りを覚える。ちょっとググったら昔はTOMCAT_HOMEだったというページも見かけた。

CATALINA_HOMEとCATALINA_BASE

$CATALINA_BASEはOptionalとなっているので、通常は$CATALINA_HOMEと同じディレクトリを指しているはず。別のパスを設定することで、Tomcatのエンジン部分とデータ部分の分離が可能。

$CATALINA_HOME
Tomcatエンジン部分。
$CATALINA_BASE
Tomcatデータ部分。

$CATALINA_BASE/conf

$ ls conf -1
catalina.policy
catalina.properties
context.xml
logging.properties
server.xml
tomcat-users.xml
web.xml

設定ファイルが配置されている。Tomcatをアップグレードすると上書きされるので、ここのファイルを直接編集する事はお勧めされていないらしい。

Tomcatディレクトリ構成

$ tree -d
.
|-- bin                              #catalina.shなど
|-- conf                             #tomcatの編集すべきではない方の設定ファイル
|-- lib                              #catalina.jarやtomcat-coyote.jarなど、Tomcatを構成するプログラム
|-- logs                             #ログファイル
|   |-- catalina.out                 #Tomcatのログ
|   `-- localhost.log                #jspのコンパイルに失敗した場合の例外とか書き出されるらしい。
|-- temp
|-- webapps                          #アプリのデプロイ先
|   |-- sample.war                   #設定次第だけど、ここにwarを置くと、1個したのように展開される。
|   `-- sample                       #この場合は「sample」という名前のアプリ。サーブレットと呼んでもいいのかな?
|       |-- META-INF                 #sampleサーブレットの設定などを置く。HTTPを介してアクセスできない場所。
|       |   |-- context.xml          #sampleサーブレットの設定の内、コンテキスト部分を記述する。コンテキストが何かは不明。
|       `-- WEB-INF                  #sampleサーブレットの設定などを置く。HTTPを介してアクセスできない場所。
|           |-- web.xml              #sampleサーブレットの設定。デプロイメントディスクリプタと呼ぶらしい。
|           |-- classes              #sampleのプログラム。コンパイル済みの.classファイルを置く。
|           `-- lib                  #sampleサーブレットが利用するライブラリ。基本.jarファイル
`-- work                             #JSPがコンパイルされて生成されたサーブレットが配置される

環境

Windows Windows7
Cygwin 1.7.11-1
Java java version "1.7.0_03"
Tomcat Apache Tomcat/6.0.18

その他

2012-03-13頃に書き始めたんだけど、ほっといたら4月になっちゃった。