Tomcat 4 の設定 (JK2編)
Apache 2 を使って Tomcat の設定をしたくなったのでちょっとまとめてみます。なぜか、Apache-Tomcat のコネクタのトレンドがいろいろ変わるので毎回新しくなってしまいます。ということで今回はJK2 になります。だんだん設定が楽になっていくので良いのですが...
いつも Linux をもとに説明しているので今回は、Solaris 8 x86 を使用します。必要なすべてのモジュールが /usr/local/src にダウンロードされているものとして説明をします。また、ほとんどのモジュールを /usr/local にインストールします。
gcc, make,
perl, m4, autoconf, libtool
等の開発環境を http://www.sunfreeware.com/ からダウンロードして
Solaris にインストールしておいてください。gcc 以外は、バイナリーがない場合でも GNU のサイトからソースを入手して簡単に作ることができます。
(ソースを展開したディレクトリーで ./configure;make;make
install
を実行すると /usr/local/bin
にインストールされます)
# はプロンプトで、スーパーユーザー(root) での作業であることを意味します。
Java 2 Platform (SDK)
Solaris 8 x86 2/02 にインストールされている SDK はバージョンが 1.2.2 だったので新しい SDK を入手しインストールします。わざわざ新しいものを入手しなくても問題はないと思います。
Java(TM)
2 Platform, Standard Edition より J2SE
1.4.2 SDK をダウンロードします(ここでは、 NetBeans IDE無しの Solaris
x86 self-extracting file版を使用)。
# cd /usr/local # gzip -dc src/j2sdk-1_4_2_01-solaris-i586.sh Sun Microsystems, Inc. Binary Code License Agreement for the JAVATM 2 SOFTWARE DEVELOPMENT KIT (J2SDK), STANDARD EDITION, VERSION 1.4.2_X ... Do you agree to the above license terms? [yes or no] yes Unpacking... Checksumming... ... Done. #
/usr/local/j2sdk-1.4.2_01
というディレクトリーの下に JDK が展開されます。利用するシェルに応じた形式で、 JAVA_HOME,
CLASSPATH, PATH
環境変数を設定します。
sh, bash 系の場合:.profile, .bashrc に登録しておくと良い JAVA_HOME=/usr/local/j2sdk1.4.2_01 CLASSPATH=.:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME PATH csh 系の場合:.cshrc に登録しておくと良い setenv JAVA_HOME /usr/local/j2sdk1.4.2_01 setenv CLASSPATH .:$JAVA_HOME/lib/tools.jar set path=($path $JAVA_HOME/bin) 動作チェック: # java -version java version "1.4.2_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06) Java HotSpot(TM) Client VM (build 1.4.2_01-b06, mixed mode) #
Apache 2 + Tomcat 4.1
バイナリーおよびソースを入手します。ここでは、ドキュメントを記述する時点で最新のものを利用していますが、実際に利用する場合にはセキュリティ上問題のないものを入手するようにしてください。また、提供されているソースなどが改ざんされていないことを確かめる上で PGP や MD5 による署名を確認しておくと良いでしょう。
Apache2 (HTTP Server) | http://httpd.apache.org/download.cgi |
Tomcat 4 (Servlet 2.3/JSP 1.2) | http://jakarta.apache.org/tomcat/ |
tomcat-4.1.27.tar.gz |
HTTP サーバーであるApache 2.0 のインストール
DSO(Dynamic Shared Object) をサポートするように設定します。インストール後、-l
コマンドラインオプションで mod_so.c が有効になっていることを確認してみます(通常、ここまでテストしなくても良いですが...)。
# gzip -dc httpd-2.0.47.tar.gz | tar xf - # cd httpd-2.0.47 # ./configure --enable-so checking for chosen layout... Apache checking for working mkdir -p... yes ... # make # make install # /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_access.c mod_auth.c mod_include.c mod_log_config.c mod_env.c mod_setenvif.c prefork.c http_core.c mod_mime.c mod_status.c mod_autoindex.c mod_asis.c mod_cgi.c mod_negotiation.c mod_dir.c mod_imap.c mod_actions.c mod_userdir.c mod_alias.c mod_so.c #
Apache の設定ファイルである /usr/local/apache2/conf/httpd.conf
をチェックします。Solars
で既に HTTP サーバーが起動している場合、それを停止するか、新しくインストールした Apache の ポート
を変更(たとえば
8080、ただし Tomcat でデフォルトで設定されているポートがあるので注意が必要)する。特に Listen,
User, Group, ServerName
といったディレクティブはチェックしてください。
ディレクティブ | 説明 |
Listen | httpd (HTTPサーバー) が、監視するポートを指定します。 |
User | httpd (HTTPサーバー)を起動するときのオーナーを指定します。 |
Group | httpd (HTTPサーバー)を起動するときの group を指定します。#-1 に設定されていてうまく動作しないときがあるので、nobody など実際に許可を与えたいグループに設定する。 |
ServerName | httpd (HTTPサーバー)を起動するホストとポートを指定します。DNS に登録されていない場合、IP Address を指定します。 |
また、デフォルトの charset が ISO-8859-1 なので自分の作った各ページに charset をきちんと書いていないと文字化けすることがあります。日本語がメインのサイトならば、以下の設定にすると良い。
# edit /usr/local/apache2/conf/httpd.conf
# DefaultLanguage nl # デフォルト言語を ja にする DefaultLanguage ja #LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw # リストのオーダーを ja を先頭にする LanguagePriority ja en da nl et fr de el it kr no pl pt pt-br ltz ca es sv tw # AddDefaultCharset ISO-8859-1 コメントアウト # AddDefaultCharset EUC-JP または、ISO-2022-JP, EUC-JP, shift_jis に設定
設定が終わったら、チェックします。
# /usr/local/apache2/bin/apachectl configtest Syntax OK #
実際に動かして、起動するかも確認しましょう。動作確認が終わったら、終了させておきます。
# /usr/local/apache2/bin/apachectl start # ps -ef ... root 28597 1 0 03:45:25 ? 0:01 /usr/local/apache2/bin/httpd -k start nobody 28600 28597 0 03:45:26 ? 0:00 /usr/local/apache2/bin/httpd -k start ... # /usr/local/apache2/bin/apachectl stop
ブラウザーからアクセスしたりプロセスを確認したときに、httpd が起動されていなかった場合、/usr/local/apache2/logs/error_log
の内容をチェックしてエラーの原因を解決してください。
Servlet/JSPコンテナーである Tomcat のインストール
必要なものが揃っているバイナリ版(jakarta-tomcat-4.1.27.tar.gz)をインストールします。Pure Java なコードなのでバイナリーがどのマシンでも動作します...ここでは説明しませんが、もしソースから作る場合、多くのアーカイブが必要になります。ソースパッケージに含まれるBUILDING.txt を参照してください(ANTを利用してコンパイル)。また、展開するための tar コマンドですが、GNU Tar でないとうまく展開できない可能性があります。
# cd /usr/local # gzip -dc src/tomcat-4.1.27.tar.gz | tar xpf -
sh, bash 系の場合:.profile, .bashrc に登録しておくと良い CATALINA_HOME=/usr/local/jakarta-tomcat-4.1.27 export CATALINA_HOME csh 系の場合:.cshrc に登録しておくと良い setenv CATALINA_HOME /usr/local/jakarta-tomcat-4.1.27
ApacheとTomcatを連携させるためのコネクタのインストール
発展せずに終わってしまった WEBARP は気にせず、JK2をインストールします。相変わらず、コネクタのバイナリーが用意されていないのでソース(jakarta-tomcat-connectors-jk2-2.0.2-src.tar.gz)から作ります。また、GNU make を使用しないとうまくコンパイルできません。(ここでは gmake と表記しています)
# cd /usr/local/src # gzip -dc jakarta-tomcat-connectors-jk2-2.0.2-src.tar.gz | tar xf - # cd jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2 # ./configure --with-apxs2=/usr/local/apache2/bin/apxs checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ... config.status: creating ../build.properties config.status: creating scripts/build/unix/dummy config.status: executing depfiles commands # gmake # cd .. # cp build/jk2/apache2/mod_jk2.so /usr/local/apache2/modules/ # cp build/jk2/apache2/jkjni.so /usr/local/apache2/modules/
ワーカーの設定は、 conf/workers2.properties
ファイルをそのまま /usr/local/apache2/conf
にコピーしても良いのですが動作させる上で最小限の設定を新たに設定します。
# edit /usr/local/apache2/conf/workers2.properties
# ログファイルの設定 [logger.file:0] level=ERROR file=${serverRoot}/logs/jk2.log # 通信チャンネルの定義 [channel.socket:localhost:8009] info=Ajp13 forwarding over socket tomcatId=localhost:8009 # Tomcat の examples Web アプリケーションを Web サーバ URI 空間にマップ [uri:/examples/*] info=Map the whole webapp # ステータス監視ワーカーの設定 [status:] [uri:/jkstatus/*] group=status: # 共有メモリー [shm:] disabled=1
Apache の設定ファイル httpd.conf に mod_jk2 モジュールをロードする設定を追加します。
# edit /usr/local/apache2/conf/httpd.conf LoadModule jk2_module modules/mod_jk2.so
変更したの設定ファイル httpd.conf をチェックします。
# /usr/local/apache2/bin/apachectl configtest Syntax OK #
Tomcat自身は、HTTPサーバとして使用しないので設定ファイルを変更(コメントアウト)します。
# cd /usr/local/jakarta-tomcat-4.1.27/conf # edit server.xml <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> <!-- <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true" /> -->
動作させるには、まず、Tomcat を起動してから Apache を起動します。
Tomcat の起動: # /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh start Using CATALINA_BASE: /usr/local/jakarta-tomcat-4.1.27 Using CATALINA_HOME: /usr/local/jakarta-tomcat-4.1.27 Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.1.27/temp Using JAVA_HOME: /usr/local/j2sdk1.4.2_01 Tomcat の停止: # /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh stop Using CATALINA_BASE: /usr/local/jakarta-tomcat-4.1.27 Using CATALINA_HOME: /usr/local/jakarta-tomcat-4.1.27 Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.1.27/temp Using JAVA_HOME: /usr/local/j2sdk1.4.2_01
最後に Apache を起動して、ブラウザーを使って動作確認をします。
# /usr/local/apache2/bin/apachectl start
ブラウザーで http://<servername>/examples/jsp/dates/date.jsp にアクセスすることできちんと動作しているか確認できます。
まだ動作確認していないので間違っているかもしれません。 現在の設定では、Apache と Tomcat がソケットを利用して通信します。しかし、JNI を利用することで、TomcatがApacheの内部プロセスとして起動させることができるようになります。 # edit /usr/local/apache2/conf/workers2.properties # ログファイルの設定 [logger.file:0] level=ERROR file=${serverRoot}/logs/jk2.log [config:] TOMCAT_HOME=/usr/local/jakarta-tomcat-4.1.27 JAVA_HOME=/usr/local/j2sdk1.4.2_01 # 通信チャンネルの定義 [channel.jni:jni] info=The jni channel, used if tomcat is started inprocess # Java バーチャルマシンのパラメータの定義 [vm:] info=Parameters used to load a JVM in the server process OPT=-Djava.class.path=${TOMCAT_HOME}/bin/tomcat-jni.jar;${TOMCAT_HOME}/server/li b/commons-logging.jar;${JAVA_HOME}/lib/tools.jar OPT=-Dtomcat.home=${TOMCAT_HOME} OPT=-Dcatalina.home=${TOMCAT_HOME} OPT=-Xmx128M # JNI ワーカの起動時ハンドラ [worker.jni:onStartup] info=Command to be executed by the VM on startup. This one will start tomcat. class=org/apache/jk/apr/TomcatStarter ARG=start stdout=${serverRoot}/logs/stdout.log stderr=${serverRoot}/logs/stderr.log # JNI ワーカの終了時ハンドラ [worker.jni:onShutdown] info=Command to be executed by the VM on shutdown. This one will stop tomcat. class=org/apache/jk/apr/TomcatStarter ARG=stop # Tomcat の examples Web アプリケーションを Web サーバ URI 空間にマップ [uri:/examples/*] info=Map the whole webapp # ステータス監視ワーカの設定 [status:] [uri:/jkstatus/*] group=status: # 共有メモリ [shm:] disabled=1 # edit /usr/local/jakarta-tomcat-4.1.27/conf/jk2.properties ## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED |
各プログラムの起動とシステムへの登録
各ユーザーが設定しておくと便利な環境変数
sh, bash 系の場合 | JAVA_HOME=/usr/local/j2sdk1.4.2_01 CATALINA_HOME=/usr/local/jakarta-tomcat-4.1.27 PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin export JAVA_HOME CATALINA_HOME PATH |
csh 系の場合 | setenv JAVA_HOME /usr/local/j2sdk1.4.2_01 setenv CATALINA_HOME /usr/local/jakarta-tomcat-4.1.27 set path=($path $JAVA_HOME/bin $CATALINA_HOME/bin) |
システム起動時に自動的に Tomcat や Apache を起動させたい場合、/etc/init.d に以下のスクリプトをコピーして /etc/rc2.d でスタートさせるようにする。JNI を利用している場合、Apache のスクリプトのみでよい。
Tomcat | /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh start /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh stop |
Apache | /usr/local/apache2/bin/apachectl start /usr/local/apache2/bin/apachectl stop |
Webアプリケーションの登録
コンパイルした Java のコード(Servlet)を、Web アプリケーションとして利用できるようにするには、決められたディレクトリー構成と幾つかの設定ファイルが必要になります。まず、web.xml にサーブレットを登録することで、WEB-INF/classesの下に置いたServletをマップした名前でアクセス出来るようになります。ここでは、mytest という Webアプリケーションの登録を例に説明します。
【JSPのサンプル】
<%@ page contentType="text/html; charset=EUC-JP" %> <html><body> <% out.println("<h2>Hello World !!</h2>"); out.println("<p>JSPのサンプル</p>"); %> </body></html>
【サーブレットのサンプル】
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); res.setContentType("text/html; charset=EUC-JP"); out.println("<html><body>"); out.println("<h2>Hello World !!</h2>"); out.println("<p>Servletのサンプル</p>"); out.println("</body></html>"); out.close(); } }
# javac -classpath /usr/local/jakarta-tomcat-4.1.27/common/lib/servlet.jar \ > HelloServlet.java
【web.xml のサンプル】
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>
次に、web.xml, HelloServlet.class といったファイルを以下のようなディレクトリー構成にします。Tomcat では、webapps という Servlet を置くところがデフォルト(docBase:デフォルトのルート)で存在するので、その下に mytest という Web アプリケーションを構築します。
/usr/local/jakarta-tomcat-4.1.27/webapps/mytest/hello.jsp /usr/local/jakarta-tomcat-4.1.27/webapps/mytest/WEB-INF/web.xml /usr/local/jakarta-tomcat-4.1.27/webapps/mytest/WEB-INF/classes/HelloServlet.class /usr/local/jakarta-tomcat-4.1.27/webapps/mytest/WEB-INF/classes/HelloServlet.java
Web アプリケーションとして利用できるように、Tomcat へ Context の追加と Apache へ uri の追加を行ないます。
Tomcat への Context の追加は、Tomcat の設定ファイルである server.xml を編集します。Host タグ内に登録してください。
/usr/local/jakarta-tomcat-4.1.27/conf/server.xml:
... <!-- Tomcat Examples Context --> ... </ResourceParams> </Context> <!-- MyTest WebApp Context --> <Context path="/mytest" docBase="mytest" debug="0" reloadable="true" > </Context> </Host> ...
ワーカーの設定は、設定ファイル(workers2.properties)に uri を追加。
/usr/local/apache2/conf/workers2.properties:
... [uri:/mytest/*] info=Example webapp. ...
それぞれの設定ファイルの編集が終わったら、tomcatと apache を再起動します。JNI を利用している場合、tomcat の再起動は必要ありません。
# /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh stop # /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh start # /usr/local/apache2/bin/apachectl restart
ここで、Servlet を指定(http://<servername>/mytest/HelloWorld
)すると
Servlet (HelloServlet.class) が実行されます。JSPを指定(http://<servername>/mytest/hello.jsp
)すると
JSP(hello.jsp) が実行されます。
今度は、Web アプリケーションを Web ARchive format (WAR) 形式でまとめてみましょう。それを、webapps にコピーして元のディレクトリーを消してしまいます。
# cd /usr/local/jakarta-tomcat-4.1.27/webapps/mytest # jar cf mytest.war * # mv mytest.war /usr/local/jakarta-tomcat-4.1.27/webapps/ # rm -rf /usr/local/jakarta-tomcat-4.1.27/webapps/mytest # ls /usr/local/jakarta-tomcat-4.1.27/webapps ROOT examples mytest.war webdav admin.xml manager.xml tomcat-docs #
次に、Tomcat の server.xml に登録してあった Context の内容を削除、またはコメントアウトします。
/usr/local/jakarta-tomcat-4.1.27/conf/server.xml:
... <!-- Tomcat Examples Context --> ... </ResourceParams> </Context> <!-- MyTest WebApp Context --> <!-- <Context path="/mytest" docBase="mytest" debug="0" reloadable="true" > </Context> --> </Host> ...
それぞれの設定ファイルの編集が終わったら、tomcatと apache を再起動します。JNI を利用している場合、tomcat の再起動は必要ありません。
# /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh stop # /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh start # /usr/local/apache2/bin/apachectl restart
ここで、Servlet を指定(http://<servername>/mytest/HelloWorld
)すると
Servlet (HelloServlet.class) が実行されます。JSPを指定(http://<servername>/mytest/hello.jsp
)すると
JSP(hello.jsp) が実行されます。
これはどういうことかというと、WAR 形式のアーカイブにしておくことで、Tomcat の server.xml への登録が不要になるということです。また、ファイルもまとまっていることから管理が非常に楽になります。
Webアプリケーションの登録に必要な各種設定
■ Tomcat への登録 conf/server.xml
Context エレメントを使用して定義します。Context エレメントの中で最もよく利用するものをまとめておきます。
path | URL のパス |
docBase | Web アプリケーションの Servlet や HTML ファイルの置き場所$CATALINA_HOME/webapps からの相対パスまたは、/ (ルート)からの絶対パス(フルパス)で指定することが出来ます。絶対パスでの指定の場合、Apache
の httpd.conf に Alias, Directory の設定を行っておくと良い。オーナーやパーミッションには気を付けてください。 |
debug | デバッグメッセージを記録するレベルを指定( 0 から 9) |
reloadable | Web アプリケーションに変更があった場合、自動的にクラスを更新する(Web アプリケーション開発中は便利なので true とし、完成したら false にしておきましょう) |
<Context path="/hello" docBase="hello" debug="0" reloadable="true" > </Context>
■ Apache への登録 conf/workers2.properties
ワーカーの設定で、uri を登録します。
... [uri:/hello/*] info=hello webapp. ...
■ Web アプリケーションのディレクトリ構成
Web アプリケーション側は、あるルールに従って JSP、Servlet、HTMLファイル、イメージなどを配置します。基本的には、上記の設定のdocBase で指定したディレクトリーに以下の構造でファイルを配置します。基本的には、WEB-INF ディレクトリー以下が決められており、それ以外は自由に配置できます。
WEB-INF/web.xml | Servlet の登録やマッピング、MIMEマッピングなどを定義 |
WEB-INF/classes/* | このWeb アプリケーションで使う Servlet (クラス)を置く |
WEB-INF/lib/*.jar | このWeb アプリケーションで使う、 beans などの JAR 形式のアーカイブを置く |
/usr/local/jakarta-tomcat-4.1.27/webapps/hello/WEB-INF/web.xml /usr/local/jakarta-tomcat-4.1.27/webapps/hello/WEB-INF/classes/HelloServlet.class /usr/local/jakarta-tomcat-4.1.27/webapps/hello/WEB-INF/classes/HelloServlet.java
■ web.xml の構造
web.xml にサーブレットを登録することで、WEB-INF/classesの下に置いたServletをマップした名前や指定したサーブレット名でアクセス出来るようになります。以下のタグは、一部でよく使われるものを説明しています。
<web-app> |
Web アプリケーションの設定を記述 |
<servlet> |
Servlet の設定を記述 |
<servlet-name> |
Servlet 名を記述 |
<servlet-class> |
実行する実際のクラス名を記述 |
<init-param> |
パラメータを初期化。このタグ一つで、一つのパラメータしか扱えないので、複数パラメータがある場合このタグを繰り返す。 |
<param-name> |
初期化するパラメータ名前を指定 |
<param-value> |
パラメータの初期値を記述 |
<servlet-mapping> |
Sevlet のマッピングを記述 |
<url-pattern> |
URL が、ここで指定したパターンにマッチすると Servlet が実行される |
<session-config> |
セッションの設定を記述 |
<session-timeout> |
セッションのタイムアウト時間を指定 |
http://<server-name>/hello/servlet/HelloWorld http://<server-name>/hello/HelloWorld
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { private String initParam1; private String initPatam2; public void init() { initParam1 = getInitParameter("param1"); initParam1 = getInitParameter("param2"); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ... } }
<?xml version="1.0" encodeing="ISO-8859-1"?> <web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloServlet</servlet-class> <init-param> <param-name>param1</param-name> <param-value>value1</param-value> </init-param> <init-param> <param-name>param2</param-name> <param-value>value2</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>
Struts
大規模な Webアプリケーションを開発する場合、MVC(Model-View-Controller)モデルを用いた開発の分業化が当たり前となっています。その MVC モデルを構成するクラスやサーブレット、JSPタグ・ライブラリ、などを再利用可能な形でまとめたフレームワークとして Struts は有用なものです。
たぶん、Web アプリケーションの環境を構築する上で Struts ようなフレームワークも必要になってくるのでここで簡単な利用方法を記述します。
必要なすべてのモジュールが /usr/local/src にダウンロードされているものとして説明をします。Strutsバイナリディストリビューションを展開します。
# gzip -dc jakarta-struts-1.1.tar.gz | tar xf - # cd jakarta-struts-1.1
各ファイルの説明:
lib/struts.jar | このJARファイルは、Strutsの全てのJavaクラスを含んでいます。 このファイルを、開発する WebアプリケーションのWEB-INF/lib ディレクトリにコピーします。 注意 - 同じServletコンテナ上で複数のStrutsをベースとしたアプリケーションを動作させる際に、struts.jarファイルをコンテナのサポートする共有リポジトリに配置したくなが、その場合、アプリケーションの全てのクラスを共有リポジトリに格納しなければ ClassNotFoundException問題を引き起こす原因となります。 |
lib/struts*.tld | これらは、"タグライブラリ記述子"(さまざまなStrutsタグライブラリの中のカスタムタグを記述したもの)です。 これらのファイルを、開発する Webアプリケーションの WEB-INFディレクトリにコピーします。 |
webapps/struts-blank.war | これは、Strutsベースのアプリケーションを作る際の出発点となる、 シンプルな "Webアプリケーションアーカイブ"ファイルです。 |
webapps/struts-documentation.war | Strutsドキュメントの全てを含んだ "Webアプリケーションアーカイブ"ファイルです。 |
webapps/struts-example.war | Strutsの機能の大部分を利用したサンプルWebアプリケーションです。 |
webapps/struts-exercise-taglib.war | Strutsのサポートするさまざまなカスタムタグのためのテストページを含んでいます。 |
webapps/struts-template.war | Strutsテンプレートタグの紹介とデモです。 |
webapps/struts-upload.war | Strutsフレームワークを用いたファイルのアップロードの簡単なサンプルです。 |
Web アプリケーションでStrutsを使うには、以下のステップに従う必要があります。
lib/struts.jar を、Strutsのディストリビューションから、 開発する Webアプリケーションの WEB-INF/lib ディレクトリにコピーする。 |
Strutsのディストリビューションから lib/struts*.tld に一致する全てのファイルを、
開発する Webアプリケーションの WEB-INF ディレクトリにコピーする。 |
開発する Webアプリケーションの WEB-INF/web.xml ファイルを修正して<servlet> 要素を追加し、コントローラサーブレットを定義する。
そして<servlet-mapping>要素を追加し、どのリクエストURIがこのServletにマップするのかを確立させる。
StrutsサンプルアプリケーションのWEB-INF/web.xml ファイルを参考にすると良い。 |
開発する WebアプリケーションのWEB-INF/web.xmlファイルを修正して、
以下のタグライブラリ宣言を含めるようにする。
<taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri> <taglib-location>/WEB-INF/struts-template.tld</taglib-location> </taglib> |
アプリケーション固有のアクションマッピングやその他の特徴を定義する WEB-INF/struts-config.xml ファイルを作成する。
Strutsサンプルアプリケーションのstruts-config.xml ファイルを参考にすると良い。<form-beans> に <form-bean> の追加や <action-mappings> に <action> を追加します。 |
Strutsカスタムタグを使う各JSPページの先頭に、下記のようにStrutsカスタムタグライブラリの宣言文を追加する。
<@ taglib uri="/WEB-INF/struts-bean.tld" prefix="struts-bean" %> <@ taglib uri="/WEB-INF/struts-html.tld" prefix="struts-html" %> <@ taglib uri="/WEB-INF/struts-logic.tld" prefix="struts-logic" %> <@ taglib uri="/WEB-INF/struts-template.tld" prefix="struts-template" %> |
アプリケーションでメッセージリソースファイルを作成する場合、 WEB-INF/classes/ApplicationResources.properties を 作成する。リソースファイルで日本語を使用する場合、native2ascii コマンドを使用して ASCIIコードに変換する必要があります。
ASCIIコードへ変換(漢字コードが \udddd というコードになる) native2ascii input-file output-file nativeコードへ変換(システムで利用している漢字コードになる) native2ascii -reverse input-file outputfile |
開発する Wアプリケーションを構成するJavaクラスをコンパイルする際、 (先ほどコピーした)struts.jarファイルをコンパイラが認識する CLASSPATH に確実に追加する。 |
サンプル Webアプリケーションのインストール
# cp webapps/* /usr/local/jakarta-tomcat-4.1.27/webapps/
ワーカーの設定で、uri を登録します。(ここでは、struts-example.war のみ登録しています。)
# edit /usr/local/apache2/conf/workers2.properties
... [uri:/struts-example/*] info=Struts Example webapp. ...
ここで、Tomcat や Apache の再起動を行い、Struts のサンプルページを指定(http://<servername>/struts-example/index.jsp
)すると以下のような画面が表示され、Struts
のサンプルを実行できます。
# /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh stop # /usr/local/jakarta-tomcat-4.1.27/bin/catalina.sh start # /usr/local/apache2/bin/apachectl restart