Tomcat 5.5.15 (+ mod_proxy_ajp + postgresql-jdbc) [FC5]

[サーバの実験室 Redhat/Fedora]

作成 : 2006/04/30

"サーバの実験室"の検索


Tomcatをインストール

パッケージをyumでインストール。 依存関係にあるパッケージ(いっぱいある)も一緒にインストールしてくれる。

# yum install tomcat5

....
Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 tomcat5                 i386       5.5.15-1jpp_6fc  core              311 k
Installing for dependencies:
 alsa-lib                i386       1.0.11-3.rc2.2   core              402 k
 ant                     i386       1.6.5-1jpp_7fc   core              2.0 M
 axis                    noarch     1.2.1-2jpp_2fc   core              1.5 M
 bcel                    noarch     5.1-1jpp_6fc     core              459 k
 binutils                i386       2.16.91.0.6-5    updates           3.4 M
 classpathx-jaf          noarch     1.0-2jpp_5fc     core               57 k
 classpathx-mail         noarch     1.0-4jpp_5fc     core              351 k
 cpp                     i386       4.1.0-3          core              2.4 M
 eclipse-ecj             i386       1:3.1.2-1jpp_13fc  core              7.0 M
 gcc                     i386       4.1.0-3          core              4.2 M
 gcc-java                i386       4.1.0-3          core              2.6 M
 geronimo-specs          i386       1.0-0.M2.2jpp_7fc  core              227 k
 geronimo-specs-compat   i386       1.0-0.M2.2jpp_7fc  core              4.9 k
 gjdoc                   i386       0.7.7-3.1        core              1.1 M
 glibc-devel             i386       2.4-4            core              1.9 M
 glibc-headers           i386       2.4-4            core              601 k
 gnu-crypto              i386       2.1.0-1jpp_2fc   core              1.6 M
 jakarta-commons-beanutils  i386       1.7.0-2jpp_6fc   core              517 k
 jakarta-commons-collections  i386       3.1-2jpp_5fc     core              984 k
 jakarta-commons-daemon  i386       1:1.0-2jpp_4fc   core               44 k
 jakarta-commons-dbcp    noarch     1.2.1-3jpp_3fc   core              109 k
 jakarta-commons-digester  i386       1.7-2jpp_10fc    core              308 k
 jakarta-commons-discovery  noarch     1:0.3-1jpp_3fc   core               71 k
 jakarta-commons-el      i386       1.0-4jpp_6fc     core              236 k
 jakarta-commons-fileupload  noarch     1:1.0-3jpp_5fc   core               24 k
 jakarta-commons-httpclient  noarch     1:3.0-0.rc2.0jpp_4fc  core              267 k
 jakarta-commons-launcher  noarch     0.9-3jpp_3fc     core               42 k
 jakarta-commons-logging  i386       1.0.4-2jpp_10fc  core              105 k
 jakarta-commons-modeler  i386       1.1-4jpp_6fc     core              225 k
 jakarta-commons-pool    noarch     1.2-2jpp_4fc     core               46 k
 java-1.4.2-gcj-compat   i386       1.4.2.0-40jpp_83rh  core              2.2 M
 java-1.4.2-gcj-compat-devel  i386       1.4.2.0-40jpp_83rh  core               35 k
 jessie                  i386       1.0.1-3          core              818 k
 jpackage-utils          noarch     1.6.6-1jpp_2rh   core               50 k
 ldapjdk                 noarch     4.17-1jpp_3fc.1.1  core              388 k
 libXtst                 i386       1.0.1-1.2        core               15 k
 libart_lgpl             i386       2.3.17-2.2.1     core               75 k
 libgcj                  i386       4.1.0-3          core               12 M
 libgcj-devel            i386       4.1.0-3          core              1.2 M
 libgomp                 i386       4.1.0-3          core               38 k
 log4j                   noarch     1.2.8-7jpp_8fc   core              317 k
 mx4j                    i386       1:3.0.1-1jpp_9fc  core              2.4 M
 oro                     noarch     2.0.8-1jpp_4fc   core               72 k
 regexp                  i386       1.3-2jpp_7fc     core               87 k
 tomcat5-common-lib      i386       5.5.15-1jpp_6fc  core              185 k
 tomcat5-jasper          i386       5.5.15-1jpp_6fc  core              955 k
 tomcat5-jsp-2.0-api     i386       5.5.15-1jpp_6fc  core               88 k
 tomcat5-server-lib      i386       5.5.15-1jpp_6fc  core              3.5 M
 tomcat5-servlet-2.4-api  i386       5.5.15-1jpp_6fc  core              144 k
 wsdl4j                  noarch     1.5.1-1jpp_4fc   core              160 k
 xalan-j2                i386       2.6.0-3jpp_9fc   core              3.8 M
 xerces-j2               i386       2.7.1-6jpp_7fc   core              3.1 M
 xml-commons             i386       1.3.02-0.b2.7jpp_7fc  core               19 k
 xml-commons-apis        i386       1.3.02-0.b2.7jpp_7fc  core              370 k
 xml-commons-resolver    noarch     1.1-1jpp_8fc     core               61 k
 zlib-devel              i386       1.2.3-1.2.1      core              101 k

Transaction Summary
=============================================================================
Install     57 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 65 M
....

とりあえずTomcatを起動

とりあえず、起動してみる。 warningが表示されるけど、気にしない。

# /etc/init.d/tomcat start

Starting tomcat5: find: warning: you have specified the -mindepth option after a non-option argument -type, but options are not positional (-mindepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

Using CATALINA_BASE:   /usr/share/tomcat5
Using CATALINA_HOME:   /usr/share/tomcat5
Using CATALINA_TMPDIR: /usr/share/tomcat5/temp
Using JRE_HOME:
                                                           [  OK  ]

プロセスが起動しているか、確認してみる。

# ps -ef | grep tomcat

tomcat   14741     1  4 21:52 ?        00:00:05 /usr/lib/jvm/java/bin/java -Djava.ext
.dirs=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext -Djava.endorsed.dirs=/usr/share
/tomcat5/common/endorsed -classpath /usr/lib/jvm/java/lib/tools.jar:/usr/share/tomcat
5/bin/bootstrap.jar:/usr/share/tomcat5/bin/commons-logging-api.jar:/usr/share/java/mx
4j/mx4j-impl.jar:/usr/share/java/mx4j/mx4j-jmx.jar -Dcatalina.base=/usr/share/tomcat5
 -Dcatalina.home=/usr/share/tomcat5 -Djava.io.tmpdir=/usr/share/tomcat5/temp org.apac
he.catalina.startup.Bootstrap start

JSPファイルを作成

"こんにちは"と表示するだけのJSPファイルHelloWorld.jspを作成する。 文字コードセットは"UTF-8"で保存して、/var/www/webapps/jsp-test/ディレクトリに置いておく。

<%@ page contentType="text/html; charset=UTF-8" %>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="content-type" content="text/html" />
<title>Hello World</title>
</head>
<body>
<p>
<%
  out.println("こんにちは");
%>
</p>
</body>
</html>

文字コードセット"EUC-JP"を使うなら、1行目のcharsetと2行目のencodingを変更する。

<%@ page contentType="text/html; charset=EUC-JP" %>
<?xml version="1.0" encoding="EUC-JP"?>

Tomcatの設定(server.xml)

Tomcat設定ファイル/etc/tomcat5/server.xmlを編集して、/var/www/webapps/jsp-test/ディレクトリに置いたJSPファイルを処理できるようにする。 ブラウザで"http://hoge.nina.jp/jsp/HelloWorld.jsp"を指定したとき、JSPファイルにアクセスできるようにしてみる。

<!-- /etc/tomcat5/server.xml -->
<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.core.AprLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>

  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved"
           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
    <Engine name="Catalina" defaultHost="hoge.nina.jp">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

      <!--コメントをはずすと、送受信したヘッダ情報を/var/log/tomcat5/catalina.outに書き出してくれる-->
      <!--デバッグしたいときに便利-->
      <!--
      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
      -->

      <!--ブラウザでアクセスするときに指定するホスト名と同じにすること-->
      <!--間違えると"No Host matches server name xxxx"エラー(RequestDumperValve有効時ログに出力される)になって、真っ白なページが表示される-->
      <Host name="hoge.nina.jp"
       appBase="/var/www/webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

        <!--pathは、後で出てくるproxy_ajpの設定とあわせること-->
        <!--docBaseは、JSPファイルを置いたディレクトリを指定-->
        <Context path="/jsp" docBase="jsp-test"
         debug="0" reloadable="true"/>

        <!--アクセスログの設定-->
        <!--/var/log/tomcat5/ディレクトリに保存される-->
        <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="hoge_access_log." suffix=".txt"
                 pattern="common" resolveHosts="false"/>

      </Host>

    </Engine>
  </Service>
</Server>

設定したら、tomcatサービスを再起動しておく。

# /etc/init.d/tomcat5 restart

httpdの設定(proxy_ajp.conf)

httpd-2.2から、Tomcatと連携するためのコネクタmod_proxy_ajpがパッケージに含まれるようになったらしい。 連携のための設定は、/etc/httpd/conf.d/proxy_ajp.confに記述する。

# /etc/httpd/conf.d/proxy_ajp.conf

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# server.xmlに記述したコンテキストパスと同じにすること
ProxyPass /jsp/ ajp://localhost:8009/jsp/

設定したら、httpdサービスを再起動しておく。

# /etc/init.d/httpd restart

ブラウザからアクセスしてみる

ブラウザから"http://hoge.nina.jp/jsp/HelloWorld.jsp"にアクセスしてみる。 ...真っ白。 ログにへんなエラーが残っている。

# tail -f /var/log/tomcat5/catalina.out

[error] (13)Permission denied: proxy: AJP: attempt to connect to 127.0.0.1:8009 (localhost) failed
[error] ap_proxy_connect_backend disabling worker for (localhost)
[error] proxy: AJP: failed to make connection to backend: localhost

SELinuxを無効にしたら、ちゃんと"こんにちは"が表示された。

# /etc/syscofig/selinux
....
#SELINUX=enforcing
SELINUX=disabled
....

静的ページの文字エンコーディング

/var/www/webapps/jsp-test/ディレクトリに置いた静的なページ(*.html)は、httpdでのDefaultCharset指定に関係なくUTF-8として表示されてしまうようだ。 なので、EUCやSJISのページは文字化けしてしまう。 web.xmlのmime-typeで指定しちゃっていいのかなあ...

# /etc/tomcat5/web.xml
# または、/var/www/webapps/jsp-test/WEB-INF/web.xml
....
<mime-mapping>
    <extension>html</extension>
    <mime-type>text/html; charset=EUC-JP</mime-type>
</mime-mapping>
....

PostgreSQL用JDBCドライバ

JavaサーブレットやJSPでPostgreSQLサーバに接続するときに必要。 yumでインストールできる。

# yum install postgresql-jdbc

インストールしただけでは、クラスが見つからないのでエラーになる。

java.lang.ClassNotFoundException: org.postgresql.Driver

JREのエクステンションディレクトリにjarファイルのシンボリックリンクを作成しておく。

# cd /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext/
# ln -s /usr/share/java/postgresql-jdbc3.jar .

[サーバの実験室 Redhat/Fedora]