現在、ほとんどのパソコンや携帯電話にはWebブラウザが搭載され、Webページが世の中にあふれています。ユーザはリンクをクリックしたり、URLを入力したりすることで、あるWebページを見ることができます。しかし、Webページの中には、ユーザがWebページに何かを入力して使うものもあります。一例として、Googleなどのサーチエンジンについて考えてみましょう。ユーザがGoogleを使うとき、次のような動きになります。
サーチエンジンは、入力された言葉について何らかの処理を行い、言葉によって違ったWebページのリストを出力します。
また、サーチエンジンの他にも、ユーザからの入力が必要になるWebページがたくさんあります。
こうしたWebページは、すべて「ユーザがWebブラウザを使って何かを入力し、必要な結果を得る」という働きをします。このことは、PCで動く通常のアプリケーションとよく似た働きをします。そこで、先に挙げたようなWebページは「Webアプリケーション」と呼ばれています。
Webアプリケーションは、多くの人々にそのサービスを使ってもらうという目的で、インターネット上でよく使われています。しかし、それだけでなく企業内の情報システムでもよく使われています。その理由は何でしょうか?
それは、Webが十分に普及しているからです。
Webアプリケーションを使う側にとっては、どこにでもあるWebブラウザを使って、URLを呼び出すだけでWebアプリケーションを使えます。また、Webブラウザの操作は簡単です。
Webアプリケーションを提供する側にもメリットがあります。まず、既にあるApacheなどのWebサーバをそのまま利用できます。またWebアプリケーションはWebサーバ上に置かれてるので、各ユーザのコンピュータにインストールする必要がなく、メンテナンスが楽になります。
Webアプリケーションを作成する言語として、企業などの大規模なシステムを中心にJavaがよく使われています。その理由を挙げてみましょう。
Webアプリケーションでは、「3層モデル(three-tier model)」という仕組みがよく利用されます。
Webアプリケーションのクライアントは、当然ながらWebブラウザです。ユーザは、WebブラウザからあるURLを呼び出すだけで、アプリケーションを利用できます。
中間の層では、Webサーバが動いています。Webサーバとしては、Apacheが著名です。また、Webサーバの中に、「Webコンテナ(あるいはサーブレットコンテナ)」と呼ばれるものが組み込まれており、後述するServletやJSPはこのWebコンテナ内で動いています。
また、多くのWebアプリケーションでは、さまざまなデータを取り扱います。そのために、データベースを利用する場合が多くなります。
先に見たように、Webアプリケーションでは、ユーザからの入力があると、その入力に応じたページを「動的に」作成しなければいけません。
通常、こうしたことを実現するためには、CGI (Common Gateway Interface)が使われます。
CGIでは、Webサーバ側でプログラムが動いています。ユーザからの入力に応じて、CGIプログラムが必要な処理を行い、結果を表示します。また「アクセスカウンタ」のように、ユーザからの入力がなくても、そのページが呼ばれると動作するCGIプログラムもあります。
CGIはとても便利です。ただ、次のような欠点もあります。
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アプリケーションでは、通常のアプリケーションと同じく、データを処理します。図書データを検索したり、商品の在庫リストを変更したり、新たな発注リストを作成したり、掲示板への書き込みされた記事を管理するなど、さまざまなデータをさまざまなスタイルで処理する必要があります。
こうしたデータは、たいていの場合、保存されている必要があります。このことを「データが永続性を持つ」と表現します。
データを保存して活用するには、データベースを使うのが良い場合がほとんどです。データベースを使うと、データベース管理システムが「トランザクション」「高速なアクセス」「データの整合性の維持」を自動的に実行してくれるので、便利です。データベース管理システムと同じ処理を自分でプログラミングするのは、面倒な作業になります。