Powered by SmartDoc

Webアプリケーション概説

WebアプリケーションとJava

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

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

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

サーチエンジンは、入力された言葉について何らかの処理を行い、言葉によって違ったWebページのリストを出力します。

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

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

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

Webアプリケーションは、多くの人々にそのサービスを使ってもらうという目的で、インターネット上でよく使われています。しかし、それだけでなく企業内の情報システムでもよく使われています。その理由は何でしょうか?

それは、Webが十分に普及しているからです。

Webアプリケーションを使う側にとっては、どこにでもあるWebブラウザを使って、URLを呼び出すだけでWebアプリケーションを使えます。また、Webブラウザの操作は簡単です。

Webアプリケーションを提供する側にもメリットがあります。まず、既にあるApacheなどのWebサーバをそのまま利用できます。またWebアプリケーションはWebサーバ上に置かれてるので、各ユーザのコンピュータにインストールする必要がなく、メンテナンスが楽になります。

なぜJavaを使うか

Webアプリケーションを作成する言語として、企業などの大規模なシステムを中心にJavaがよく使われています。その理由を挙げてみましょう。

速い
Javaというと「遅い」というイメージが一般的ですが、Webアプリケーションで使われているJavaは早く動きます。Javaのプログラムは、後述するように「サーブレットコンテナ」にロードされています。CGIは呼ばれるごとにプロセスを起動するため処理が遅くなりますが、サーブレットコンテナでは、プロセスよりも処理負担が少ない「スレッド」によって処理されるので、速い動作になります。
ライブラリ・ツールの充実
Javaには、プログラム開発に便利なライブラリやツールが揃ってきており、自作しなければならないプログラムが少なくなります。
HTMLとプログラムの分離が容易
CGIでは、処理をするプログラムとHTMLが同じファイルに混在してしまい、管理しにくくなります。Javaでは、プログラムとHTMLを分離させる手法があり、見通しのよいWebアプリケーションを作成できます。

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

3層モデル

Webアプリケーションでは、「3層モデル(three-tier model)」という仕組みがよく利用されます。

3層モデル

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

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

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

動的なページの作成

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

通常、こうしたことを実現するためには、CGI (Common Gateway Interface)が使われます。

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

CGIはとても便利です。ただ、次のような欠点もあります。

  1. プラットフォームごとにプログラムの互換性が問題となる。
  2. CGIプログラムが呼ばれるたびにプロセスが発生するので、処理が重くなる。
  3. 「セッション管理」がやりにくい。セッション管理とは、ユーザとサーバの間でやり取りされる情報を記憶して管理することである。

Javaを使ったWebアプリケーションでは、Webブラウザからのリクエストを処理して動的なページを作成するため、ServletとJSPを使います。ServletとJSPを使うことで、先に示したようなCGIの問題点は解消されます。

Servletは、HttpServletというクラスを継承したクラスです。プログラム中に、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つしか走らないので、処理が重くならないという利点があります。Webコンテナでは、Jakarta Projectの「Tomcat」が著名です。

データベースの必要性

Webアプリケーションでは、通常のアプリケーションと同じく、データを処理します。図書データを検索したり、商品の在庫リストを変更したり、新たな発注リストを作成したり、掲示板への書き込みされた記事を管理するなど、さまざまなデータをさまざまなスタイルで処理する必要があります。

こうしたデータは、たいていの場合、保存されている必要があります。このことを「データが永続性を持つ」と表現します。

データを保存して活用するには、データベースを使うのが良い場合がほとんどです。データベースを使うと、データベース管理システムが「トランザクション」「高速なアクセス」「データの整合性の維持」を自動的に実行してくれるので、便利です。データベース管理システムと同じ処理を自分でプログラミングするのは、面倒な作業になります。