Javaに関する様々な情報をご紹介します。

3プログラム配置・実行

Javaに関する様々な情報をご紹介します。

プログラム配置・実行

ここでは、Tomcatへプログラムを配置し、実行するまでの手順を解説します。Javaアプリ開発では、プログラムを実行環境(アプリケーションサーバなど)へ配置することをデプロイメントと呼んでいます。

実行環境
  • ・Windows8.1 Pro
  • ・JDK 1.8.0_05
  • ・Tomcat 8.0.12

手順概要

Tomcatへのプログラム配置・実行手順は以下のようになります。

  1. JSP/サーブレットプログラムを作成する。
  2. サーブレットプログラムをコンパイルする。
  3. プログラムを配置する。
  4. Tomcatの設定を行う。
  5. プログラムを実行する。

1. JSP/サーブレットプログラムの作成

実行するJSP/サーブレットプログラムを作成します。今回は実行すると現在の時刻を表示するプログラムを使用します。JSP/サーブレットの記述方法、文法の解説はここでは省略します。

【JSPプログラム】HelloJsp.jsp

<HTML>
<BODY>
<%= new java.util.Date() %>
</BODY>
</HTML>

【サーブレットプログラム】HelloServlet.java

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws IOException, ServletException {
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println("<BODY>");
        out.println(new java.util.Date());
        out.println("</BODY>");
        out.println("</HTML>");
    }
}

2. サーブレットプログラムのコンパイル

サーブレットプログラムをコンパイルします。JSPはTomcatにより、自動的にコンパイルされるため、コンパイルの必要はありません。

ソースファイル(HelloServlet.java)があるフォルダに移動し、javacコマンドでコンパイルします。コンパイルする際は、サーブレット用のクラスライブラリ(servlet-api.jar)を-classpathオプションに指定します。
※ -classpathの詳細はJavaの道(クラスパス)を参照してください。

C:\Java\source\TEST>javac -classpath "C:\Program Files\Apache Software Foundatio n\Tomcat 6.0\lib\servlet-api.jar";. HelloServlet.java
# Tomcat 6.0など指定PATHに空白があるため""でPATHを囲んでいます。

C:\Java\source\TEST>

3. プログラムの配置

JSP/サーブレットを含むJ2EEでは、アプリケーションで使用するプログラムの配置場所、配置するディレクトリ名が定められています。J2EEで定められるディレクトリ構成は以下のようになります。

J2EE仕様で定められているプログラム配置構成

Tomcat_プログラムの配置_1

ルートディレクトリはどこに設置しても良いですが、通常Tomcatインストールディレクトリ内のwebappsディレクトリ配下に設置します。今回の解説で使用するプログラムの配置構成は以下のように行います。Tomcatのインストールティレクトリを「$CATALINA_HOME」で表します。

  1. $CATALINA_HOME\wabapps配下に、ルートディレクトリjavaroadを作成します。
  2. ルートディレクトリ配下にJSPファイルを格納するディレクトリjspdirを作成し、HelloJsp.jspファイルを設置します。
  3. ルートディレクトリ配下にWEB-INFディレクトリ、その配下にclassesディレクトリ、libディレクトリを作成します。
  4. classesディレクトリにHelloServlet.javaをコンパイルしてできたHelloServlet.classファイルを設置します。
  5. WEB-INFディレクトリ配下にweb.xmlファイルを作成します(設定は後で行います)。

解説で使用するプログラム配置構成

Tomcat_プログラムの配置_2

4. Tomcatの設定

Tomcatはコンテキストと言う単位で、アプリケーションを管理します。プログラムを配置した後は、配置した領域をコンテキストとしてTomcatに設定します(コンテキストの設定は必須ではありません。デフォルトのコンテキストの振る舞いを変えたい場合に設定が必要です。今回は、デフォルトの振る舞いから変更はありませんが、一応設定を行います。)。

Tomcat5.0からコンテキストの設定方法が変わりました。コンテキストの設定は$CATALINA_HOME\conf\[engine name]\[host name]ディレクトリ配下にコンテキスト名.xmlと言うXMLファイルを作成して行います。[engine name]、[host name]はserver.xmlに設定されているengine名、host名です。デフォルトの設定は[engine name]が[Catalina]、[host name]が[localhost]です。今回はコンテキスト名をjavaroadにするため、設定ファイルは$CATALINA_HOME\conf\Catalina\localhostディレクトリ配下の、javaroad.xmlファイルとなります。

javaroad.xmlの設定

javaroad.xmlファイルを作成し、以下の設定内容を記述します。

<Context
reloadable="false"/>
reloadableはプログラムに変更があった場合、自動的に再読み込みを行うかを設定します。trueに設定すると動作時に再読み込みが必要なファイルがあるかを確認するため動作が遅くなります。開発時以外はfalseに設定します。falseの場合、プログラムを再読み込みさせたい場合はTomcatの再起動が必要になります。
この他、path、docBaseなどのパラメータもありますが、Tomcatの最新バージョンでは、docBaseで指定するPATH名がappBaseの配下にある場合は、path、docBaseとも明示的に指定する必要はありません。指定した場合は、Tomcatのログに警告文(警告: A docBase [docBaseのパス名] inside the host appBase has been specified, and will be ignored.)が生成されます。appBaseはTomcatのデフォルトの設定では$CATALINA_HOME/webappsです。

web.xmlの設定

コンテキストを設定した後は、コンテキスト内のアプリケーションの動作を設定します。 コンテキスト内のアプリケーションの動作は$CATALINA_HOME\javaroad\WEB-INFディレクトリ配下のweb.xmlファイルに記載します。

web.xmlはサーブレットファイルのURL指定、セキュリティ管理、初期化パラメータ設定などコンテキスト内のアプリケーション動作に関わる設定をします。ここでは、サーブレットファイルのURL指定について解説します。以下の設定をweb.xmlに記載します。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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"
        version="2.4">

    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/Hello</url-pattern>
    </servlet-mapping>

</web-app>
<servlet>・・・</servlet>
<servlet>タグには<servlet-class>タグにサーブレットのクラス名「HelloServlet」、<servlet-name>タグに、それにマッピングするキーワード「Hello」を指定します。
<servlet-mapping>・・・</servlet-mapping>

<servlet-mapping>タグでは、<servlet-name>タグには上記と同様に「Hello」、<url-pattern>タグにはそれにマッピングするURLのキーワード「/Hello」を指定します。

上記の2つのタグを設定することで、どのURLパターンからどのサーブレットクラスを呼び出すかが指定できます。URLに/Helloと指定すると(ここでは、http://localhost:8080/javaroad/Hello)、<servlet-name>を介してマッピングされたHelloServletクラスが呼び出されます。

5. プログラムの実行

Tomcatを起動させ、JSP/サーブレットプログラムそれぞれにアクセスします。

JSPプログラム(HelloJsp.jsp)
JSPプログラムにアクセスする場合は、JSPファイルを設置したパス名をURLに指定します。
http://localhost:8080/javaroad/jspdir/HelloJsp.jsp
サーブレットプログラム(HelloSerlvet.class)
サーブレットプログラムにアクセスする場合は、web.xmlで指定したパス名をURLに指定します。
http://localhost:8080/javaroad/Hello

それぞれ、以下のように現在の時刻を表すメッセージが表示されるとプログラム配置・実行の成功です。

Tomcat_実行結果

3プログラム配置・実行