Powered by SmartDoc

J2EE 概説

はじめに

いまJavaの技術は、3つのグループに整理されています。Java2 Platform, Enterprise Edition (以下J2EE)は、企業情報システムなどで必要となる技術を定めたものです。

J2SE (Java 2 Standard Edition)
WindowsなどのPCなどで利用されるJava (Javaの基本部分)
J2EE (Java 2 Enterprise Edition)
ショッピングサイトや企業情報システムなど、アプリケーションサーバで利用されるJava
J2ME (Java 2 Micro Edition)
携帯電話やPDAなどで利用されるJava

J2EEは、現在広く普及しているWebと、企業で使われているデータベースを組み合わせて使うことが強く意識されています。

この講座では、J2EEのうち、主に「Webアプリケーション」と呼ばれるソフトウェアの作成技術についてお伝えします。

この講座の目標は、大きく分けて3つあります。

第1に、Webの基本となるHTTPプロトコルとともに、JavaによるWebアプリケーション作成技術の中心となるJSPとServletについて学びます。JSPとServletの基本的な使い方を紹介します。

第2に、Javaからリレーショナルデータベースにアクセスする"JDBC"という技術について学びことです。

第3に、現在Javaで主流になっている「MVCモデル2」と呼ばれるWebアプリケーションの開発手法について学びます。

J2EEの背景

Webとイントラネット

これまでのインターネットの歴史の中でのいちばん大きな出来事は、1993年に発表された、最初のWebブラウザである"Mosaic"の登場でしょう。操作方法がわかりやすく、手軽にWebページを飛び回ることができるツールの登場は、人々に大きな衝撃を与えました。筆者も、はじめてMosaicを使ってみたときの感動を今でも覚えています。Mosaicとその後継ブラウザであるNetscapeNavigator、そしてWindows95によってインターネットは急速に普及していきました。

そのうち、この便利なWebブラウザを、他のサイトのWebページを見るだけでなく、組織内の情報活用にも利用したい、という動きがでてきました。組織内でやりとりされる各種の情報をWebサーバに集中し、Webブラウザから閲覧できるようにしたい、ということです。このような情報システムは「イントラネット」と呼ばれます。この言葉は、当時世界中に広まりつつあった「インターネット」という言葉の「インター」の部分を、「内部」という意味を持つ接頭辞である「イントラ」に置き換えたものです。インターネットで使われている技術と同じものを使って組織内の情報システムが構築できるということで、イントラネットも瞬く間に流行の技術となりました。

「Webアプリケーション」とは何か?

現在では、ほとんどのパソコンや携帯電話にはWebブラウザが搭載され、Webページが世の中にあふれています。ユーザはリンクをクリックしたり、URLを入力したりすることで、あるWebページを見ることができます。しかし、Webページの中には、ユーザがWebページに何かを入力して使うものもあります。一例として、Googleなどのサーチエンジンについて考えてみましょう。ユーザは次のようにしてGoogleを使うことでしょう。

  1. Googleのページを呼び出す
  2. 調べたい言葉を入力する
  3. 検索ボタンを押す
  4. その言葉に関するWebページのリストが出力される
  5. リストの中からWebページを選んで見てみる

サーチエンジンは、入力された言葉に関するWebページのリストを出力します。入力される言葉が違えば、当然ながら出力されるリストも変化します。ユーザからの入力によって出力結果が変化するので、このようなWebページは「動的な」Webページと呼ばれます。一方で、ユーザからの入力を必要としない普通のWebページは、「静的な」Webページと呼ばれることがあります。

サーチエンジンの他にも、ユーザからの入力が必要になるWebページがたくさんあります。

こうしたWebページは、すべて「ユーザがWebブラウザを使って何かを入力し、必要な結果を得る」という働きをします。この働きは、PCで動く通常のアプリケーションとよく似ています。そこで、先に挙げたようなWebページは「Webアプリケーション」と呼ばれることがあります。

なぜWebアプリケーションなのか

先に述べたように、Webアプリケーションは、インターネット上ではもちろん、イントラネットでもよく使われています。その理由は何でしょうか?

それは、Webが十分に普及しており、取り扱いも楽だからです。

Webアプリケーションを使う側にとっては、それこそどこにでもあるWebブラウザを使ってURLを呼び出すだけで、Webアプリケーションを使えます。特定のソフトウェアをインストールする必要はありません。また、Webブラウザの操作は簡単です。

Webアプリケーションを提供する側にもメリットがあります。まず、既にあるApacheなどのWebサーバをそのまま利用できます。またWebアプリケーションはWebサーバ上に置かれています。そのため、各ユーザのコンピュータにアプリケーションをインストールする必要がなく、サーバ上で集中管理できるので、機能を追加したりバグを修正したりといったメンテナンスが楽になります。

CGIとその限界

イントラネットはWebをベースにしており、情報を検索したりする必要があるため、先に解説したような「動的なWebページ」が用いられます。つまり、イントラネットもWebアプリケーションが使われています。 

初期のイントラネットでは、動的なページを作成するために"CGI (Common Gateway Interface)"という技術を使っています。

CGIでは、Webサーバ上でプログラムが動いています。ユーザからの入力に応じて、CGIプログラムが必要な処理を行い、結果を表示します。また「アクセスカウンタ」のように、ユーザからの入力がなくても、そのページが呼ばれると動作するCGIプログラムもあります。

今でもよく使われているCGIですが、企業の情報システムを支えるには貧弱な点が多くありました。CGIプログラムが呼ばれるたびにプロセスを生成するので処理が重くなり、多数の利用者からのアクセスをさばくことが難しかったです。またセキュリティなどの信頼性にも問題がありました。そのうち、インターネットにショッピングサイトを開設して、このショッピングサイトで使っているシステムと、イントラネットで使っているシステムを組み合わせることが多くなってくると、こうしたCGIの弱点は深刻なものとなります。

Java製アプリケーション・サーバの登場

そこで、こうした需要に応えた「アプリケーション・サーバ」と呼ばれる製品が多く開発され、企業の情報システムで使われるようになりました。そして、現在のアプリケーションサーバの多くは、前節で述べたJ2EEを採用しているのです。

では、なぜJ2EEが採用されるのでしょうか?その理由についていくつか挙げてみましょう。

速い
Javaというと「遅い」というイメージがあるかもしれませんが、Webアプリケーションで使われているJavaは早く動きます。Javaのプログラムは、後述するように「Webコンテナ」にあらかじめロードされています。CGIは呼ばれるごとにプロセスを起動するため処理が遅くなりますが、Webコンテナではプロセスよりも処理負担が少ない「スレッド」を使うので処理が速くなります。また、AWTやSwingといったGUIコンポーネントを使っていないのも速い理由のひとつです。
ライブラリ・ツールの充実
Javaには、プログラム開発に便利なライブラリやツールが揃ってきており、自作しなければならないプログラムが少なくなります。
HTMLとプログラムの分離が容易
CGIでは、プログラムとHTMLが同じファイルに混在してしまい、管理しにくくなります。Javaでは、プログラムとHTMLを分離させる手法が確立されており、見通しのよいWebアプリケーションを作成できます。
Java言語そのものの信頼性
Java言語は信頼性が高い言語です。C言語やC++と違ってポインタ演算がないために、プログラムが暴走する危険性が少なくなっています。また、セキュリティが考慮された言語仕様を持っています。

現在の大規模なビジネスアプリの世界では、Javaベースの「アプリケーション・サーバ」が流行しています。Javaを採用している、代表的なアプリケーション・サーバのリストを示しましょう。いずれも、現在大きなシェアを持つアプリケーション・サーバです。

代表的なアプリケーション・サーバ
ベンダー 製品名
BEA WebLogic
IBM WebSphere
Sun Sun Java System Application Server
Oracle Oracle Application Server
Apple WebObjects

こうしたアプリケーション・サーバは、インターネットでの顧客サービスを提供するだけでなく、従来のCOBOLベースの事務情報システムを、イントラネットに置き換える役割も担っています。

アプリケーション・サーバとJ2EEは、いまJavaがもっとも活躍している分野となっているのです。

Webアプリケーションの仕組み

3層モデル

Webアプリケーションでは、図1.1[3層モデル]のような「3層モデル(three-tier model)」という仕組みがよく利用されます。これは、Webアプリケーションに必要な機能を3つに分けたものです。

3層モデル

左側の層はクライアントです。WebアプリケーションではWebブラウザを用います。ユーザは、WebブラウザからあるURLを呼び出すだけで、アプリケーションを利用できます。

中間の層では、Webサーバが動いています。Apacheが代表的ですね。また、Webサーバの中に、「Webコンテナ(あるいはサーブレットコンテナ)」と呼ばれるものが組み込まれており、後述するServletやJSPはこのWebコンテナ内で動いています。

右側の層はデータベースです。多くのWebアプリケーションでは、さまざまなデータを取り扱います。そのために、データベースを利用するのが良い場合が多くなります。

ServletとJSPによる動的なページの作成

先に見たように、Webアプリケーションでは、ユーザからの入力があると、その入力に応じたページを「動的に」作成しなければいけません。

Javaを使ったWebアプリケーションでは、Webブラウザからのリクエストを処理して動的なページを作成するため、ServletとJSPを使います。

Servletは、HttpServletというクラスを継承して、必要なメソッドをオーバーライドしたクラスです。CGIと同じように、プログラムからHTMLを出力できます。

// Servlet の例
//   フォームから入力された文字を出力します

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

public class ServletTest extends HttpServlet {

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
                      throws ServletException, IOException {
        doIt(request, response);
    }

    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
                       throws ServletException, IOException {
        doIt(request, response);
    }

    private void doIt(HttpServletRequest request,
                      HttpServletResponse response)
                      throws ServletException, IOException {
        request.setCharacterEncoding("Shift_JIS");

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

        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>ServletTest</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<p>");
        out.println("入力された文字は");
        out.println(request.getParameter("title"));
        out.println("です");
        out.println("</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

JSPは、HTMLのソースにプログラムを埋め込んだものです。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<html>
<body>

<%
    for (int i = 1; i <= 5; i++) {
%>
        <p>サンプル<%= i %></p>
<%
    }
%>
</body> 
</html> 

ServletとJSPは、先に述べたように「Webコンテナ」と呼ばれるものの内部で動きます。Webコンテナを使うことで、ユーザからのアクセスが増えても、プロセスは1つしか走らないので、処理が重くならないという利点があります。Jakarta Projectのオープンソースのコンテナである"Tomcat"が最も有名なWebコンテナです。

データベースの利用

Webアプリケーションでは、通常のアプリケーションと同じようにデータを取り扱います。例えば、次のようなデータ処理となるでしょう。

こうしたデータは、たいていの場合、保存されている必要があります。商品の在庫リストが消えてしまったら、大変ですよね。データを保存して活用するには、データベース管理システム(DBMS)を通じてデータベースを使うのが便利な場合がほとんどです。

データベース管理システムを使うことによって、次に挙げるようなデータの管理に必要な処理を自動的に行ってくれます。

こうした処理を自分でプログラミングするのは、面倒な作業になります。そこで、データベースがよく利用されることになります。Javaでは、"JDBC"という技術によってデータベースにアクセスします

参考文献・URL

Java 2 Platform, Enterprise Edition (J2EE)
J2EEで銀行システムの進化を牽引するUFJ銀行