M Tomcat 上で動く Java サーブレット・プログラム

金子邦彦研究室プログラミングTomcat を用いた Java サーブレット・プログラミングTomcat 上で動く Java サーブレット・プログラム

Tomcat 上で動く Java サーブレット・プログラム

Apache Tomcat とは(以下,Apache Tomcat のことを「Tomcat」と書く), Java サーブレット(Java Servlet)と Java サーバ・ページ (JavaServer Page; JSP) が動くための土台となるソフトウェアです.

このページでは,Tomcat 上で動く Java サーブレット・プログラムの 見本を使って,Tomcat の使い方を説明する. Tomcat では,ディレクトリ構造の流儀がありますので,あえて Eclipse を使わないで,練習しておきます.

前準備

Tomcat のインストール を終えていること。

Tomcat 付属のサンプルプログラム servlets-examples のディレクトリ構造

ファイル構成を把握しておく

Tomcat バージョン 6.0 の場合

 

Tomcat バージョン5.5 の場合

 

簡単な Java サーブレット・プログラムの見本

Java サーブレットプログラムを作成し,動作させる手順を説明する.

Java プログラムの配置,クラス名,リクエスト URL など

Java サーブレットを動かすために 「リクエスト URL ← マッピング → サーブレット名 ← マッピング → クラス名」という形式でマッピングを行う. このマッピングを定義するファイル (web.xml) と,Java クラスのファイルは,所定の場所におく必要がある. このページでは,次のように書く.

ディレクトリの確認

Tomcat インストールディレクトリの確認

 

以下,「/var/lib/tomcat6」のように書く.適切に読み替えてください。

サーブレットの作成手順

  1. ディレクトリの作成

    プログラムファイル,ライブラリファイル,web.xml が置かれるディレクトリの作成

    1. /var/lib/tomcat6/webapps/hogeapp デイレクトリを作成

      sudo mkdir /var/lib/tomcat6/webapps/hogeapp
      

      [image]
    2. /var/lib/tomcat6/webapps/hogeapp ディレクトリの下に WEB-INF ディレクトリを作る.

      sudo mkdir /var/lib/tomcat6/webapps/hogeapp/WEB-INF
      

      [image]
    3. WEB-INF ディレクトリの下に lib ディレクトリclasses/hoge/hoge/com ディレクトリを作る
      • プログラムファイルが置かれるディレクトリ: /var/lib/tomcat6/hogeapp/WEB-INF/classes/hoge/hoge/com
      • ライブラリファイルが置かれるディレクトリ: /var/lib/tomcat6/hogeapp/WEB-INF/lib

      sudo mkdir /var/lib/tomcat6/webapps/hogeapp/WEB-INF/lib
      sudo mkdir /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes
      sudo mkdir /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes/hoge
      sudo mkdir /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes/hoge/hoge
      sudo mkdir /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes/hoge/hoge/com
      

      [image]
  2. HelloWorld.java の作成

      /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes/hoge/hoge/com ディレクトリの下に, HelloWorld.java を以下のように作る

    【要点】

    package hoge.hoge.com;
    
    import java.io.*;
    import java.text.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class HelloWorld extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet{
    
        public HelloWorld() {
            super();
        }
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException
        {
            response.setContentType("text/html; charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title>HelloWorld</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>HelloWorld</h1>");
            out.println("</body>");
            out.println("</html>");
            out.close();
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException
        {
            // to be filled ( if necessary )
        }
    }
    
  3. コンパイル 

    次の手順でコンパイルする.

    cd /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes/hoge/hoge/com
    javac HelloWorld.java
    

    コンパイル時に,エラーメッセージが出ないことを確認.

    [image]

    ※ 「HelloWorld.java:6: パッケージ java.servlet は存在しません」というようなエラーメッセージが出る場合,

    [image]

    Ubuntu の場合

    環境変数 CLASSPATH が

    /usr/share/tomcat6/lib/servlet-api.jar:/usr/share/tomcat6/lib/servlet-api.jar
    

    を含んでいることを確認する。 (Ubuntu の場合の設定例)

    Windows の場合

    環境変数 CLASSPATH が

    C:\tomcat60\lib\servlet-api.jar;C:\tomcat60\lib\servlet-api.jar
    

    を含んでいることを確認する。 (Ubuntu の場合の設定例)

マッピング定義

マッピングの指定は、web.xml に書く。 そのために、 /var/lib/tomcat6/webapps/hogeapp/WEB-INF/web.xml を作る

クラス名を指定する部分は,完全修飾クラス形式で指定することに注意してください. web.xml 内に書く完全修飾クラス名は,hoge.hoge.com.HelloWorld のようになる

<?xml version="1.0" encoding="UTF-8"?>
<!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 id="WebApp_ID" 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">
<display-name></display-name>
<servlet>
    <description></description>
    <display-name></display-name>
    <servlet-name>hoge</servlet-name>
    <servlet-class>hoge.hoge.com.HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>hoge</servlet-name>
  <url-pattern>/Welcome</url-pattern>
</servlet-mapping>

</web-app>
 

[image]

これで,Servlet のリクエスト URL である http://localhost:8080/hogeapp/Welcome と,Java のサーブレット /var/lib/tomcat6/webapps/hogeapp/WEB-INF/classes/hoge/hoge/com/HelloWorld.classes の間のマッピングが定義されたことになる.

テスト実行

  1. Tomcat の再起動

    Ubuntu の場合の実行手順 (例)

     

    sudo /usr/sbin/service tomcat6 restart
    

    [image]

    Windows の場合の実行手順 (例)

      tomcat6w (あるいは tomcat5w) で,Stop を押して,Start を押す.

    [image]
  2. Servlet のリクエスト URL である

    http://localhost:8080/hogeapp/Welcome

    にアクセスして,動作確認

    「Hello World」と表示されたら成功

    Ubuntu の場合の実行結果 (例)

    [image]

    Windows の場合の実行結果 (例)

    [image]