Tomcat

SSLの設定

SSLの鍵を次のコマンドにより生成

$ keytool -genkey -alias tomcat -keyalg RSA

server.xmlを次のように記述

   <Connector port="8443" maxHttpHeaderSize="8192"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups="false" disableUploadTimeout="true"
              acceptCount="100" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" 
              keystoreFile="c:/tmp/.keystore"
              keystorePass="tomcat"/>

クラスタ

エンコーディングの設定

TomcatはデフォルトでGETパラメータのURIのエンコーディングにutf-8を利用するようになっている。そのため、幾つかのWebブラウザではURIのエンコーディングに現時表示しているページの文字列を利用するため、文字化けが発生する。 Connecter要素でuseBodyEncodingForURI=trueとすると、サブミットを行うページのエンコーディングでURIをデコードするようになり、文字化けを回避できる。さらに。Connecter要素のURIEncoding属性で文字コードを設定すると、GET時のURIのエンコードを指定できる。

設定例

Windows-31JでURIをデコードする。

<Connector
   port="8080"
   redirectPort="8443"
   minSpareThreads="25"
   connectionTimeout="20000"
   maxSpareThreads="75"
   URIEncoding="Windows-31J"
   maxThreads="150"
   maxHttpHeaderSize="8192">
</Connector>

HTMLのボディのエンコーディングでデコードする。

<Connector
   port="8080"
   redirectPort="8443"
   minSpareThreads="25"
   connectionTimeout="20000"
   maxSpareThreads="75"
   useBodyEncodingForURI="true"
   maxThreads="150"
   maxHttpHeaderSize="8192">
</Connector>

下記の設定では、useBodyEncodingForURIの設定が優先され、URIEncodingが無視される。

<Connector
   port="8080"
   redirectPort="8443"
   minSpareThreads="25"
   connectionTimeout="20000"
   maxSpareThreads="75"
   useBodyEncodingForURI="true"
   URIEncoding="Windows-31J"
   maxThreads="150"
   maxHttpHeaderSize="8192">
</Connector>

ネイティブなコネクションを取得

Tomcatのコネクションプーリングを利用すると、JDBCドライバネイティブのコネクションが利用できない。そのため、PostgreSQLのLargeObject?やOracleのBLOBを利用したい場合に困ってしまう。また、厄介なことにデフォルトの設定では、コネクションプーリングのコネクションからネイティブのコネクションが取得できないようになっている。ネイティブなコネクションを取得するには、次のようにserver.xmlで設定する。

<Resource 
  ...
  accessToUnderlyingConnectionAllowed="true"
  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
  ...
 />

Tomcat5.0では、org.apache.commons.dbcp.BasicDataSourceFactory?であるが、 Tomcat5.5からは、Commons DBCPをTomcat固有に名前を変えているため、上記 のようにorg.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory?と指定する。

上記の設定を行った上で、PostgreSQLのコネクションオブジェクトを取得するには次のようにする。

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MyDataSource");
Connection conn = ds.getConnection();

Connection pgCon = 
   ((org.apache.tomcat.dbcp.dbcp.DelegatingConnection)con).getInnermostDelegate();
LargeObjectManager lom =
   ((PGConnection)pgCon).getLargeObjectAPI();

Tomcat上で取得したコネクションの実装はDelegatingConnection?となっている ため、DelegatingConnection?にキャストしgetInnermostDelegate?メソッドでDB ネイティブなコネクションを取得する。

TomcatでJTAを利用

http://jotm.objectweb.org/current/jotm/doc/howto-tomcat-jotm.html

Log4jの罠

commons-loggingとlog4jを利用した場合、下記のようなメッセージが延々と出力される場合がある。

2005-12-14 23:31:53,663 DEBUG [main] digester.Digester (Digester.java:1262)
 -   New match='web-app/welcome-file-list'
2005-12-14 23:31:53,673 DEBUG [main] digester.Digester (Digester.java:1286)
 -   No rules found matching 'web-app/welcome-file-list'.
2005-12-14 23:31:53,673 DEBUG [main] digester.Digester (Digester.java:932)
 - characters(
   )

この場合、log4jの設定を変更して、org.apache以下のパッケージに対して、ログを出力しないようにすればよい。

 <category name="org.apache">
   <priority value="info" />
 </category>

JSP2.1を利用

Tomcat5.5.xはJSP2.0しかサポートしていない。J2EE5からサポートされるJSF1.2を利用するためには、JSP2.1が必要となるが、Tomcat5.5.xでは使えないことになる。ここで、Tomcat 6.xのjasperを利用すると、JSF1.2が使えるようになる。下記の場所から

http://tidus.ultimania.org/tmp/tomcat-jsp21.zip

jsp21に対応したjasper、jsp-api、elをダウンロードし、Tomcatのホームディレクトリに展開すると、Tomcat5.5.xがJSP2.1対応にすることができる。ソースコードは、こちらを参照。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-10-19 (火) 21:21:36 (5378d)