| ファイル名拡張子 |
.jsp、.jspx、.jspf |
|---|---|
| インターネットメディアの種類 |
アプリケーション/jsp [引用が必要] |
| 開発者 | エクリプス財団 |
| 初回リリース | 1999年 |
| 最新リリース | 4.0 2024年4月9日 |
| フォーマットの種類 | 動的ウェブページ |
| 標準 | JSR245 |
| オープンフォーマット? | はい |
| Webサイト | プロジェクト.eclipse.org/projects/ee4j.jsp |
Jakarta Server Pages(JSP、旧称JavaServer Pages)[1]は、ソフトウェア開発者がHTML、XML、SOAP 、またはその他のドキュメントタイプに基づいて動的に生成されたWebページを作成するのに役立つ一連のテクノロジです。1999年にサンマイクロシステムズによってリリースされた[2] JSPは、 PHPやASPに似ていますが、Javaプログラミング言語を使用します。
Jakarta Server Pages をデプロイして実行するには、 Apache TomcatやJettyなどのサーブレット コンテナーを備えた互換性のある Web サーバーが必要です。
概要

アーキテクチャ的には、JSPはJakarta Servletの高レベルの抽象化と見なすことができます。JSPは実行時にサーブレットに変換されるため、JSPはサーブレットです。各JSPサーブレットはキャッシュされ、元のJSPが変更されるまで再利用されます。[3]
Jakarta Server Pagesは、独立して使用することも、サーバー側のモデル・ビュー・コントローラー設計のビューコンポーネントとして使用することもできます。通常、モデルにはJavaBeans 、コントローラーにはJavaサーブレット(またはApache Strutsなどのフレームワーク)を使用します。これはモデル2アーキテクチャの一種です。 [4]
JSP を使用すると、Java コードと特定の定義済みアクションを、HTML などの静的 Web マークアップ コンテンツにインターリーブできます。結果のページは、サーバー上でコンパイルおよび実行され、ドキュメントが配信されます。コンパイルされたページと、それに依存する Java ライブラリには、マシン コードではなく Java バイトコードが含まれます。他の .jar または Java プログラムと同様に、コードは、サーバーのホストオペレーティング システムと対話して抽象的でプラットフォームに依存しない環境を提供するJava 仮想マシン(JVM) 内で実行する必要があります。
JSPは通常HTMLやXML文書を配信するために使用されますが、OutputStreamを使用することで他の種類のデータも配信できます。[5]
Webコンテナは、リクエスト、レスポンス、セッション、アプリケーション、構成、ページ、ページコンテキスト、出力、例外などの JSP 暗黙オブジェクトを作成します。JSP エンジンは、変換フェーズ中にこれらのオブジェクトを作成します。
構文
ディレクティブ、スクリプトレット、式、宣言
JSP はスクリプト機能にいくつかの区切り文字を使用します。最も基本的な区切り文字は で <% ... %>、JSPスクリプトレットを囲みます。スクリプトレットは、ユーザーがページを要求したときに実行される Java コード[6]のフラグメントです。
その他の一般的な区切り文字 <%= ... %>には、スクリプトレットと区切り文字が式の評価結果に置き換えられる式や、で示されるディレクティブなど<%@ ... %>があります。[6] [7]
Java コードは、単一のスクリプトレット ブロック内で完結したり自己完結したりする必要はありません。ページ全体の構文が正しい限り、Java コードはマークアップ コンテンツにまたがることができます。たとえば、ページを正常にコンパイルするには、1 つのスクリプトレットで開かれた Java if/for/whileブロックを、後のスクリプトレットで正しく閉じる必要があります。これにより、コードが混在し、不適切なプログラミング プラクティスが発生する可能性があります。
Java コードの分割ブロック (複数のスクリプトレットにまたがる) 内のコンテンツは、そのコードの対象となります。if ブロック内のコンテンツは、if条件が true と評価された場合にのみ出力に表示されます。同様に、ループ構造内のコンテンツは、ループ本体の実行回数に応じて、出力に複数回表示されることがあります。
例
以下は、JSP ページ内の 有効なfor ループです。
<p> 3まで数えます : </p>
<% for ( int i = 1 ; i < 4 ; i ++ ) { %> <p>この数は<%= i %>です。</p> <% } %> <p> OK。</p>
ユーザーの Web ブラウザに表示される出力は次のようになります。
3 つ数えます: この番号は1です。 この数字は2です。 この数字は3です。 わかりました。
標準 JSP タグ
useBean タグ
JSPuseBeanタグを使用すると、開発者はJavaBeanにアクセスして作成することができます。[8]タグ
の使用はuseBeanHTMLタグに似ていますが、JavaBeansのすべてのJSPタグはXML構文を使用します。したがって、タグを含むコードではuseBean大文字と小文字が区別されます。[9]
タグuseBeanにはいくつかの属性が含まれています。id属性は、Bean にアクセスするために使用する名前を宣言します。class属性は、Bean のパッケージとクラスを宣言します。Beanscopeを格納するオブジェクトを宣言します。スコープの値は、Bean が Java アプリケーションの残りの部分で使用できる期間を定義します。スコープは次の 4 つの値のいずれかになります: [9]
- スコープ
pageは、Bean が暗黙的に定義されたPageContextオブジェクト内にあり、現在のページでのみ使用できることを意味します。デフォルトでは、すべての Bean のスコープは ですpage。 - スコープ
requestは、Bean がオブジェクト内で見つかることを意味しますHttpServletRequest。この Bean には、現在のリクエスト オブジェクトにアクセスできる他のすべての JSP およびサーブレットからアクセスできます。 - スコープ
sessionは、Bean がオブジェクト内で見つかることを意味しますHttpSession。この Bean には、指定されたオブジェクトにアクセスできる他のすべての JSP およびサーブレットからアクセスできますHttpSession。 - スコープ
applicationは、Bean がオブジェクト内で見つかることを意味しますServletContext。この Bean には、指定されたオブジェクトにアクセスできる他のすべての JSP およびサーブレットからアクセスできますServletContext。
getPropertyタグとsetPropertyタグ
タグを使用してBeanを作成した後useBean、getPropertyおよびsetPropertyタグを使用してBeanのプロパティを取得および設定できます。JSPは、getProperty作成されたBeanのプロパティを取得するために使用されます。JSPsetPropertyタグは、Beanのプロパティを設定するために使用されます。getProperty およびsetPropertyタグの場合、name属性はBeanの名前を指定するために使用されます。したがって、name属性は、タグによって提供されるid属性と一致する必要がありますuseBean。[10]
表現言語
JSP仕様のバージョン2.0では、Javaオブジェクトのデータや関数にアクセスするために使われる式言語(EL)のサポートが追加されました。JSP 2.1では、これはJavaServer Facesでも使われているUnified Expression Languageに組み込まれました。[11]
JSP 式言語は、開発者が特定のリクエスト オブジェクトから属性と JavaBean プロパティを取得できるようにするコンパクトな構文を使用します。EL を使用する場合は、コードの先頭にドル記号 ("$") を追加する必要があります。ドル記号の後には、開き中括弧 ("{") と閉じ中括弧 ("}") が続きます。コードは開き中括弧と閉じ中括弧の間に記述されます。[12]
例
以下は EL構文の例です。
variableオブジェクト内のの値はjavabeanです${javabean.variable}。
追加タグ
JSP構文は、組み込み機能を呼び出すためにJSPアクションと呼ばれる追加のタグを追加します。[7]さらに、この技術により、標準JSP構文の拡張として機能するカスタムJSPタグライブラリの作成が可能になります。[13]そのようなライブラリの1つがJSTLです。[14]
Jakarta 標準タグライブラリ
Jakarta Standard Tag Library (JSTL)は、JSPで実行する必要がある一般的なタスクをサポートしています。[15]例としては、反復処理や条件文(Javaの「for」および「if」ステートメントに相当)などがあります。[14]
JSTLのすべてのライブラリのうち、JSTLコアライブラリが最も一般的に使用されています。タグライブラリディレクティブを使用して、プレフィックスを使用してJSTLコアライブラリのURIを指定する必要があります。プレフィックスにはさまざまな選択肢がありますが、このライブラリでは「c」プレフィックスが一般的に使用されます。[16]
XML準拠のJSP
JSPページは、完全に有効なXML構文で記述することもできます。[17]このようなJSPファイルは、通常、代替.jspxファイル拡張子を使用し、これにより、アプリケーションサーバーはXML構文を検証します。
通常の JSP 構文は<% ... %>XML では有効ではないため、開発者は JSP が提供する代替タグを使用する必要があります。たとえば、共通<%@ page .. %>ディレクティブはタグとして記述され、タグ ライブラリは通常のタグではなくXML 名前空間<jsp:directive.page .. />を使用してインポートされます。
<%@ taglib .. %>
コンパイラ
JavaServer Pagesコンパイラは、JSPを解析して実行可能なJavaサーブレットに変換するプログラムです。このタイプのプログラムは通常、アプリケーションサーバーに埋め込まれ、JSPが初めてアクセスされたときに自動的に実行されますが、パフォーマンスを向上させるためにページを事前にコンパイルしたり、エラーをテストするためにビルドプロセスの一部としてコンパイルしたりすることもできます。[18]
一部のJSPコンテナは、コンテナがJSPファイルの タイムスタンプをチェックしてページが変更されたかどうかを確認する頻度の設定をサポートしています。通常、このタイムスタンプはソフトウェア開発中は短い間隔(数秒程度)に設定され、デプロイされたWebアプリケーションではより長い間隔(数分程度、またはまったく間隔を空けない)に設定されます。[19]
批判
「Murach's Java Servlets and JSP」の著者である Joel Murach 氏と Michael Urban 氏によると、JSP に Java コードを埋め込むのは一般的に悪い習慣です。[20]より良い方法は、JSP に埋め込まれたバックエンド ロジックを の Java コードに移行することですServlet。[20]このシナリオでは、 がServlet処理を担当し、JSP が HTML の表示を担当し、[20]明確な関心の分離が維持されます。
2000年、「Java Servlet Programming」の著者であるジェイソン・ハンターは、JavaServer Pagesの「問題」をいくつか説明しました。[21]それでも、彼は、JSPは「Javaプラットフォームに最適なソリューション」ではないかもしれないが、「非Javaソリューションに最も近いJavaソリューション」であると書いています。ここで彼が言及している非Javaソリューションとは、MicrosoftのActive Server Pagesのことです。後に、彼は自分のサイトに、JSPは2000年以降改善されているというメモを追加しましたが、競合相手であるApache VelocityとTea(テンプレート言語)も挙げました。[21]今日、いくつかの代替手段と、大規模なWebアプリ内のJSP指向のページの多くは、技術的負債と見なされています。
参照
サーブレットコンテナ
Javaベースのテンプレートの代替
参考文献
- ^ Matthew Tyson (2022年9月9日). 「JSPとは何か? Jakarta Server Pagesの紹介」InfoWorld . 2024年5月30日閲覧。
- ^ 「FoRK アーカイブ: Sun JSP 1.0 は利用できません」。www.xent.com。
- ^ JSP ページのライフ サイクル (Sun ドキュメント)
- ^ Seshadri, Govind (1999 年 12 月 29 日)。「JavaServer Pages Model 2 アーキテクチャを理解する」。JavaWorld。2020年7 月 17 日閲覧。
- ^ 「OutputStream はすでに取得済みです (Coderanch の JSP フォーラム)」。coderanch.com。
- ^ ab JSP 1.2 構文リファレンス
- ^ Murach & Urban 2014、pp. 198、§2 基本的なサーブレットと JSP のスキル - 要約。
- ^ ab Murach & Urban 2014、pp. 186–187、§2 基本的なサーブレットと JSP スキル - useBean タグのコーディング方法。
- ^ 統一表現言語 (Sun Developer Network)
- ^ Murach & Urban 2014、pp. 176–177、§2 基本的なサーブレットと JSP のスキル - EL を使用して属性と JavaBean プロパティを取得する方法。
- ^ タグライブラリチュートリアル - タグライブラリとは? (日) 2012年4月19日アーカイブ、Wayback Machine
- ^ ab 「JavaServer Pages 標準タグ ライブラリ - Java EE 5 チュートリアル」。docs.oracle.com。
- ^ Murach & Urban 2014、pp. 270–273、§2 基本的なサーブレットと JSP スキル -JSTL 入門。
- ^ Murach & Urban 2014、pp. 178、§2 基本的なサーブレットと JSP のスキル - コア JSTL ライブラリを有効にする方法。
- ^ 「Java EE 5チュートリアル、第6章JavaServer Pagesドキュメント」。oracle.com 。 2022年7月27日閲覧。
- ^ 「IBM Docs」. www.ibm.com .
- ^ 「SyBooks Online」. infocenter.sybase.com .
- ^ abc Murach & Urban 2014、pp. 46–47、§1 正しく始めましょう - 2 ページ目の JSP。
- ^ ab JSP の問題点 (2000 年 1 月 25 日)
引用文献
- Murach, Joel; Urban, Michael (2014)。Murach の Java Servlets and JSP。Mike Murach & Associates。ISBN 978-1-890774-78-3。
さらに読む
- バーグステン、ハンス (2003)。 JavaServer Pages (第 3 版)。オライリーメディア。ISBN 978-0-596-00563-4。
- ブラウン、サイモン; ダルトン、サム; ジェップ、ダニエル; ジョンソン、デイブ; リー、シン; レイブル、マット。Pro JSP 2 . Apress . ISBN 1-59059-513-0。
- ハンナ、フィル (2003)。JSP 2.0 - 完全リファレンス。McGraw -Hill Osborne Media。ISBN 978-0-07-222437-5。
- Sierra, Kathy; Bates, Bert; Basham, Bryan. Head First Servlets & JSP. O'Reilly Media . ISBN 978-0-596-00540-5。
外部リンク
- 公式サイト
- JSP v2.0 構文リファレンス
- JavaServer Pages v2.0 構文カード (v1.2)
- Jakarta Server Pages 仕様、最新
- 公式チュートリアル: Java EE 5 チュートリアル、第 5 章、JavaServer Pages テクノロジー
- サーブレットの歴史
