WebアプリケーションはWebブラウザをクライアントとして利用するアプリケーションです。WebサーバによるHTTPを利用したWebの配信機能に、サーブレットコンテナによる動的なコンテンツの利用技術を追加した仕組みがベースとなっています。
ユーザインタフェースとしてのクライアント層や、EJBなどで実装されるビジネスロジックへの橋渡しを行うプレゼンテーション層として利用します。
Webアプリケーションの動作イメージとしては、以下のようになります。
WebアプリケーションのURLにアクセスする
Webブラウザ上にWebページが表示される
HTMLのフォームを使用してデータを入力して、データ(HTTP要求)を送信する
サーバ側でデータを処理し、クライアントに応答ページ(HTTP応答)を返信する
2.に戻り、処理が繰り返される
Webアプリケーションを作成するうえで利用される技術を簡単に説明します。
HTTP(HyperText Transfer Protocol)は、Webサーバとクライアント(ブラウザなど)間で送受信されるプロトコルです。クライアントからWebサーバへリクエスト(要求)を送信すると、Webサーバはリクエストに応じたレスポンス(応答)を返します。
良く使われるリクエストとして、ページの取得を要求するGETメソッドと、フォームに入力したデータをサーバに転送するためのPOSTメソッドがあります。
文書の論理構造を記述するために考案された、タグ付けによる文書記述の規約です。インターネットによる情報公開で用いられ、事実上、Webブラウザのための記述言語となり、Webブラウザの進歩とともに規約が拡張されています。
HTMLのスタイル情報を持つファイルです。このファイルによって、ページのブラウザ上でのレイアウト、デザインを細かく指定することができます。HTML規約の拡張に伴い、HTML内に見た目の情報が記述できるようになりましたが、本来は論理構造を記述することが目的であったことや、サイト内の見た目を統一するのに複数のHTMLへの修正が必要という問題があり、それを改善するため、見た目の情報をスタイルシートとして分離するCSSが考案されました。
HTML文書に、計算した結果を表示させるなどの動作をつけるために作成されたスクリプト言語です。現在ではほとんどすべてのブラウザで動作するようになりました。APIの実装などがブラウザによって異なるため、実装の際には注意が必要です。
Webサーバ上で動的にHTMLドキュメントを生成する技術であり、Webブラウザから入力したデータをサーバ上で処理を行うことができます。また、それまでのWebサーバ上の技術として主流であったCGI(Common Gateway Interface)の問題点である、多重度、セション管理などの問題を解決する技術を提供しています。
サーブレットクラスを作成するには、Servletインタフェースを実装する必要があり、要求オブジェクトからのパラメタの取り出しや応答オブジェクトの作成をメソッドとして実装します。応答オブジェクトの作成では、通常はHTMLドキュメントの出力を行います。しかし、JSPが考案された現在では、動的HTMLドキュメントの作成はJSPで行うのが一般的であり、サーブレットでは、EJBサービスやJSPへの処理の振り分けなどを行います。
また、サーブレットは初めての要求時に初期化され、インスタンスはそれ以降の要求で共有されます。そのため、サーブレットはスレッドセーフとして作成する必要があります。
動的なHTMLコンテンツを作る場合には、サーブレット技術を利用しますが、サーブレットのプログラム内に、サーバで処理するロジックとHTMLコンテンツが混在し、記述性が良くないという問題がありました。そこで、動的コンテンツ(データの埋め込みなど)を出力するために、HTMLファイルにJava記述を可能にしたものがJSPです。
JSPは、運用時にサーバ上でサーブレットクラスに変換されてから実行されます。そのため、実行の基本的な技術はサーブレットと同じになります。
JSTL(JSP Standard Tag Library)は、Java Community Process(JCP)によってJSR-052として標準化されたJSPのタグライブラリです。よく利用される共通的な機能をタグライブラリとしてまとめて提供しています。
JSF(JavaServer Faces)とは、JSR-127としてJava Community Process (JCP)で策定された仕様で、Webアプリケーションのユーザインタフェースを作成するためのアプリケーションフレームワークです。
Java EEに含まれるWebアプリケーションの仕様はServlet 2.5です。また、JSPの仕様はJSP 2.1です。
Servlet 2.5では主に以下の変更があります。
アノテーションが利用可能になりました。
web.xmlの記述形式が変更されました。
また、JSP 2.1では、主に以下の機能が追加されています。
式言語として、Unified ELが利用可能になりました。
Servlet 2.5で、アノテーションが利用可能になり、Dependency Injectionが可能になりました。これにより、JNDIのlookup処理をソースに記述する必要がなくなり、参照しているリソースの宣言の記述などもweb.xmlに不要になります。
以下に主なアノテーションを示します。
@Resource
サーブレットコンテナに対して、Dependency Injectionを行うことを指示します。web.xmlの <resource-ref>要素や<env-ref>要素、<resource-env-ref>要素と同じ働きをします。
@EJB
EJBの参照を宣言します。web.xmlの<ejb-ref>要素や<ejb-local-ref>要素と同じ働きをします。
@DeclareRoles
セキュリティロールを指定します。web.xmlの<security-role>要素と同じ働きをします。
@RunAs
実行時のロールを指定します。web.xmlの<run-as>要素と同じ働きをします。
web.xmlの記述方法が改善されました。複数のパターンや要素を指定する際の記述方法が変更され、まとめて記述することができるようになりました。この結果、記述量が減り、可読性も良くなりました。
filter-mappingでワイルドカードを利用できる
<filter-mapping>の<servlet-name>要素で、ワイルドカード"* "を使えるようになりました。これまでは、すべてのサーブレットを列挙する必要がありました。
url-patternを複数指定できる
<servlet-mapping>や<filter-mapping>にて、複数のパターンのマッピングを指定できるようになりました。
Unified ELが利用可能