javaサーブレット JSP Tomcatのインストール

JDKのインストール

http://java.sun.com/j2se/1.4.1/ja/ からj2sdk-1_4_1_04-linux-i586.binをDownload
$ chmod a+x j2sdk-1_4_1_04-linux-i586.bin
$ su
# ./j2sdk-1_4_1_04-linux-i586.bin

/usr/localにインストール

# cd /usr/local
# ln -s j2sdk1.4.1_04 java

Tomcatのインストール

http://jakarta.apache.org/site/binindex.cgi からtomcat-4.1.24.tar.gzをDownload


# cd /usr/local
# tar zxvf /usr/local/src/tomcat-4.1.24.tar.gz
# ln -s jakarta-tomcat-4.1.24 jakarta-tomcat

/etc/profileに

export JAVA_HOME=/usr/local/java
export TOMCAT_HOME=/usr/local/jakarta-tomcat

を追加

# /usr/local/jakarta-tomcat/bin/startup.sh
で起動

# /usr/local/jakarta-tomcat/bin/shutdown.sh
で終了

Apacheのインストール


$ tar zxvf apache_1.3.28.tar.gz
$ cd apache_1.3.28
$ OPTIM="-O2" ./configure --prefix=/usr/local/apache1328 \
        --enable-module=so
$ make
$ su
$ make install

Apacheとtomcatの連携

http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk/release/v1.2.2/bin/linux/i386/
から、

mod_jk-1.3-eapi.so is for Apache 1.3.x will mod_ssl(SSL有)
mod_jk-1.3-noeapi.so is for Apache 1.3.x without mod_ssl(SSLなし)

の使用するほうをdownload

今回はmod_jk-1.3-noeapi.so

# cp mod_jk-1.3-noeapi.so /usr/loca/apache1328/libexec/
# cd /usr/loca/apache1328/libexec/
# chmod a+xr mod_jk-1.3-noeapi.so

/usr/loca/apache1328/conf/httpd.confに以下を追加

# for Tomcat Web Connector
Include "/usr/local/apache1328/conf/mod_jk.conf"

/usr/local/apache1328/conf/mod_jk.conf

を以下のように作成

LoadModule jk_module libexec/mod_jk-1.3-noeapi.so
<IfModule mod_jk.c>
JkWorkersFile /usr/local/jakarta-tomcat/conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
JkMount /*.jsp worker1
JkMount /servlet/* worker1
JkMount /examples/* worker1
</IfModule>

mod_jk2の接続設定
/usr/local/apache1328/confにworkers2.propertiesを以下のように作成

[status:]
[uri:/jkstatus/*]
group=status:
[shm:]
disabled=1
[channel.socket:]
[ajp13:]
[uri:/examples/*]


/usr/local/jakarta-tomcat/confに

workers.propertiesを作成する

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

# cd /usr/local/jakarta-tomcat/conf
# cp server.xml server.xml.org

server.xml を編集し、Coyote/JK2 AJP 1.3 Connector を
コメントアウトして, AJP 1.3 Connector を代わりに有効にする

113行目に  <!-- を追加
120行目に  -->  を追加
122行目の  <!-- を削除
126行目の  -->  を削除


# diff server.xml server.xml.org
113d112
<     <!--
120,121d118
<     -->
<     <!-- Define an AJP 1.3 Connector on port 8009 -->
122a120,121
>     <!-- Define an AJP 1.3 Connector on port 8009 -->
>     <!--
126c125
<
---
>     -->


以後以下の順序で

Tomcat起動
# cd /usr/local/jakarta-tomcat/bin
# ./startup.sh

Apache起動

# cd /usr/local/apache1328/bin
# apachectl start

http://localhost/examples/

で確認

/etc/rc.d/rc.localに

export JAVA_HOME=/usr/local/java
export TOMCAT_HOME=/usr/local/jakarta-tomcat
/usr/local/jakarta-tomcat/bin/startup.sh

/usr/local/apache1328/bin/apachectl start

で、自動起動

jspのルートディレクトリはデフォルトで
/usr/local/jakarta-tomcat/webapps/ROOT
になる。この下にuserというディレクトリを作成し、
hello.jspをおき、

http://localhost/user/hello.jsp

でアクセスできる。


JSP,サーブレットのディレクトリ構造のルートは
/usr/local/jakarta-tomcat/webapps/
になる。


新たにコンテキストを作成するにはwebappsの下に
ディレクトリを作成し、その中にxxx.jspというjspファイル
を配置する。


===============ここからはApacheとの連携ではなく一般論=============


その後、conf/server.xmlの
<HOST>エレメントに<Context>エレメントを追加する

server.xmlに追加例

        </Context>

------------ 以下追加 --------------------
        <Context path="/ism" docBase="ism" debug="0"
                 reloadable="true" crossContext="true">
        </Context>
------------ ここまで --------------------

      </Host>

tomcat、apacheを再起動

===================ここまで======================================

# killall /usr/local/java/bin/java
# /usr/local/jakarta-tomcat/bin/startup.sh
# /usr/local/apache1328/bin/apachectl restart

http://localhost/ism/xxx.jsp

でアクセス。(再起動してから表示可能になるまで少し時間がかかる?)


Servletについては

/usr/local/apache1328/conf/mod_jk.conf
にコンテンツを追加

JkMount /servlet/* worker1
JkMount /examples/* worker1
JkMount /ism/* worker1   <---追加



/usr/local/apache1328/conf/workers2.properties
にコンテンツを追加

[ajp13:]
[uri:/examples/*]
[uri:/ism/*]  <---追加

===============ここからはApacheとの連携ではなく一般論=============
コンテキスト名(ism)のフォルダに

$ cd ism
$ mkdir -p WEB-INF/classes

を作成し、

配置記述子(web.xml)をWEB-INFの下に作成

WEB-INF/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>mySample</servlet-name>  --
        <servlet-class>Sample</servlet-class>  -|---作成したclass名
    </servlet>                                  | 
                                                |mySample合わせる
    <servlet-mapping>                           |
        <servlet-name>mySample</servlet-name>  --
        <url-pattern>/Hello</url-pattern>   ------呼び出すURL
    </servlet-mapping>

</web-app>

これではクラスを作成するごとにweb.xmlに追加する必要があるそこで
無名サーブレットを有効にしておくことで、クラス作成時(クラスの
置く場所は各コンテンツの下のWEB-INF/classesと同じ)コンテンツ名内
のweb.xmlに追加編集の必要がなくなる。

アクセスは

http://192.168.10.15:8080/ism/servlet/Hello

http://192.168.10.15/ism/servlet/Hello

でアクセスが可能になる。

無名サーブレットを有効にするには

conf/web.xmlの277,282行のコメントを取る。

    <!-- The mapping for the invoker servlet -->
<!--                                          <---削除
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
-->                                           <---削除




Helloを出力する例(Sample.java)

import javax.servlet.http.*;
import javax.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;

public class Sample extends HttpServlet{
    public void doGet( HttpServletRequest req,
        HttpServletResponse res )
        throws ServletException, IOException {

        res.setContentType( "text/html; charset=Shift_JIS" );

        PrintWriter out =  res.getWriter();

        out.println( "<html>" );
        out.println( "<head>" );
        out.println( "<title>Sample</title>" );
        out.println( "</head>" );
        out.println( "<body>" );
        out.println( "<H1> Hello Servlet </H1>" );
        out.println( "</body>" );
        out.println( "</html>" );

    }
}

コンパイル

$ /usr/local/j2sdk1.4.1_04/bin/javac -classpath /usr/local \
/jakarta-tomcat-4.1.24/common/lib/servlet.jar Sample.java

または、

.bash_profileに

export CLASSPATH=$CLASSPATH:/usr/local/jakarta-tomcat/common/lib/servlet.jar

を追加するとコンパイル時に-classpathの指定が不要になる


出来たSample.classをWEB-INF/classesにコピー

tomcat,apacheを再起動

確認(無名サーブレット無効の場合)

http://192.168.10.15:8080/ism/Hello

http://192.168.10.15/ism/Hello

それぞれで確認

でアクセスismはコンテキスト名(入れたデイレクト)
Helloは配置記述子(web.xml)のエレメント<url-pattern>



よってディレクトリ構造は

webapps
  |
  ---ism(コンテキスト名)
      |
      ---XXX.jsp(jspファイル)
      |
      ---WEB-INF
      |
            ---web.xml(配置記述子)
            |
            ---classes
                  |
                  ---XXX.class(servletファイル)



[参考]

http://www.kitanaka.net/~eiji/wiki.cgi?tomcat-install


                        2003/07 DE JE2ISM

JSPの例
Servletの例(無名サーブレット)