Jakarta Server Pages (JSP)
Jakarta EE の中には Jakarta Server Pages (JSP) という仕様が含まれている。JSPを利用すると、動的コンテンツを持つウェブページをサーブレットを使うよりも簡単に作成することが可能となる。バージョンとしては、Jakarta EE 10 には JSP 3.1 が対応する。
この仕様ではJSPページと呼ばれるテキストドキュメントを使って、リクエストに対するレスポンスの生成方法を記述する。
JSPページは簡単にいうと、HTML等の静的データからなるテンプレートに、動的コンテンツを含めるために特殊なタグやJavaコードを埋め込んだもの、と考えると良いかも知れない。
JSPページファイルの拡張子は慣習として .jsp を使う。
ウェブコンポーネント
ウェブアプリにはサーブレットや静的ファイルだけではなく、JSPのファイルもコンポーネントとして含めることができる。これらのコンポーネントのことをウェブコンポーネントと呼ぶ(他にも可能なコンポーネントはあるが、ここでは触れない)。
この記事では簡単な JSPページを使ったウェブアプリを作成してみる。
サーブレットとの関係
JSPページは、ウェブアプリケーションの中で使用される前に対応するサーブレットクラス変換される。このクラスをJSPページ実装クラスという。このクラスのインスタンスがリクエストオブジェクトを受け取り、レスポンスオブジェクトを更新する。
要するにJSPは内部的な仕組みとしてサーブレットを利用している、ということ。
JSPページの文法/規則
JSPページを記述する文法には下記の2種類がある。
・標準シンタックス
・XMLシンタックス
XML シンタックスで記述されたファイルのことを "JSPドキュメント"と呼ぶ。このファイルはXMLファイルとなり、拡張子は .jspx が使われる。
JSPページのウェブアプリ(SampleJSP)
ウェブアプリが静的ファイルやJSPページだけからなる場合には web.xml ファイルは必須ではないので、WEB-INF ディレクトリの中身は空にしてある。
index.jsp ファイルの中身
1行目はディレクティブと呼ばれる要素で、JSP ページからサーブレットに変換されるときの設定を定義する。
ここではpage ディレクティブの language 属性でJSP ページに埋め込むスクリプトレットの言語を、また contentType 属性でレスポンスページの MIMEタイプを定義している。
(実はデフォルトの設定と同じ)
body エレメントの中に埋め込んでいる下記の部分がスクリプトレットというJSP の構成要素で、このスクリプトがリクエスト処理時に実行される。
<% out.print("Hello World JSP!"); %>
この部分はレスポンスページの中で "Hello World JSP!" という文字列に置き換えられる。
スクリプト言語は上記の通り page ディレクティブの language 属性で設定できるが、実のところ可能な値は "java" のみとなっている。
SampleJSP アプリの表示
作成したSampleJSP アプリケーションをデプロイして、ブラウザでアクセスすると、下記のような画面が表示された。
次の記事では JSPの構成要素や2種類のシンタックスについてもう少し詳しく説明する予定。固定の文字列ではなく、動的なコンテンツをページ内に含めたJSPページの例も作成したい。
参考資料:
JSP については主に下記を参照。
URL: jakarta.ee/specifications/pages/3.1/ にある "Jakarta Server Pages 3.1 Specification Document"
"The Java EE 5 Tutorial"
URL: docs.oracle.com/javaee/5/tutorial/doc/
(この資料は Jakarta EE 9 のチュートリアルである "Jakarta EE Tutorial",
URL: eclipse-ee4j.github.io/jakartaee-tutorial/ の中でJSPについての参照先とされている)
コメント: 記事内の情報は著者が個人的に調べた範囲で理解しているものです。必要に応じて訂正する場合があります。
著者・投稿者: ENARTS05
編集履歴:
2023/10/1 作成
2023/10/2 訂正 "ここではディレクティブの language 属性..." --> "ここではpage ディレクティブの language 属性..."
2023/10/2 訂正 "web.xml ファイルは必要ないので..." --> "web.xml ファイルは必須ではないので..."