いまJavaの技術は、3つのグループに整理されています。Java2 Platform, Enterprise Edition (以下J2EE)は、企業情報システムなどで必要となる技術を定めたものです。
J2EEは、現在広く普及しているWebと、企業で使われているデータベースを組み合わせて使うことが強く意識されています。
この講義では、J2EEのうち、主に「Webアプリケーション」と呼ばれるソフトウェアの作成技術についてお伝えします。
この講義の目標は、大きく分けて3つあります。
第1に、2年次に学習した(人が多いかもしれない)リレーショナルデータベースとSQLについて復習します。そして、Javaからリレーショナルデータベースにアクセスする"JDBC"という技術について学びます。
第2に、配列のような多数のオブジェクトの集合を扱う「コレクション・フレームワーク」について学びます。
第3に、Webの基本となるHTTPプロトコルとともに、JavaによるWebアプリケーション作成技術の中心となるJSPとServletについて学びます。JSPとServletの基本的な使い方を紹介します。
これまでのインターネットの歴史の中でのいちばん大きな出来事は、1993年に発表された、最初のWebブラウザである"Mosaic"の登場でしょう。操作方法がわかりやすく、手軽にWebページを飛び回ることができるツールの登場は、人々に大きな衝撃を与えました。筆者も、はじめてMosaicを使ってみたときの感動を今でも覚えています。Mosaicとその後継ブラウザであるNetscapeNavigator、そしてWindows95によってインターネットは急速に普及していきました。
そのうち、この便利なWebブラウザを、他のサイトのWebページを見るだけでなく、組織内の情報活用にも利用したい、という動きがでてきました。組織内でやりとりされる各種の情報をWebサーバに集中し、Webブラウザから閲覧できるようにしたい、ということです。このような情報システムは「イントラネット」と呼ばれます。この言葉は、当時世界中に広まりつつあった「インターネット」という言葉の「インター」の部分を、「内部」という意味を持つ接頭辞である「イントラ」に置き換えたものです。インターネットで使われている技術と同じものを使って組織内の情報システムが構築できるということで、イントラネットも瞬く間に流行の技術となりました。
現在では、ほとんどのパソコンや携帯電話にはWebブラウザが搭載され、Webページが世の中にあふれています。ユーザはリンクをクリックしたり、URLを入力したりすることで、あるWebページを見ることができます。しかし、Webページの中には、ユーザがWebページに何かを入力して使うものもあります。一例として、Googleなどのサーチエンジンについて考えてみましょう。ユーザは次のようにしてGoogleを使うことでしょう。
サーチエンジンは、入力された言葉に関するWebページのリストを出力します。入力される言葉が違えば、当然ながら出力されるリストも変化します。ユーザからの入力によって出力結果が変化するので、このようなWebページは「動的な」Webページと呼ばれます。一方で、ユーザからの入力を必要としない普通のWebページは、「静的な」Webページと呼ばれることがあります。
サーチエンジンの他にも、ユーザからの入力が必要になるWebページがたくさんあります。
こうしたWebページは、すべて「ユーザがWebブラウザを使って何かを入力し、必要な結果を得る」という働きをします。この働きは、PCで動く通常のアプリケーションとよく似ています。そこで、先に挙げたようなWebページは「Webアプリケーション」と呼ばれることがあります。
先に述べたように、Webアプリケーションは、インターネット上ではもちろん、イントラネットでもよく使われています。その理由は何でしょうか?
それは、Webが十分に普及しており、取り扱いも楽だからです。
Webアプリケーションを使う側にとっては、それこそどこにでもあるWebブラウザを使ってURLを呼び出すだけで、Webアプリケーションを使えます。特定のソフトウェアをインストールする必要はありません。また、Webブラウザの操作は簡単です。
Webアプリケーションを提供する側にもメリットがあります。まず、既にあるApacheなどのWebサーバをそのまま利用できます。またWebアプリケーションはWebサーバ上に置かれています。そのため、各ユーザのコンピュータにアプリケーションをインストールする必要がなく、サーバ上で集中管理できるので、機能を追加したりバグを修正したりといったメンテナンスが楽になります。
イントラネットはWebをベースにしており、情報を検索したりする必要があるため、先に解説したような「動的なWebページ」が用いられます。つまり、イントラネットもWebアプリケーションが使われています。
初期のイントラネットでは、動的なページを作成するために"CGI (Common Gateway Interface)"という技術を使っています。
CGIでは、Webサーバ上でプログラムが動いています。ユーザからの入力に応じて、CGIプログラムが必要な処理を行い、結果を表示します。また「アクセスカウンタ」のように、ユーザからの入力がなくても、そのページが呼ばれると動作するCGIプログラムもあります。
今でもよく使われているCGIですが、企業の情報システムを支えるには貧弱な点が多くありました。CGIプログラムが呼ばれるたびにプロセスを生成するので処理が重くなり、多数の利用者からのアクセスをさばくことが難しかったです。またセキュリティなどの信頼性にも問題がありました。そのうち、インターネットにショッピングサイトを開設して、このショッピングサイトで使っているシステムと、イントラネットで使っているシステムを組み合わせることが多くなってくると、こうしたCGIの弱点は深刻なものとなります。
そこで、こうした需要に応えた「アプリケーション・サーバ」と呼ばれる製品が多く開発され、企業の情報システムで使われるようになりました。そして、現在のアプリケーションサーバの多くは、前節で述べたJ2EEを採用しているのです。
では、なぜJ2EEが採用されるのでしょうか?その理由についていくつか挙げてみましょう。
現在の大規模なビジネスアプリの世界では、Javaベースの「アプリケーション・サーバ」が流行しています。Javaを採用している、代表的なアプリケーション・サーバのリストを示しましょう。いずれも、現在大きなシェアを持つアプリケーション・サーバです。
ベンダー | 製品名 |
---|---|
BEA | WebLogic |
IBM | WebSphere |
Sun | Sun Java System Application Server |
Oracle | Oracle Application Server |
Apple | WebObjects |
こうしたアプリケーション・サーバは、インターネットでの顧客サービスを提供するだけでなく、従来のCOBOLベースの事務情報システムを、イントラネットに置き換える役割も担っています。
アプリケーション・サーバとJ2EEは、いまJavaがもっとも活躍している分野となっているのです。
Webアプリケーションでは、図1.3.1.1[3層モデル]のような「3層モデル(three-tier model)」という仕組みがよく利用されます。これは、Webアプリケーションに必要な機能を3つに分けたものです。
左側の層はクライアントです。WebアプリケーションではWebブラウザを用います。ユーザは、WebブラウザからあるURLを呼び出すだけで、アプリケーションを利用できます。
中間の層では、Webサーバが動いています。Apacheが代表的ですね。また、Webサーバの中に、「Webコンテナ(あるいはサーブレットコンテナ)」と呼ばれるものが組み込まれており、後述するServletやJSPはこのWebコンテナ内で動いています。
右側の層はデータベースです。多くのWebアプリケーションでは、さまざまなデータを取り扱います。そのために、データベースを利用するのが良い場合が多くなります。
先に見たように、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"という技術によってデータベースにアクセスします