HAYAGUI

FreeBSD 4.10 + Tomcat-4.1.30 でServletとJSPとWebDAV

はじめに

FreeBSD で Tomcat を動かして、Servlet と JSP と WebDAVをしてみます。

前準備の JDK インストールは、こちらを参照してください。
Hello Worldを作って動作も確認してください。

Tomcat-4.1.30 インストール

インストールって言っても tar するだけの超簡単。

http://jakarta.apache.org/tomcat/ から jakarta-tomcat-4.1.30.tar.gz を get します。

get したファイルを、/usr/local に展開します。

eden# tar zxvf jakarta-tomcat-4.1.30.tar.gz -C /usr/local/
中身はこんな感じ
eden# cd /usr/local/jakarta-tomcat-4.1.30/
eden# ls
LICENSE                 bin                     shared
README.txt              common                  temp
RELEASE-NOTES-4.1.txt   conf                    webapps
RELEASE-PLAN-4.1.txt    logs                    work
RUNNING.txt             server
eden# cd bin/
eden# ls
bootstrap.jar           jasper.bat              shutdown.sh
catalina.bat            jasper.sh               startup.bat
catalina.sh             jspc.bat                startup.sh
commons-daemon.jar      jspc.sh                 tomcat-jni.jar
cpappend.bat            setclasspath.bat        tomcat.exe
digest.bat              setclasspath.sh         tool-wrapper.bat
digest.sh               shutdown.bat            tool-wrapper.sh
気になるのは、時々改行が CR+LF のファイルがあること。

動かしてみよう

eden# pwd
/usr/local/jakarta-tomcat-4.1.30/bin
eden# ./startup.sh
Using CATALINA_BASE:   /usr/local/jakarta-tomcat-4.1.30
Using CATALINA_HOME:   /usr/local/jakarta-tomcat-4.1.30
Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.1.30/temp
Using JAVA_HOME:       /usr/local/diablo-jdk1.3.1
eden#
Webブラウザから http://<IPアドレス>:8080/ を設定すると、以下のようなページが表示されたらOK!

止める時は次のようにします。

eden# ./shutdown.sh
Using CATALINA_BASE:   /usr/local/jakarta-tomcat-4.1.30
Using CATALINA_HOME:   /usr/local/jakarta-tomcat-4.1.30
Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.1.30/temp
Using JAVA_HOME:       /usr/local/diablo-jdk1.3.1
eden#

サーブレットを動かしてみよう

環境変数(.cshrc) を以下のようにします。
set path = (/usr/local/diablo-jdk1.3.1/bin /sbin /bin /usr/sbin /usr/bin /usr/games /usr/l
ocal/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

setenv  JAVA_HOME /usr/local/diablo-jdk1.3.1
setenv  CLASSPATH .:${JAVA_HOME}/lib/classes.zip:/usr/local/jakarta-tomcat-4.1.30/common/l
ib/servlet.jar
サーブレットを作成します。
eden# cat HogeServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HogeServlet extends HttpServlet {
        public void doGet(HttpServletRequest req,HttpServletResponse res)
        throws IOException, ServletException {
                res.setContentType("text/html");
                PrintWriter out = res.getWriter();
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Hello Servlet Hogehoge</title>");
                out.println("</head>");
                out.println("<body bgcolor=#ffffff>");
                out.println("<h1>Hello Servlet</h1>");
                out.println("hogehoge");
                out.println("</body>");
                out.println("</html>");
        }
}
コンパイルします。
eden# javac HogeServlet.java
eden#
新しくサーブレットディレクトリを置く場合は登録する必要があるので、今回は examples ディレクトリ以下に仮置き。
eden# cp HogeServlet.class /usr/local/jakarta-tomcat-4.1.30/webapps/examples/WEB-INF/clas
ses/
eden#
http://<IPアドレス>:8080/examples/servlet/HogeServlet を開くと、こんな感じに表示されると思います。

では、examples ディレクトリではない新しいディレクトリを作成しましょう。 新しいディレクトリを作成するということは、 tomcat にとって新しいアプリケーションという意味になりますので、 tomcat に登録する必要があります。

examples ディレクトリを参照して hoge ディレクトリを作成します。

eden# pwd
/usr/local/jakarta-tomcat-4.1.30/webapps
eden# ls
ROOT            examples        tomcat-docs
admin.xml       manager.xml     webdav
eden# ls examples/
WEB-INF         images          jsp             servlets
eden# ls examples/WEB-INF/
classes jsp     web.xml
eden# mkdir hoge
eden# cd hoge/
eden# mkdir WEB-INF
eden# cd WEB-INF/
eden# mkdir classes
eden# cd classes/
eden# cp ../../../examples/WEB-INF/classes/HogeServlet.class .
アプリケーションが jar を必要とする場合は、WEB-INF 内に lib ディレクトリを作成します。

web.xml を confディレクトリからコピーして編集します。

eden# pwd
/usr/local/jakarta-tomcat-4.1.30/conf
eden# ls
catalina.policy                 server.xml
jk2.properties                  tomcat-users.xml
server-noexamples.xml.config    web.xml
eden# cp web.xml ../webapps/hoge/WEB-INF/
eden#
eden# cat  ../webapps/hoge/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-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

</web-app>
eden#
この servlet-mapping の設定をしないとアクセスできません。
confディレクトリ内のweb.xmlを編集してしまうと tomcat 全体に影響しますので、アプリケーション毎がいいでしょう。

次に、tomcat に hoge を登録します。conf ディレクトリ内の server.xml を開いて、Context を追加します。

        <!-- Tomcat Root Context -->
        <!--
          <Context path="" docBase="ROOT" debug="0"/>
        -->

        <!-- Hogehoge Context -->
        <Context path="/hoge" docBase="hoge" debug="0"
                 reloadable="true" crossContext="true">
        </Context>

        <!-- Tomcat Examples Context -->
        <Context path="/examples" docBase="examples" debug="0"
                 reloadable="true" crossContext="true">
tomcat を再起動して、新しいURLで表示させてみましょう。

できたできた。

JSPを動かしてみよう

hoge ディレクトリに、現在の時刻を表示する jsp ファイルを作成します。
eden# pwd
/usr/local/jakarta-tomcat-4.1.30/webapps/hoge
eden# ls -la
total 8
drwxr-xr-x  3 root  wheel  512 Jul 10 15:10 .
drwxr-xr-x  7 root  wheel  512 Jul 10 00:03 ..
drwxr-xr-x  3 root  wheel  512 Jul 10 00:16 WEB-INF
-rw-r--r--  1 root  wheel  221 Jul 10 15:10 date.jsp
eden# cat date.jsp
<%@ page contentType="text/html; charset=Shift_JIS" %>
<html>
<head>
 <title>JSP sample</title>
</head>
<body bgcolor=#ffffff>
<h1>Date</h1>
<%
 out.print("hogehoge");
%>
<br>
<%=
 new java.util.Date()
%>
</body>
</html>
eden#

WebDAVを使ってみよう

WebDAVというと、Apache に mod_dav と mod_dav_fs を入れるのが一般的ですが、 Tomcat には最初から WebDAV が実装されています。

初期設定では、だれでもアクセスできて読み込み専用です。 @IT の 「第11回 TomcatでWebDAVを実現」 を参照にして、使えるようにします。

設定を変更するファイルは、以下の webdav の web.xml です。改行が CR+LF なので、qkc で変換。

eden# pwd
/usr/local/jakarta-tomcat-4.1.30/webapps/webdav/WEB-INF
eden# ls -la
total 16
drwxr-xr-x  2 root  wheel    512 Jul  8 21:52 .
drwxr-xr-x  3 root  wheel    512 Jul  8 21:52 ..
-rw-r--r--  1 root  wheel  11659 Jan 25 22:22 web.xml
eden#
eden# cp web.xml web20040708.xml
eden# qkc -u web.xml
Converted: web.xml       (Ascii)
eden#
ユーザ認証
太赤字のコメントを外します。
  <!-- ================ Security Constraints for Testing =============== -->

<!--
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>The Entire Web Application</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>tomcat</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Tomcat Supported Realm</realm-name>
  </login-config>

  <security-role>
    <description>
      An example role defined in "conf/tomcat-users.xml"
    </description>
    <role-name>tomcat</role-name>
  </security-role>
-->

</web-app>

アクセスできるユーザは、role-name が tomcat に属しているユーザとなります。 初期状態では、以下のようにユーザ名が tomcat でパスワードが tomcat になっています。

eden# pwd
/usr/local/jakarta-tomcat-4.1.30/conf
eden# ls -la tomcat-users.xml
-rw-r--r--  1 root  wheel  310 Jul  8 23:49 tomcat-users.xml
eden# cat tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="role1"/>
  <role rolename="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
</tomcat-users>
eden#
ユーザ名に kenz 、パスワードに hogehoge と追加しました。
eden# pwd
/usr/local/jakarta-tomcat-4.1.30/conf
eden# ls -la tomcat-users.xml
-rw-r--r--  1 root  wheel  310 Jul  8 23:49 tomcat-users.xml
eden# cat tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="role1"/>
  <role rolename="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="kenz" password="hogehoge" roles="tomcat"/>
</tomcat-users>
eden#

tomcat を再起動します。

このようにユーザ認証が表示されます。

書き込み可能
太赤字のコメントを外します。
    <!-- Uncomment this to enable read and write access -->
<!--
    <init-param>
      <param-name>readonly</param-name>
      <param-value>false</param-value>
    </init-param>
-->

tomcat を再起動します。

ファイルをドラッグアンドドロップすることで書き込むことができますが、 フォルダを右クリックして「新しいフォルダ」を作ることができません。 日本語がダメなんですね。

MacOSX の場合は、Finder から「移動」「サーバへ接続」を選択することで接続できます。

日本語ファイル名を使えるようにする
日本語ファイル名が使えないので、Ja-Jakarta Projectの横田健彦さんが開発した 「Tomcat4のWebDAVアプリケーションの日本語ファイル名対応版」を インストールしてみたけれど、日本語が化けてしまいました。


戻る



(C)1999 - 2004 Kenji Ito All rights reserved.