[[Tomcat]] *SSLの設定 *SSLの設定 [#a4fe683f] 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"/> *クラスタ *クラスタ [#z864bcc3] -http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html *エンコーディングの設定 *エンコーディングの設定 [#fd73a75f] TomcatはデフォルトでGETパラメータのURIのエンコーディングにutf-8を利用するようになっている。そのため、幾つかのWebブラウザではURIのエンコーディングに現時表示しているページの文字列を利用するため、文字化けが発生する。 Connecter要素でuseBodyEncodingForURI=trueとすると、サブミットを行うページのエンコーディングでURIをデコードするようになり、文字化けを回避できる。さらに。Connecter要素のURIEncoding属性で文字コードを設定すると、GET時のURIのエンコードを指定できる。 ***設定例 ***設定例 [#nb5027ea] 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> *ネイティブなコネクションを取得 *ネイティブなコネクションを取得 [#if3f9690] 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を利用 *TomcatでJTAを利用 [#h6ed5b00] http://jotm.objectweb.org/current/jotm/doc/howto-tomcat-jotm.html *Log4jの罠 *Log4jの罠 [#y7d3a5ab] 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を利用 *JSP2.1を利用 [#b1d36900] 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対応にすることができる。ソースコードは、こちらを参照。 -https://svn.apache.org/repos/asf/tomcat/jasper/tc6.0.x/ -https://svn.apache.org/repos/asf/tomcat/servletapi/servlet2.4-jsp2.0-tc5.x/jsr152/