Tomcat設定¶
- 目次
- Tomcat設定
はじめに¶
本記事は、Tomcat 10.1をベースに記述しています。
配備¶
warファイルの配備¶
warファイルの配置場所と自動展開有無¶
Tomcatのconf/server.xml にHost要素で配置場所とwarファイルの自動展開の設定を定義しています。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
- appBaseに、tomcatのインストールディレクトリしたディレクトリ下のアプリケーション配置ディレクトリを定義
- unpackWARsに、warファイルをアプリケーション配置ディレクトリに置いたときに自動で解凍・展開するかどうかを定義
- autoDeployに、Tomcatサーバー稼働中にwarファイルまたはアプリケーションのディレクトリ一式をアプリケーション配置ディレクトリに配置したときに、自動的に読み込むかどうかを定義。falseにするとTomcatサーバーの起動時にのみアプリケーションを読み込む。
context.xml¶
各アプリケーションごとに定義します。
- warファイルの/META-INF/context.xmlに、パラメータの設定、クラスパスの設定を記述し、web.xmlの設定を補足可能
- autoDeploy、deployOnStartupが有効なときは、context.xmlにpath属性を指定しても反映されない
memo
warファイルの/META-INFの下の設定ファイルは、サーブレットコンテナ製品によってファイル名、設定可能な範囲が異なります。
バージョニング¶
warファイル名を、アプリケーション名##バージョン名.war
と記述することで、コンテキストパスをアプリケーション名として展開し、バージョン名を変えることで同じアプリケーションの異なるバージョンを複数並行してアクセス可能となり、新しいセッションは新しいバージョンのアプリケーションに割り振られ、古いバージョンのアプリケーションのセッションはセッションが終了するまで古いバージョンのアプリケーションを使用します。
バージョンの新旧は、バージョン名の文字列的なオーダー(辞書順)になるようです。
JDBCドライバー¶
アプリケーションのWEB-INF/libに配置したドライバーを使用する場合、service providerの仕組みによるJDBCドライバーのロードができません。
Tomcatは、アプリケーションごとに異なるクラスローダーを使用するのですが、service providerは、システムクラスローダーでロードする必要があるので、Tomcatの $CATALINA_HOME/lib
か $CATALINA_BASE/lib
にJDBCドライバーを置く必要があるようです。
https://tomcat.apache.org/tomcat-10.0-doc/jndi-datasource-examples-howto.html
配置の検討¶
Tomcatの $CATALINA_HOME/lib
にJDBCドライバーを配置すると、
- 追加・更新の際にTomcatサーバーの再起動が必要となります。
- 同じドライバーでバージョン違いのものを配置するのは難しいかもしれません。
設定¶
Tomcatサーバー設定¶
リクエストおよびレスポンスのエンコーディング¶
<Tomcatインストールディレクトリ>/conf/web.xml には次の設定が記述されています。
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<!-- ======================== Introduction ============================== -->
<!-- This document defines default values for *all* web applications -->
<!-- loaded into this instance of Tomcat. As each application is -->
<!-- deployed, this file is processed, followed by the -->
<!-- "/WEB-INF/web.xml" deployment descriptor from your own -->
<!-- applications. -->
<!-- -->
<!-- WARNING: Do not configure application-specific resources here! -->
<!-- They should go in the "/WEB-INF/web.xml" file in your application. -->
<!-- Set the default request and response character encodings to UTF-8. -->
<request-character-encoding>UTF-8</request-character-encoding>
<response-character-encoding>UTF-8</response-character-encoding>
: 以降略
ここに、次の記述(再掲)があり、リクエストの文字コード、レスポンスの文字コードがUTF-8で定義されています。
これは、Servlet 4.0仕様で定義されたweb.xmlの要素です。
<request-character-encoding>UTF-8</request-character-encoding>
<response-character-encoding>UTF-8</response-character-encoding>
コネクタのエンコーディング¶
HTTP Connectorには、URIEncodingの属性があり、URIエンコーディング(%と文字コードで表現)のURIバイトの文字コードを指定します。
デフォルトはUTF-8となっています。
<Tomcatインストールディレクトリ>/conf/server.xml の Connector要素に記述します。
プログラミング¶
JNDIデータソース¶
データベースのコネクションプーリングとclose¶
Tomcatのドキュメントより、Preventing database connection pool leaks
https://tomcat.apache.org/tomcat-10.0-doc/jndi-datasource-examples-howto.html
- Webアプリケーションは明示的に ResultSet、Statement、Connectionをクローズすべき
- クローズされない場合、コネクションプールのリークが発生する