内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
java:tomcat
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Tomcat ====== [[http://tomcat.apache.org|Tomcat]] Apacheプロジェクト下で作成されているWebアプリケーションサーバ。J2EEサーブレットAPI仕様を実装している。最新版のTomcat 6は[[http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index.html|JSR-154 Servlet 2.5]]の実装である。 困った事にTomcatに関するネット上の情報には誤った情報、かつては正しかったが今では通用しない情報などが非常に多い。たとえばTomcatとApacheを連携するときはTomcatを先に起動すると言われているが、今ではその必要はない。情報は必ずTomcat公式サイトの文書で確認すること。もちろんこのページの内容も鵜呑みにしてはいけない。 ===== バーチャルホスト ===== Tomcat単体でもバーチャルホストに対応している。server.xmlのHost要素を追加し、nameにドメイン、appBaseにwebアプリケーションをデプロイするディレクトリを指定 <code xml> <Host name="www.paulownia.jp" appBase="webapps_www" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> <Host name="test.paulownia.jp" appBase="webapps_test" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </code> 実はhost-managerで管理できる(http://localhost:8080/host-manager/html)adminロールを持ったユーザでアクセスすること。 Apacheと連携するとき、mod_proxy_ajpで連携、かつ名前ベースのバーチャルホストの場合を使っていると <code> <VirtualHost *> ServerName test1.paulownia.jp <Location /hoge/> ProxyPass ajp://test2.paulownia.jp/hoge/ </Location> </VirtualHost> </code> と書いても test2.paulownia.jp/hoge/ ではなく test1.paulownia.jp/hoge/ に行ってしまうようだ。mod_proxy_ajpのバージョンによっては修正されているかもしれないので注意すること。(Apache 2.2.3付属のmod_proxy_ajpで確認) ===== コンテキストパスを階層化する ===== hoge.warをwebappsに設置するとアプリケーションのURLは http://localhost:8080/hoge/ となる。例えばこれを http://localhost:8080/fuga/hoge/ にしたい。 fuga#hoge.xmlを作成 <Context path="/fuga/hoge" /> fuga#hoge.xmlを設置 ${CATALINA_HOME}/conf/Catalina/localhost/fuga#hoge.xml hoge.warを設置 ${CATALINA_HOME}/webapps/fuga/hoge.war Tomcatを起動する。 ===== バージョン ===== バージョンを調べる $CATALINA_HOME/bin/version.sh Linuxパッケージ等インストールモノ等でversion.shが無い場合 java -cp $CATALINA_HOME/lib/catalina.jar org.apache.catalina.util.ServerInfo ===== mod_proxy_ajp ===== [[http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy_ajp.html|mod_proxy_ajp]] Apache2.2では、mod_jkではなくmod_proxy_ajpを使って連携するのが標準。mod_proxy_ajpはmod_jkと同じくajp13プロトコルを使ってTomcatと連携するモジュールである。 mod_proxy_ajpは標準でインストールされるので、設定ファイルを修正するだけですぐに利用できる。Tomcat側はAJPの待ち受けポートを開くだけであるが、デフォルト8009番でlistenしているので連繋させるだけなら設定は特に不要。ajpを使うならばHTTPリクエスト待ち受け(デフォルト8080)は不要だが、連携するApacheがリバースプロキシとして立っているならば無理に8080番ポートを閉じる必要はない。 <code> LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so <Location /hoge/> ProxyPass ajp://192.168.1.2:8009/hoge/ </Location> </code> 注意点は、mod_proxy.soを二度ロードしないようにすること。パスの終わりのスラッシュを忘れないこと。 ===== mod_proxy_balancer ===== [[http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy_balancer.html|mod_proxy_balancer]] mod_proxy_ajpを使うメリットの一つは、mod_proxy_balancerとの連携が可能な事。mod_proxy_balancerはApacheをロードバランサとして使えるようにするモジュール。比較的新しいモジュールであるため、まだ事例が少ないが、どうやらピーク時秒間500リクエストを捌けるという事例があるようだ。 <code> ProxyRequests Off <Location /hoge/> ProxyPass balancer://hoge/ stickysession=jsessionid nofailover=Off timeout=2 </Location> <Proxy balancer://hoge/> BalancerMember ajp://192.168.1.2:8009/hoge/ BalancerMember ajp://192.168.1.3:8009/hoge/ BalancerMember ajp://192.168.1.4:8009/hoge/ smax=1 loadfactor=20 # 弱いサーバ </Proxy> </code> こちらもパスの最後のスラッシュを忘れないようにすること。nofailoverやstickysessionといったパラメータについては、必ず[[http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#proxypass|公式ドキュメント]]でチェックすべし。ここに書いてあるとおりにパラメータを設定しないこと! nofailoverがOff(デフォルトOff)の場合、バックエンドサーバが倒れた時そのサーバにアクセスしていたユーザのセッションを別のサーバに引き継ぐ。Tomcat同士でセッションレプリケーションしている必要がある。 ===== Comet ===== Tomcat 6以降、非同期IOを実装した事でCometアプリケーションの作成が可能となった。 ===== useBodyEncodingForURI ===== URIのURIエンコーディングを戻すかどうかの設定。server.xmlのConnector要素に書く <code xml> <!-- Tomcatに直接HTTPアクセスする場合 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" /> <!-- mod_proxy_ajpで連携する場合 --> <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" useBodyEncodingForURI="true" /> </code> useBodyEncodingForURIはにcontentTypeの値かhttpServletRequest#setCharacterEncodingで指定した値でエンコーディングされているとみなすので、contentTypeが渡されてこないとデコードされない(ケータイでは送られないことがある?)。そのような場合はURIEncoding要素でエンコーディングを指定するか、アプリ内部でsetCharacterEncodingを指定する。 http://tomcat.apache.org/tomcat-5.5-doc/config/http.html 最近URIencoding属性に変わったらしい <code xml> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIencoding="UTF-8 /> </code> ===== クラスローダ ===== Tomcat 5まで * $CATALINA_HOME/common - サーブレットエンジンとWebアプリケーションで共有されるクラス。JNDIやTomcatの認証で使うライブラリはココ * common/lib - jarファイル * common/classes - jarパッケージされてないクラスファイル * $CATALINA_HOME/shared - Webアプリケーションで共有されるクラス。Tomcat本体には読まれない * shared/lib - jarファイル * shared/classes - jarパッケージされてないクラスファイル * $CATALINA_HOME/server - サーブレットエンジンそのもの。ここのファイルはWebアプリからロードできない * shared/lib - jarファイル [[http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html|The Apache Tomcat 5.5 Servlet/JSP Container Class Loader HOW-TO]]
java/tomcat.txt
· 最終更新:
2011/01/13 10:59
by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ