現在、ほとんどのパソコンや携帯電話には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アプリケーションでは、通常のアプリケーションと同じく、データを処理します。図書データを検索したり、商品の在庫リストを変更したり、新たな発注リストを作成したり、掲示板への書き込みされた記事を管理するなど、さまざまなデータをさまざまなスタイルで処理する必要があります。
こうしたデータは、たいていの場合、保存されている必要があります。このことを「データが永続性を持つ」と表現します。
データを保存して活用するには、データベースを使うのが良い場合がほとんどです。データベースを使うと、データベース管理システムが「トランザクション」「高速なアクセス」「データの整合性の維持」を自動的に実行してくれるので、便利です。データベース管理システムと同じ処理を自分でプログラミングするのは、面倒な作業になります。