- Tomcat/4.0.5の単体起動
- 設定ファイルの作成
- Tomcatの起動
- 動作確認
- Tomcat/5.5.27の単体起動
- 設定ファイルの作成
- Tomcatの起動
- 動作確認 Screen 94
- Webアプリケーションマネージャ用ユーザの追加
- Apache/1.3.41の単体起動
- 設定ファイルの作成
- Apacheの起動
- 動作確認
- Apache/2.0.63の単体起動
- 設定ファイルの作成
- Apacheの起動
- 動作確認
- Apache/1.3.22とTomcat/4.0.5の連携
- httpd.confの修正
- tomcat.confの修正(修正の必要なし、参考まで)
- Tomcat側コネクタの設定
- Tomcat、Apacheの起動
- 動作確認
- Apache/1.3.22とTomcat/5.5.27の連携
- tomcat.confのバックアップをとる。
- tomcat.confの編集
- workers.propertiesの作成
- Tomcat側コネクタの設定
- Tomcat、Apacheの起動
- 動作確認
- Apache/2.0.63とTomcat/5.5.27の連携
- httpd.confの修正
- Tomcat、Apacheの起動
- 動作確認
- rcスクリプトからの起動
- ファイル所有者の変更
- JSPでのOracleへの接続
- JDBCドライバのコピー
- JDK 1.4 / 5.0 ojdbc14.jar JDBCクラス
- JDK 1.2 / 1.3 classes12.jar JDBCクラス
- Tomcat/5.5.27の場合には/jsp-examples/WEB-INF/lib以下にコピーして、Tomcatユーザ(nobody:apacheから起動がかかるのでそれと同じユーザー)がロードできるように読み取り権限を付与することに注意。
- Tomcat/4.0.5の場合には「/var/apache/tomcat/webapps/examples/WEB-INF/lib」ディレクトリを作成してコピーする、他はTomcat/5.5.27とじ。
- JSPの作成
- Tomcat/5.5.27・・・/var/apache/tomcat55/webapps/jsp-examples/db.jsp
- Tomcat/4.0.5・・・/var/apache/tomcat/webapps/examples/jsp/db.jsp
- 動作確認
Solaris 10 には、ApacheはVersion 1.3.41と2.0.63(以降Apache/1.3.41、Apache/2.0.63)が、Tomcat はVersion 4.0.5と5.5.27(以降Tomcat/4.0.5、Tomcat/5.5.27)が付属している。これらはほんの少しの設定を行うことにより、稼動状態になるようにパッケージングされている。さらに、Tomcat はServlet/JSPの処理を行う「サーブレット・コンテナ」の機能だけではなく、単体でもWebサーバーとして機能するので、Tomcat単体、Apache単体、Apache/1.3.41とTomcat との組み合わせ等、何をWebサーバーとするのかで、多様な選択が可能になっている。
以下rootユーザーから実行する。
下記のように設定ファイルを作成して、Tomcatを起動して、動作確認を行う。
Tomcat の動作は設定ファイル「/var/apache/tomcat/conf/server.xml」で制御されるので、同パスにあるテンプレート「server.xml-example」をこれにコピーすることにより作成する。
TomcatはJava環境上で動作するので、Java環境の位置「JAVA_HOME」と、起動するTomcatの位置「CATALINA_BASE」を環境変数に定義して、「startup.sh」で起動させる。停止は「shutdown.sh」である。
Tomcatは起動するとserver.xmlで設定したポート8080でリスニングして待機状態であるので、クライアントのブラウザーからはURLに「http:// server_addr :8080」を指定して、HTTPリクエストをWebサーバーであるTomcatに送信すると、HTTPレスポンスの返信であるTomcat Version 4.0.5の画面が表示される。ここから「JSP Examples」、「Servlet Examples」をクリックして、それぞれのメニューからJSP・Servletのプログラムをクリックすると「サーブレット・コンテナ」としてのTomcatの動作確認ができる。
Screen 94
下記のように設定ファイルを作成して、Tomcatを起動して、動作確認を行う。
「apache」配下の「tomcat」ディレクトリには、Tomcat Version 4.0.5関連が入っている。その隣に「tomcat55」ディレクトリにはVersion 5.5.27関連が入っている。両ディレクトリは対称性があるため、起動方法はVersion 4.0.5と同じで、パスに「tomcat」とある場合はそれを、「tomcat55」と読み替えればよい。
画面左上にある「Administration」メニューにある項目へのアクセスするユーザーは下表のロールが必要である。
表96Administration | roles |
---|---|
Status | manager |
Tomcat Administration | admin |
Tomcat Manager | manager |
このために、ユーザー情報の設定ファイル「/var/apache/tomcat55/conf/tomcat-users.xml」を編集し、ユーザーの追加を行う。下記の例ではユーザー名:aaa、パスワード:bbbによって設定ファイルの編集を行った。編集が終了したら、shutdown.sh、startup.shコマンドによって再起動すれば設定が有効になる。
下記のように設定ファイルを作成して、Apacheを起動して、動作確認を行う。
Apache/1.3.41の動作は設定ファイル「/etc/apache/httpd.conf」によって制御されるので、同パスにあるテンプレート「httpd.conf-example」をこれにコピーすることにより作成する。
Apache/1.3.41の起動、停止は下記コマンドにオプションを付けて行う。起動は「start」、停止は「stop」である。
/usr/apache/bin/apachectl
ブラウザで下記のURLを指定する。
下記のように設定ファイルを作成して、Apacheを起動して、動作確認を行う。
Apache/2.0.63の動作は設定ファイル「/etc/apache2/httpd.conf」によって制御されるので、同パスにあるテンプレート「httpd.conf-example」をコピーすることにより作成する。
Apache/1.3.41の起動、停止はsvcadmコマンドでサービスの起動、停止をするという形を取る。起動は「enable」、停止は「disable」である。
ブラウザで下記のURLを指定する。
http:// server_addr
Apache、Tomcatの連携させるためには、Apache側では両者間を中継する拡張モジュールが必要になる。これをコネクタ(Web Server Connector)、またはアダプタ(Web Server Adapter)と呼び、Apache/1.3.22では下記のライブラリが用意されている。
コネクタは、クライアントのブラウザがApacheに投げたHTTPリクエストのURLのパスが、設定したパターンがと一致するときに、ファイルシステムのパスにマップし、中継ポートを経由して、「mod_webapp」はWARP/1.0プロトコル、「mod_jk」はAJP(Apache JServ Protocol)/1.3プロトコル、「mod_jserv」はAJP/1.2プロトコルでTomcatにスルーする。すなわちフロントエンドにApacheを立てて、バックエンドにTomcatを設置した、Webサーバーとアプリケーションサーバーの連携プレーが可能になるのだ。
Apache/1.3.22はTomcat/4.0.5との連携のコネクタに、「mod_webapp」を使用する。その際の処理は下記の設定ファイルによって制御されるので、設定状態の確認をして、必要ならば修正をする。
まずテンプレートをコピーして作成する。次にviにより、Includeディレクティブ行をコメントインして、ここにtomcat.confファイルを読み込むようにする。これによりhttpd.confの設定に続いてtomcat.confの設定が行われる。
ファイル末尾に「:$」で移動して、コメントインする。
デフォルトでコネクタはmod_webappを使用するように設定されているので、修正の必要はない。現状で下記のように定義されている。 (「LoadModule」ディレクティブで起動時に「mod_webapp」のmod_webappのダイナミックリンクライブラリをロードさせ、「AddModule」ディレクティブでソースコードを指定している。)
Tomcat側では先に行った「Tomcat/4.0.5の単体起動」のようにserver.xml をテンプレートからコピーするだけでよい。Tomcatが起動すればWarpConnectorが待ち受けている。
# cd /var/apache/tomcat/conf
# cp -p server.xml-example server.xml
server.xmlのConnectorタグの属性の意味は下記のとおりである。
属性 | 値 |
---|---|
className | インプリメントされているクラス名 |
port | サーバーソケットを形成して、待機しているTCPポート番号 |
minProcessors | コネクタが起動するとき作成するスレッド数 |
maxProcessors | 同時に受け付けたリクエストを処理するスレッド数の最大値 |
enableLookups | ホスト名をDNSから引くかどうか |
appBase | アプリーケーションのベースディレクトリ |
acceptCount | 接続リクエストの待ち行列の最大値。 |
debug | デバッグレベル |
server.xmlの記述は下記のようになっている。したがって、Tomcatが立ち上がった状態では8008番ポートにWARP 1.0プロトコルのメッセージが到着するのをリッスンしている。
<Connector
className="org.apache.catalina.connector.warp.WarpConnector"
port="8008"
minProcessors="5"
maxProcessors="75"
enableLookups="true"
appBase="webapps"
acceptCount="10"
debug="0"
/>
Tomcat、Apacheの起動はすでに組み込まれているrcスクリプトを使用する。下記のシェルスクリプトは名前こそ違っているがハードリンクが張られていて、ノード先の実体のコードは同じものであり、引数に「start」を付ければ起動、引数に「stop」を付ければ停止する処理が書かれている。
/etc/rc0.d/K16apache
/etc/rc1.d/K16apache
/etc/rc2.d/K16apache
/etc/rc3.d/S50apache
/etc/rcS.d/K16apache
上記のスクリプトは、これまでにTomcat、Apacheの単体起動で説明してきたのと同様に下記の「httpd.conf」、「server.xml」ファイルの有無と、その内容によって制御される。「server.xml」が存在すればその内容によってtomcatの起動、停止を行い、「httpd.conf」は同じようにApacheの制御をする。
なお、Tomcat/4.0.5用とTomcat/5.5.27用のserver.xmlが同時にある場合は、Tomcat/5.5.27が優先されて起動する。したがって前作業によって「/var/apache/tomcat55/conf/server.xml」が残っているならば削除する。
/var/apache/tomcat/conf/server.xml (Tomcat/4.0.5)
/var/apache/tomcat55/conf/server.xml (Tomcat/5.5.27)
rcスクリプトはランレベルが推移したときに、実行するのでシステムの起動と終了とTomcat、Apacheは同期して、自動起動と自動終了する。手動では、次のようにスクリプトに「start」引数を加えてタイプすればTomcat、apacheが起動して、「stop」引数を加えてタイプすれば終了する。
# /etc/init.d/apache start
# /etc/init.d/apache stop
これまでは直接Tomcat の8080ポートを指定して JSP、サーブレットのサンプル画面へ入っていたが、上記の「stop」と、「start」の操作をしてTomcat、Apacheを再起動した後は連携が有効になり、下記8080ポートの指定不要なURLの指定によって、ApacheからTomcatの「JSP Examples」、「Servlet Examples」へ入れるようになる。
http:// server_addr /examples/servlets
「Apache/1.3.22とTomcat/4.0.5の連携」と同じように「/etc/apache/httpd.conf」を修正する。これはすでに修正済みのはずなので省略する。「/etc/apache/tomcat.conf」はコネクタが「mod_webapp」に既定されているので、これを「mod_jk」に変更する。
/etc/apacheディレクトリに移動して、「tomcat.conf.org」の名前でバックアップをとり、viで「tomcat.conf」の編集に入る。
# cd /etc/apache
# cp -p tomcat.conf tomcat.conf.org
# vi tomcat.conf
コメントアウトするのは「mod_webapp」の定義、コメントインするのは「mod_jk」の定義である。網伏せの部分が修正した結果になる、すなわちコメントインされている場合はコメントアウト、コメントアウトされている場合はコメントインして、同名(:w)でセーブする。なお末尾の「JkMount /jsp-examples/* worker1」の行は原文にはない、追記する。
#
# Tomcat configuration file for apache - uses mod_webapp
# as the connector. Tomcat must already be running and listening
# on port 8008 before apache starts. This is typically handled
# by the S50apache startup script.
#
# This file should be 'include'd by the main apache config file.
#
# Load warp connector module
#
#LoadModule webapp_module libexec/mod_webapp.so
#AddModule mod_webapp.c
#
# Describe connections and contexts - default to examples only
#
#WebAppConnection conn warp localhost:8008
#WebAppDeploy examples conn /examples/
#
# Connector information - off by default for security reasons
#
# WebAppInfo /webapp-info
#
# When Apache Tomcat 5.5 is used mod_jk module has to be used instead
# of mod_webapp. In such case comment out above lines and uncomment
# and modify lines bellow.
#
LoadModule jk_module libexec/mod_jk.so
# You will need to create a file with worker definition with similar
# contents (e.g. /etc/apache/workers.properties):
#
# worker.list=worker1
# worker.worker1.type=ajp13
# worker.worker1.host=localhost
# worker.worker1.port=8009
JkWorkersFile /etc/apache/workers.properties
JkShmFile /var/apache/logs/mod_jk.shm
JkLogFile /var/apache/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /servlets-examples/* worker1
JkMount /jsp-examples/* worker1
JkWorkersFile:ワーカの定義ファイルのパスネーム
JkShmFile:共有メモリファイルのパスネーム
JkLogFile:ログファイルのパスネーム
JkLogLevel:ログレベル
JkLogStampFormat:日付/時刻フォーマット
JkMount:Tomcatのワーカに転送するURLパス。書式は次のとおり。
JkMount <URL prefix> <Worker name>
網伏せの部分はコメントインして、他の部分は削除して、別名(:w workers.properties)でセーブして、viを終了する。
…
削除
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
削除
…
worker.list <ワーカ名>:ワーカ名のリスト
worker.<ワーカ名>.type:ワーカのタイプ
worker.<ワーカ名>.host:接続するホスト名
worker.<ワーカ名>.port:接続するポート番号
Tomcat側では先に行った「Tomcat/5.5.27の起動方法」のようにserver.xml をテンプレートからコピーするだけでよい。Tomcaが起動すればAJP/1.3プロトコルの受信を始める。
# cd /var/apache/tomcat55/conf
# cp -p server.xml-example server.xml
<!-- Define an AJP 1.3
Connector on port 8009 -->
<Connector
port="8009"
enableLookups="false" redirectPort="8443"
protocol="AJP/1.3" />
これはApache/1.3.22とTomcat/4.0.5に同じなので参照されたい。
「JSP Examples」、「Servlet Examples」のURLは下記のようになる。
http:// server_addr /servlets-examples/
Apacheのプロキシ機能を使用してTomcatと連携する。httpd.confに連携に使用する必要なモジュール(mod_proxy_http, mod_proxy_ftp, mod_proxy, mod_proxy_connect)はすでにロードするように定義済みなので、ProxyPass ディレクティブを追加するだけでよい。
viにより、ProxyPass ディレクティブを追加する。
# cd /etc/apache
# vi httpd.conf
ファイル末尾に「:$」で移動して、次の2行を追加する。
proxypass /jsp-examples/ http://localhost:8080/jsp-examples/
proxypass /servlets-examples/ http://localhost:8080/servlets-examples/
これはApache/2.0.63とTomcat/5.5.27に同じなので参照されたい。
「JSP Examples」、「Servlet Examples」のURLは下記のようになる。
http:// server_addr /servlets-examples/
apache用のrcスクリプト(/etc/init.d/apache)を下記の網伏せ部分のように編集してapache2に対応させる。
#!/sbin/sh
#
# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use subject to license terms.
#
#ident "@(#)apache.sh 1.6 08/04/04 SMI"
CONF_FILE=/etc/apache2/httpd.conf
if [ -f ${CONF_FILE} ]; then
APACHE_HOME=/usr/apache2
RUNDIR=/var/run/apache2
CF=`egrep '^[ \t]*proxypass[ \t]' $CONF_FILE`
else
APACHE_HOME=/usr/apache
CONF_FILE=/etc/apache/httpd.conf
RUNDIR=/var/run/apache
CF=`egrep '^[ \t]*include[ \t]*/etc/apache/tomcat.conf' $CONF_FILE`
fi
PIDFILE=${RUNDIR}/httpd.pid
TOMCAT_CF=/var/apache/tomcat/conf/server.xml
TOMCAT55_CF=/var/apache/tomcat55/conf/server.xml
if [ ! -f ${CONF_FILE} ]; then
exit 0
fi
if [ ! -d ${RUNDIR} ]; then
/usr/bin/mkdir -p -m 755 ${RUNDIR}
fi
# see if we need to start/stop tomcat also
if [ -n "$CF" -a -f $TOMCAT55_CF ]; then
TOMCAT=yes55
TC_USER=`egrep '^[ \t]*User[ \t]' $CONF_FILE | nawk '{print $2}'`
elif [ -n "$CF" -a -f $TOMCAT_CF ]; then
TOMCAT=yes
TC_USER=`egrep '^[ \t]*User[ \t]' $CONF_FILE | nawk '{print $2}'`
else
TOMCAT=no
fi
TC_USER=`echo $TC_USER|awk '{print $1}'`
case "$1" in
start|startssl|sslstart|start-SSL)
/bin/rm -f ${PIDFILE}
cmdtext="starting"
if [ "x$TOMCAT" = xyes55 ]; then
(CATALINA_HOME=/usr/apache/tomcat55; export CATALINA_HOME; \
CATALINA_BASE=/var/apache/tomcat55; export CATALINA_BASE; \
JAVA_HOME=/usr/java; export JAVA_HOME; \
/bin/su $TC_USER -c \
"$CATALINA_HOME/bin/startup.sh") \
>/dev/null 2>&1
elif [ "x$TOMCAT" != xno ]; then
(CATALINA_HOME=/usr/apache/tomcat; export CATALINA_HOME; \
CATALINA_BASE=/var/apache/tomcat; export CATALINA_BASE; \
JAVA_HOME=/usr/java; export JAVA_HOME; \
/bin/su $TC_USER -c \
"$CATALINA_HOME/bin/startup.sh") \
>/dev/null 2>&1
fi
;;
restart)
cmdtext="restarting"
;;
stop)
cmdtext="stopping"
if [ "x$TOMCAT" = xyes55 ]; then
(CATALINA_HOME=/usr/apache/tomcat55; export CATALINA_HOME; \
CATALINA_BASE=/var/apache/tomcat55; export CATALINA_BASE; \
JAVA_HOME=/usr/java; export JAVA_HOME; \
/bin/su $TC_USER -c \
"$CATALINA_HOME/bin/shutdown.sh") \
>/dev/null 2>&1
elif [ "x$TOMCAT" != xno ]; then
(CATALINA_HOME=/usr/apache/tomcat; export CATALINA_HOME; \
CATALINA_BASE=/var/apache/tomcat; export CATALINA_BASE; \
JAVA_HOME=/usr/java; export JAVA_HOME; \
/bin/su $TC_USER -c \
"$CATALINA_HOME/bin/shutdown.sh") \
>/dev/null 2>&1
fi
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
echo "httpd $cmdtext."
/bin/sh -c "${APACHE_HOME}/bin/apachectl $1" 2>&1 &
status=$?
if [ $status != 0 ]; then
echo "exit status $status"
exit 1
fi
exit 0
rcスクリプトを見れば分かるように、httpd.confにApacheの実行ユーザーが定義されている。 Apacheはnobodyであり、apache2はwebservdである。このため/var/apache/tomcat55以下のnobodyユーザーのディレクトリを調べて、webservdユーザーに変更する。
# find /var/apache/tomcat55 -user nobody
…
# find /var/apache/tomcat55 -user nobody|xargs chown -R webservd
これまでのどの方法でも良いから、Tomcat を起動することが出来たら、JSPまたはServletによってOracleへの接続が可能になる。Oracleデータベースに接続して、DBアクセスの結果を表示する、ごく簡単なJSPを例示する。
Oracleへ接続するためには、まずJDBCドライバをTomcat にロードさせなければならない。JDBCドライバは/opt/app/oracle/product/10.2.0/jdbc/lib/配下に下記のものが置かれている。
ojdbc14_g.jar JDBCクラス(デバッグ、トレース)
ojdbc14dms.jar JDBCクラス - Dynamic Monitoring Serviceサポート
ojdbc14dms_g.jar JDBCクラス(デバッグ、トレース) - Dynamic Monitoring Serviceサポート
classes12dms.jar JDBCクラス - Dynamic Monitoring Serviceサポート
既にインストールされているJavaのバージョンは、1.5系なのでojdbc14系が最適であり、そのうち軽量、シンプルな「ojdbc14.jar」を使用する。
# cd /var/apache/tomcat55/webapps/jsp-examples/WEB-INF/lib
# cp /opt/app/oracle/product/10.2.0/jdbc/lib/ojdbc14.jar .
# chmod o+r ojdbc14.jar
# mkdir -p /var/apache/tomcat/webapps/examples/WEB-INF/lib
# cd /var/apache/tomcat/webapps/examples/WEB-INF/lib
# cp /opt/app/oracle/product/10.2.0/jdbc/lib/ojdbc14.jar .
# chmod o+r ojdbc14.jar
「USER_TABLES」から「TABLE_NAME」を読み取りそれを表示するJSPを作成する。出来るだけ短くするために、クローズ処理さえも省いたが、目的には十分である。ファイルパスは下記のとおり。
<%@ page language="java" pageEncoding="Windows-31J" contentType="text/html;charset=Windows-31J" %>
<%@ page import="java.sql.*" %>
<%
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
Connection con = DriverManager.getConnection(url,"scott", "tiger");
Statement stmt = con.createStatement();
String sql = "select table_name from user_tables";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
out.println(rs.getString("TABLE_NAME")+"<br>
");
}
} catch (Exception e) {
e.printStackTrace();
}
%>
ブラウザで下記のURLを指定する。
(Tomcat単体起動の場合はserver_addr:8080)Tomcat/4.0.5・・・「http://server_addr/examples/jsp/db.jsp」
Tomcat/5.5.27・・・「http://server_addr/jsp-examples/db.jsp」
Screen 97
0 件のコメント:
コメントを投稿