ギゾネット 2001.12.25更新

Java2とTomcatでServletとJSPを実現


FreeBSD4.4-RELEASEにJava2とTomcatをインストールしてみましょう。
Java2はportsにありますので、簡単にインストールできます。

Java 2のイントール準備
FreeBSD4.4-RELEASEのportsのlinux-jdk13というのを使うので、LINUXエミュレーションが使えるようにしておいてください。
portsがインストールされていないようでしたら、/stand/sysinstallなどを使ってportsをインストールしておいてください。
(linux-jdk13だけがあればいいんですが、portsをまとめて入れておいても後々便利かな)


インストール
それではイントールしましょう。以下のコマンドを実行します。
# cd /usr/ports/java/linux-jdk13
# make
===> linux-jdk-1.3.1.01_1 You must manually fetch the Java 2 Development Kit 1.3.1.01 for Linux archive (j2sdk-1_3_1_01-linux-i386.bin) from http://java.sun.com/j2se/1.3/download-linux.html, choose the GUNZIP Tar shell script one and place it in /usr/ports/distfiles and then run make again.

いきなり怒られました。
先にJava 2 Development Kit 1.3.1.01 for Linuxを取ってきて、それを/usr/ports/distfilesに置いておけと言っているようですね。
で、言われたURLへブラウザを使って探しに行くと、すでにバージョンが1.3.1.02(2001.12.25現在)になっています。
portsで要求しているのは1.3.1.01ですから、別の場所に取りにいきます。
http://java.sun.com/products/archive/j2se/1.3.1_01/に行くと、1.3.1.01が置いてあります。
(FreeBSDにブラウザがインストールしていない場合などは、MSWindowsのブラウザを使って取ってきて、FreeBSDにFTP転送してやってもいいです。
また、雑誌の付録CD-ROMに収録されていることもあるようです。)

上記のページ にブラウザでアクセスすると、
Linux の枠の右にGNUZIP Tar shell script:
というのがありますからそのcontinueボタンを押して、次ページのライセンスの許諾条件を読んで理解したら、ACCEPTボタンを押します。
ダウンロードサイトを選ぶボタンが出てくるので、適当なボタンを押してダウンロードしてください。
j2sdk-1_3_1_01-linux-i386.binというファイルがダウンロードできるはずです。

ダウンロードしたj2sdk-1_3_1_01-linux-i386.binを指示どおり、/usr/ports/distfilesディレクトリに置いてやります。

それでは再度、
# cd /usr/ports/java/linux-jdk13
# make
===>  Extracting for linux-jdk-1.3.1.01_1
>> Checksum OK for j2sdk-1_3_1_01-linux-i386.bin.
===>   linux-jdk-1.3.1.01_1 depends on file: /compat/linux/lib/libc.so.6 - found
                           Sun Microsystems, Inc.
                        Binary Code License Agreement
以下省略

今度はうまくいきました。
Enterを押して下の方までライセンス条件を読むと、承諾するかどうかを聞かれますのでyesを入力するとファイルが一気に展開されます。
Do you agree to the above license terms? [yes or no] yes
(ファイルが展開される)
Done.
===> Patching for linux-jdk-1.3.1.01_1
===> Applying FreeBSD patches for linux-jdk-1.3.1.01_1
===> Configuring for linux-jdk-1.3.1.01_1


次にインストールします。
# make install
===> Installing for linux-jdk-1.3.1.01_1
===> linux-jdk-1.3.1.01_1 depends on executable: javavm - not found
===> Verifying install for javavm in /usr/ports/java/javavmwrapper
===> Extracting for javavmwrapper-1.1
(省略)
===> Generating temporary packing list
===> Registering installation for linux-jdk-1.3.1.01_1
#


これでインストール終了です。
どこにインストールされたかというと/usr/local/linux-jdk1.3.1/のディレクトリです。

というわけで、.cshrcなどにパスを追加しておきましょう。
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin / usr/X11R6/bin /usr/local/linux-jdk1.3.1/bin $HOME/bin)

setenv JAVA_HOME /usr/local/linux-jdk1.3.1


Tomcatのインストール
Servletを動かすためにJakartaプロジェクトからTomcatを取ってきましょう。
簡単にBinaryでインストールしてみます。安定バージョンのjakarta-tomcat-3.2.4を使います。

取ってきたファイルは、/usr/localに置いて、そこに展開します。
# cp jakarta-tomcat-3.2.4.tar.gz /usr/local/
# cd /usr/local
# tar zxvf jakarta-tomcat-3.2.4.tar.gz

ファイルが展開されてインストールは完了です。(バイナリだと楽ですねえ)
実行ファイルに、実行権を与えて、起動してみましょう。

# cd /usr/local/jakarta-tomcat-3.2.4/bin/
# chmod 755 *.sh
# ./startup.sh
Guessing TOMCAT_HOME from tomcat.sh to ./..
Setting TOMCAT_HOME to ./..
Using classpath: ./../lib/ant.jar:./../lib/crimson.jar:./../lib/jasper.jar:./../lib/jaxp.jar:./../lib/servlet.jar:./../lib/test:./../lib/webserver.jar:/usr/local/linux-jdk1.3.1/lib/tools.jar:/usr/local/linux-jdk1.3.1/jar
# 2001-12-25 13:13:25 - ContextManager: Adding context Ctx( /examples )
Starting tomcat. Check logs/tomcat.log for error messages
2001-12-25 13:13:26 - ContextManager: Adding context Ctx( /admin )

#
これで起動しました。
上記のように、起動は/usr/local/jakarta-tomcat-3.2.4/bin/startup.shを実行します。
停止は、/usr/local/jakarta-tomcat-3.2.4/bin/shutdown.shです。

ブラウザでアクセスしてみましょう。
http://サーバー名:8080/でアクセスしてみると、(例:http://www.gizo.net:8080/のようにアドレスバーに入力)トラのようなネコのような動物と、ServletとJSPのリンクが付いている画面が出てきますので、いろいろ試してみてください。
JSPは初めて実行するときには、コンパイルに時間がかかりますのでちょっと待たされますが、二回目からは短時間に実行されるはずです。
これで、Tomcatのインストールは終了です。

TomcatをApacheにアドオンさせる(mod_jk)
ここまでの設定は、TomcatとApacheは別々に動いていることになります。
Apacheの機能が使えるようにするために、mod_jkを使ってTomcatをApacheにアドオンさせてみましょう。

ApacheはDSOを有効にしてインストールされているものとして説明していきます。
先ほどはバイナリファイルでインストールしましたが、今度はTomcatのソースをダウンロードします。
http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.4/src/jakarta-tomcat-3.2.4-src.zipをダウンロードしてください。

ダウンロードしたら、適当なディレクトリに置いてunzipで展開します。unzipがインストールされていないようでしたら、package/portsでインストールしておいてください。
% unzip jakarta-tomcat-3.2.4-src.zip

解凍が済んだらjakarta-tomcat-3.2.4-src/src/native/apache1.3/へ移ります。
% cd jakarta-tomcat-3.2.4-src/src/native/apache1.3/

そこに、Makefile.freebsdというのがあるのでmakeできそうな感じですが、環境設定などの書き換えが必要なので、Makefileは使わずに、apxsしてしまいましょう。
Apacheのデフォルトインストールならapxsは/usr/local/apache/binにあるはずです。他の場所にあるようでしたら、パスを変えてください。
% /usr/local/apache/bin/apxs -o mod_jk.so -I../jk -I/usr/local/linux-jdk1.3.1/include -I/usr/local/linux-jdk1.3.1/include/linux -DFREEBSD -c *.c ../jk/*.c

無事にコンパイルできたら、mod_jk.soを/usr/local/apache/libexec/へコピーします。
Apacheのデフォルトの設定ではなく、モジュール置き場が別途設定してあるようでしたら、その場所へ置いてください。

% su (rootになる)
# cp mod_jk.so /usr/local/apache/libexec/

そしてApacheの設定ファイルhttpd.confの最後に以下の行を追加してください。
httpd.confはApacheのデフォルトの設定では/usr/local/apache/confにありますが、別の場所に置いてあるときは、別途読み替えてください。
# vi /usr/local/apache/conf/httpd.conf (ファイルの最後に) Include /usr/local/jakarta-tomcat-3.2.4/conf/mod_jk.conf-auto (を書き加える。)


次にTomcatの設定を書き換えます。
/usr/local/jakarta-tomcat-3.2.4/conf/server.xmlを書き換えます。
以下の場所を探します。

<!-- ==================== Connectors ==================== -->

        <!-- Normal HTTP -->
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
                value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
            <Parameter name="port"
                value="8080"/>
        </Connector>

上記の部分を以下のように追加します。(<!--と-->を追加して、その間の行を無効にすることになります)

     <!-- ==================== Connectors ==================== -->
        <!-- Normal HTTP -->
<!--
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
                value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
            <Parameter name="port"
                value="8080"/>
        </Connector>
 -->


ApacheとTomcatが動いていたら、一旦どちらも停止しておいてください。

起動は、Tomacatを先に起動させて、次にApacheの順に起動させます。

# /usr/local/jakarta-tomcat-3.2.4/bin/startup.sh
# /usr/local/apache/bin/apachectl start


ブラウザで、 http://サーバー名/examples/jsp/または http://サーバー名/examples/servlets/ にアクセスすると、Tomcatが動いているのがわかります。
先ほどのように:8080を付ける必要はありません。

Servletの実行場所の変更
ここからは必須の作業ではありませんが、上記までの設定だと(特に変更していない限り)javacの実行もroot権限がないとできません。
ここではユーザーtaroのディレクトリでServlet等を実行できるように変更してみます。

前述の/usr/local/jakarta-tomcat-3.2.4/conf/server.xmlの中で、以下の行を探してください。
       <!-- ==================== Special webapps ==================== -->
        <!-- You don't need this if you place your app in webapps/
             and use defaults.
             For security you'll also need to edit tomcat.policy

             Defaults are: debug=0, reloadable=true, trusted=false
             (trusted allows you to access tomcat internal objects
             with FacadeManager ), crossContext=true (allows you to
             access other contexts via ServletContext.getContext())

             If security manager is enabled, you'll have read perms.
             in the webapps dir and read/write in the workdir.
         -->

        <Context path="/examples"
                 docBase="webapps/examples"
                 crossContext="false"
                 debug="0"
                 reloadable="true" >
        </Context>

この部分には変更を加えずその下に、以下の4行を書き加えてください。
        <Context path="/tomcat"
                docBase="/usr/home/taro/java/tomcat"
                debug="0"
                reloadable="true" >
        </Context>


~/taroの中に、java(名前は任意)というディレクトリを作り、さらにその中にtomcat(名前は任意)というディレクトリを作りました。
そのtomcatというディレクトリがServletの新しいルートディレクトリになります。
例えばtomcatディレクトリの中に、index.htmlファイルを置けば、http://サーバー名/tomacat/index.htmlとブラウザでアクセスすれば見られます。
Servletを置くためには、以下のような作業をしてください。
% mkdir ~/java/tomcat/WEB-INF % cp /usr/local/jakarta-tomcat-3.2.4/webapps/examples/WEB-INF/web.xml ~/java/tomcat/WEB-INF/ % mkdir ~/java/tomcat/WEB-INF/classes % ~/java/tomcat/WEB-INF/classes

とりあえず、examplesのweb.xmlと同じ構造にしました。

ここで、TomcatとApacheを再起動させておいてください。

では、実際にjavacしてServletを試してみましょう。
~/java/tomcat/WEB-INF/classesの中に、エディタでHelloWorld.javaというファイルを作成して以下のように書いてみましょう。保存はEUCでしてください。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet
{
    public void doGet (HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException
    {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("<HTML>");
      out.println("<HEAD>");
      out.println("<TITLE>Tomcat Test</TITLE>");
      out.println("<META http-equiv=\"Content-Type\" content=\"text/html;charset=X-EUC-JP\">");
      out.println("</HEAD>");
      out.println("<BODY bgcolor=\"FFFFFF\">");
      out.println("<H1>Hello World<BR>日本語出力もできます</H1>");
      out.println("</BODY></HTML>");
      out.flush();
      out.close();
   }
}


javacする前に、servlet.jarへのクラスパスを通しておきましょう。
.cshrcファイルに、
setenv JAKARTA_HOME /usr/local/jakarta-tomcat-3.2.4
setenv CLASSPATH $JAKARTA_HOME/lib/servlet.jar

もし、他にもクラスパスを通しておきたいときには
setenv CLASSPATH $JAKARTA_HOME/lib/servlet.jar:$JAVA_HOME/lib/src.jar
のように、コロンでつなげていけば複数書けます。

コンパイルしてみましょう。
% javac HelloWorld.java

エラーが出ないで終了したら、ブラウザでアクセスしてみます。
ブラウザで以下のようにアクセスすると
http://サーバー名/tomcat/servlet/HelloWorld
HelloWorld
日本語出力もできます
と見られれば、実験終了です。

ApacheがIPv6対応になっていれば、ServletもIPv6でアクセスできます。