Webアプリケーション

 

1.              Tomcatをインストール(Ver 5.5.12 2005/12/26現在)

 

Tomcat Ver 5.5の特徴

l         一度立ち上げたサーブレットのサービスプロセスは、TocatManagerにてそのサービスプロセスをリスタートしても、すでに立ち上げたプロセスは消滅しない。web.xmlのサーブレットへのアクセスパスを変更してTomcatをリスタートしても、以前のアクセスパスでのサーブレットの実行が依然として可能。(ただし、サーブレットの内容を変更した場合には反映されていない)

l         4.xではビルトインであったinvokerサーブレットが存在しない。よってweb.xmlには、<servlet>エレメントと<servlet-mapping>エレメントの記述が必要となる。

l         Apache-Tomcat連携に、mod_jk.confファイルの自動生成機能が追加された。これにより、server.xml<Listener>エレメントを追加して、関連するコンフィグレーションを設定することで簡単にApache-Tomcat連携を実現することが可能になっている。

 

2.              ルートの設置

まず、Tomcatには2つの重要なルート(基点)が存在する。サーブレット等Webアプリケーションを実行するに当たって、ユーザがそのアプリケーションにブラウザなどからアクセスするための基点となる“コンテキストルート“と、実際にサーブレットなどのアプリケーションの実行モジュールを格納する”ドキュメントルート(ディレクトリ)“である。コンテキストルートは、$CATALINA_HOME\webappsの下に直接作るか(この場合、コンテキストルートとドキュメントルートは同一のものとなる)、もしくは別々にコンテキストルートとドキュメントルートを設置する二つの方法がある。後者の場合、ドキュメントルートはどこでも(他のディレクトリでも、他のマシンでも)よい。今回サーブレットを実行するに当たっては後者(別々に設置)を採用する。以下の場所をそれぞれコンテキストルートおよびドキュメントルートとして話を進める。なお、$CATALINA_HOMETomcatをインストールしたディレクトリである。

 

        コンテキストルート:/WebApplication

        ドキュメントルート:F:\MyDocuments\Java\MyTrial\WebApplication\build\web

 

3.              コンテキストルートの設定

Tomcat Ver 4.xでは規定されていた、コンテキストルートをserver.xmlに記述する体裁が、Tomcat Ver 5.x以降はserver.xmlの中に見当たらない。これは、Tomcat Ver 5.x以降、<Context>エレメントの記述をserver.xml内ではなく、$CATALINA_HOME\conf\Catalina\localhostディレクトリ配下に、そのコンテキストルートをファイル名に持つ<コンテキストルート>.xmlファイルに記述するように改められたためである。そのため今回のコンテキストルート:/WebApplicationを設定すべく、$CATALINA_HOME\webapps\Catalina\localhost\WebApplication.xmlファイルを作成して保存する。内容は以下のとおり。

$CATALINA_HOME\webapps\Catalina\localhost\WebApplication.xml

<!--

    Context configuration file for the WebApplication Test Servlet program

-->

 

<Context 

path="/WebAppliation"

docBase="F:\MyDocuments\Java\MyTrial\WebApplication\build\web"

privileged="true" antiResourceLocking="false" antiJARLocking="false"/>

 

注)ここで注意しなくてはならないのは、保存するファイル名だ。仮にファイル名を.xmlという無名xmlファイルとしてしまうと、結構大変なことになる。既存のwebappsがすべて消失してしまうのである。

 

これで、/WebApplicationというコンテキストルート(ブラウザ上でのTomcatルートの下にある各コンテキストを識別するディレクトリ)が宣言できた。このWebアプリケーションにアクセスするためのURLは、具体的には以下のようになる。

http://localhost:8080/WebApplication/

 

4.              ドキュメントルートの設定

まずドキュメントルートディレクトリ(ここではF:\MyDocuments\ Java\MyTrial\WebApplication\web)を作成し、その下にWEB-INFディレクトリ、さらにその配下にweb.xml(デプロイメント・デスクリプタ)classes/ディレクトリ、lib/ディレクトリを作成する。

 

5.              web.xmlを編集。

web.xmlの中には、目的のサーブレット名をキーにして、そのサーブレットの実行クラスとURLでのアクセスパスを記述する。

web.xml

<?xml version="1.0" encoding="Shift_JIS"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

  <servlet>

    <servlet-name>MyHelloWorld</servlet-name>

    <servlet-class>servlettest.MyHelloWorld</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>MyHelloWorld</servlet-name>

    <url-pattern>/MyHelloWorld</url-pattern>

  </servlet-mapping>

</web-app>

 

今回のサーブレットの場合、サーブレットクラスMyHelloWorldには、以下のURLにてアクセスする。

http://localhost:8080/WebApplication/MyHelloWorld

 

注)web.xmlを始めとして、Javaの設定ファイルは原則ケースセンシティブ(大文字と小文字を区別する)である。はまらないように、注意したい。

 


6.              HTML文書の表示

Tomcatの動作を確認するために、上で作ってきたドキュメント・ルートに、次のコードを持つ index.html を置いて表示させて見る。index.htmlはこのコンテキストでのデフォルトページであり、このページのサーブレットにアクセスするバナーや、プログラムの紹介などを書いたりしても良い。

index.html

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" >

  <head>

    <meta http-equiv="content-type" content="text/html; charset=shift_jis" />

    <title>Hello, World!</title>

  </head>

  <body>

    <h1>Hello index.html!</h1>

    <br>This is the index page for MyHelloWorld servlet.</br>

    <A href="/WebApplication/MyHelloWorld">Click here to start MyHelloWorld servlet</A>

  </body>

</html>

 

以下の、URLから表示を確認する。

http://localhost:8080/WebApplication/index.html

もしくは、

http://localhost:8080/WebApplication    (index.htmlはデフォルトアクセスのため省略可能)

 


7.              サンプルサーブレットの作成

以下のコードをコンパイルして、F:\MyDocuments\Java\MyTrial\WebApplication\build\web\classes\servlettest\MyHelloWorld.classとして配備する。

 

MyHelloWorld.java

package servlettest;

 

import java.io.*;

import java.net.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

public class MyHelloWorld extends HttpServlet {

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

 

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

        PrintWriter out = response.getWriter();

        out.println("<html>");

        out.println("<head>");

        out.println("<title>Servlet MyHelloWorld</title>");

        out.println("</head>");

        out.println("<body>");

        out.println("<h1>Servlet MyHelloWorld at " + request.getContextPath () + "</h1>");

        out.println("<h2>" + new Date() + "<h2>");

        out.println("</body>");

        out.println("</html>");

        out.close();   

    }

}

注)コンパイルの際に、ライブラリ$CATALINA_HOME\common\lib\servlet-api.jarが必要

 

8.              Tomcat Adminツールのインストール

Tomcat Admin5.xではデフォルトではインストールされないので、別個にダウンロードしてきてインストールする必要がある。といっても、すでにTomcat Ver5.xがインストールされているのであれば、解凍して$CATALINA_HOME配下に圧縮ファイルの中身を上書きコピーするだけでよい。(ルートコンテキスト用のadmin.xml等のファイルの改行文字コードのちがいなどに注意!)

 

9.              Apache/Tomcat連携

i)                 Apacheのインストール

まず、Apacheをインストールする。ここでは、Sourceをダウンロードしてビルドするか、Binaryをダウンロードしてインストールするかのいずれかの方法があるが、ここではBinaryをダウンロードする。なお、以下の説明では、Apacheをインストールしたルートディレクトリを$APACHE_HOMEと表していく。

 

ii)              mod_jk.soのインストール

mod_jk.soJakartaプロジェクトのApache/TomcatConnectorサイトに最新版がBinaryの形で公開されている(2005/12/28現在は、JK1.2.15)ので、以下のサイトからこれをダウンロードする。

http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/

ダウンロードするファイルは、mod_jk-apache-2.0.55.soこれを保存した後、適切なファイル名(すなわち、mod_jk.so)に改名したのち、$APACHE_HOME/modulesに保存する。

 

iii)          TomcatApache自動コンフィグレーションをOnにする

Apachemod_jkを使うように指示する最も簡単な方法は、TomcatApache自動コンフィグレーションをOnにすることである。Tomcatserver.xml<Engine>エレメント内に、<Listener>エレメントを、例えば以下の様に追加する。

 

<Listener className="org.apache.jk.config.ApacheConfig"

                modJk="C:/Program Files/Apache Group/Apache2/modules/mod_jk.so" />

 

これにより、TomcatApachemod_jkプラグインがインストール済みのmod_jk.soであることを認識し(modJkオプション)mod_jk.confファイルを自動で生成する。生成先のパスは、デフォルトでconf/auto/mod_jk.confになるが、jkConfigオプションを指定すれば変更できる。また、workersConfigオプションでは、mod_jk の使うworkers.propertiesファイルへのパスが指定できる。デフォルトは、conf/jk/workers.propertiesになる。

 

なお、これらのオプションは、org.apache.jk.config.ApacheConfigクラスで指定されている。(下のURLにヘルプが書いてある)

http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/jk/config/ApacheConfig.html

上記の<Listener>エレメント追加により、以下のmod_jk.confファイルがTomcatによって自動で生成されるようになる。これはTomcatを起動するたびに毎回生成される。だから起動の順番はTomcat->Apacheでなくてはならないのである。


(mod_jk.conf)

########## Auto generated on Wed Dec 28 07:53:08 JST 2005##########

 

<IfModule !mod_jk.c>

  LoadModule jk_module "C:/Program Files/Apache Group/Apache2/modules/mod_jk.so"

</IfModule>

 

JkWorkersFile "C:/Program Files/Apache Software Foundation/Tomcat 5.5/conf/jk/workers.properties"

JkLogFile "C:/Program Files/Apache Software Foundation/Tomcat 5.5/logs/mod_jk.log"

 

JkLogLevel info

 

<VirtualHost localhost>

    ServerName localhost

 

    JkMount /admin ajp13

    JkMount /admin/* ajp13

 

    JkMount /webdav ajp13

    JkMount /webdav/* ajp13

 

    JkMount /servlets-examples ajp13

    JkMount /servlets-examples/* ajp13

 

    JkMount /jsp-examples ajp13

    JkMount /jsp-examples/* ajp13

 

    JkMount /balancer ajp13

    JkMount /balancer/* ajp13

 

    JkMount /host-manager ajp13

    JkMount /host-manager/* ajp13

 

    JkMount /tomcat-docs ajp13

    JkMount /tomcat-docs/* ajp13

 

    JkMount /MyHelloWorld ajp13

    JkMount /MyHelloWorld/* ajp13

 

    JkMount /manager ajp13

    JkMount /manager/* ajp13

</VirtualHost>

 

iv)              httpd.confの修正

$APACHE_HOME/confの中のhttpd.confファイルの末尾に以下の一文を追加する。これは、Apachehttpd.confファイルに、Tomcatが上記iii)の作業により、自動生成したmod_jk.confファイルの指示を取り込むよう指示したものである。

Include "C:/Program Files/Apache Software Foundation/Tomcat 5.5/conf/auto/mod_jk.conf"

 

v)                 workers.propertiesの編集

以下の内容を持つworkers.propertiesファイルを$CATALINA_HOME/conf/jkに新規作成し、保存する。これは、ApacheのワーカたるTomcatの生成条件を指示したものである。

# Define some properties

#workers.apache_log="C:/Program Files/Apache Group/Apache2/logs/"

#workers.tomcat_home="C:/Program Files/Apache Software Foundation/Tomcat 5.5"

#workers.java_home="C:/Program Files/Java/jdk1.5.0_06"

# Define ajp13 worker

worker.list=ajp13

# Set properties for ajp13

worker.ajp13.type=ajp13

worker.ajp13.host=localhost

worker.ajp13.port=8009

worker.ajp13.lbfactor=1

worker.ajp13.cachesize=10

worker.ajp13.cache_timeout=600

worker.ajp13.socket_keepalive=1

worker.ajp13.socket_timeout=60

 

注意!wokers.propertiesファイルは曲者である。以下の注意をしておかないと、大層ハマることになる。

l         Apache Jakarta ProjectJakarta Tomcat Connector  Workeres HowTo サイトに掲載されているサンプルworkers.propertiesファイルには 誤植があるので、注意が必要である。

worker.worker2.host=locahost (locahostではなく、localhostだろう!)

l         worker.list=にリストされるworkerの名前は、mod_jk.confの引数で使われるworkerの名前と一致していなくてはいけない。

JkMount /WebApplication ajp13     

こうなっていたら、workers.propertiesのワーカもajp13でなくてはならない。つまり、

worker.ajp13.host=localhost

といった具合である。

 

vi)              TomcatApache、サーブレットの起動

TomcatApache、サーブレットの順番で起動する。当初

http://localhost:8080/WebApplication/servlet/Cheers

で実行していたサーブレットに

http://localhost/WebApplication/servlet/Cheers

と、ホスト名の後ろにあるポート番号の指定(:8080)なしで実行できるようになっている。

注)ApacheIISは同時に起動できない。TomcatSun Application Serverも同時には起動できない

 

10.       サーブレットのメソッド

HTMLform要素からのデータをサーブレットで処理することが出来る。

A)     GETメソッド

GETメソッドはURLに続けてフォームデータを送信する。HTMLGETメソッドをサーブレットで処理するにはdoGet()メソッドをサーブレットで実装する。

B)     POSTメソッド

POSTメソッドはURLとは別にデータを送信する仕組みである。HTMLGETメソッドをサーブレットで処理するにはdoPost()メソッドをサーブレットで実装する。

 

11.JSP

JSPは、HTMLJavaコードを埋め込むことで動的なページを作成する。<% %>というタグの中に、Javaのコードを埋め込むことが出来る。しかし、JSPに多量のJavaコードを埋め込むと、HTMLJavaコードが混在し、非常に読みにくい。そのため、Javaコード部分を外部クラスとして作成し、JSPから外部クラスを呼び出すアクションタグという仕組みが用意されている。

Webアプリケーションにおいては、以下の様に役割を分担するMVCModel-View-Controller)という構成が推奨されている。

Ø         アプリケーションの処理を制御するサーブレット(Controller

Ø         ビジネスロジックを担当するBeanModel

Ø         見栄えを担当するJSP (View)

 

12. JSPタグ

l         テンプレート:静的なHTMLタグやテキスト

l         JSPタグ:動的なコンテンツ

ディレクティブ:<%@ %>                  JSPの処理方式をコンテナに伝える

²        pageディレクティブ:<%@page %>      ページの処理方式

²        includeディレクティブ:

²        taglibディレクティブ

Ø         スクリプティング要素:                  Javaコードを記述

²        JSP式:<%= %>

²        スクリプトレット:<% %>

²        JSP宣言:<%! %>

Ø         コメント:<%-- --%>

Ø         アクションタグ:                        外部のJavaクラスを実行する