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

アーキテクチャ的には、JSP はJakarta Servletsの高レベルな抽象化と見なすことができます。JSP は実行時にサーブレットに変換されるため、JSP はサーブレットです。各 JSP サーブレットはキャッシュされ、元の JSP が変更されるまで再利用されます。[ 3 ]
Jakarta Server Pages は、単独で使用することも、サーバーサイドのモデル・ビュー・コントローラー設計のビュー コンポーネントとして使用することもできます。通常、モデルとしてJavaBeans 、コントローラーとして Java サーブレット (またはApache Strutsなどのフレームワーク) を使用します。これは、モデル 2アーキテクチャの一種です。[ 4 ]
JSPでは、Javaコードと特定の定義済みアクションを、HTMLなどの静的なWebマークアップコンテンツと交互に配置できます。生成されたページはサーバー上でコンパイルおよび実行され、ドキュメントが配信されます。コンパイルされたページ、およびそれに依存するJavaライブラリには、マシンコードではなくJavaバイトコードが含まれています。他の.jarファイルやJavaプログラムと同様に、コードはJava仮想マシン(JVM)内で実行される必要があり、JVMはサーバーのホストオペレーティングシステムと連携して、抽象的でプラットフォームに依存しない環境を提供します。
JSPは通常、HTMLおよびXMLドキュメントを配信するために使用されますが、OutputStreamを使用することで、他のタイプのデータも配信できます。[ 5 ]
Webコンテナは、リクエスト、レスポンス、セッション、アプリケーション、設定、ページ、ページコンテキスト、出力、例外などのJSP暗黙オブジェクトを作成します。JSPエンジンは、変換フェーズ中にこれらのオブジェクトを作成します。
JSP では、スクリプト関数にいくつかの区切り文字を使用します。最も基本的なものは で、これは JSPスクリプトレットを囲みます。スクリプトレットは、ユーザーがページを要求したときに実行されるJava コード[ 6 ]の断片です。 <% ... %>
その他の一般的な区切り文字には、式の場合、スクリプトレットと区切り文字が式の評価結果に置き換えられ、ディレクティブはで示されます。[ 6 ] [ 7 ] <%= ... %><%@ ... %>
Javaコードは、単一のスクリプトレットブロック内に完全または自己完結している必要はありません。ページ全体の構文が正しければ、マークアップコンテンツをまたいで記述することも可能です。例えば、あるスクリプトレットで開始されたJavaのif/for/whileブロックは、ページが正常にコンパイルされるためには、後のスクリプトレットで正しく閉じられなければなりません。このため、コードが混在することがあり、不適切なプログラミングにつながる可能性があります。
複数のスクリプトレットにまたがるJavaコードの分割ブロック内に含まれるコンテンツは、そのコードに従います。ifブロック内のコンテンツは、if条件が真と評価された場合にのみ出力に表示されます。同様に、ループ構造内のコンテンツは、ループ本体の実行回数に応じて、出力に複数回表示される可能性があります。
JSPページにおける有効なforループの例は以下のとおりです。
<p> 3まで数えます: </p> <% for ( int i = 1 ; i < 4 ; i ++ ) { %> <p>この数字は<%= i %>です。</p> <% } %> <p> OK。</p>ユーザーのウェブブラウザに表示される出力は以下のとおりです。
3まで数える: この数字は1です。 この数字は2です。 この数字は3です。 わかりました。
JSPuseBeanタグを使用すると、開発者はJavaBeanにアクセスして作成できます。[ 8 ] このuseBeanタグの使用はHTMLタグに似ていますが、JavaBean用のすべてのJSPタグはXML構文を使用します。そのため、タグを含むコードはuseBean大文字と小文字を区別します。[ 9 ]
タグuseBeanにはいくつかの属性が含まれています。id属性は、Bean にアクセスするために使用される名前を宣言します。class属性は、Bean のパッケージとクラスを宣言します。は、scopeBean を格納するオブジェクトを宣言します。スコープの値は、Java アプリケーションの残りの部分で Bean が使用できる期間を定義します。スコープは次の 4 つの値のいずれかになります。[ 9 ]
pageは、Beanが暗黙的に定義されたPageContextオブジェクト内にあり、現在のページでのみ使用可能であることを意味します。デフォルトでは、すべてのBeanのスコープは ですpage。requestとは、BeanがHttpServletRequestオブジェクト内に存在することを意味します。このBeanは、現在のリクエストオブジェクトにアクセスできる他のすべてのJSPおよびサーブレットからアクセスできます。session内にBeanが存在することを意味しますHttpSession。このBeanは、指定されたオブジェクトにアクセスできる他のすべてのJSPおよびサーブレットからアクセスできますHttpSession。application内にBeanが存在することを意味しますServletContext 。このBeanは、指定されたオブジェクトにアクセスできる他のすべてのJSPおよびサーブレットからアクセスできますServletContext。タグを使用して 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でも使用されている統一式言語に統合されました。[ 11 ]
JSP式言語は、開発者が指定されたリクエストオブジェクトから属性とJavaBeanプロパティを取得できるコンパクトな構文を使用します。ELを使用する場合、コードの先頭にドル記号("$")を追加する必要があります。ドル記号の後には開き括弧("{"))と閉じ括弧("}")が続きます。コードは開き括弧と閉じ括弧の間に記述します。[ 12 ]
以下はEL構文の例です。
variableオブジェクト内の の値はjavabeanです${javabean.variable}。
JSP構文は、組み込み機能を呼び出すためのJSPアクションと呼ばれる追加のタグを追加します。[ 7 ]さらに、この技術では、標準のJSP構文の拡張機能として機能するカスタムJSPタグライブラリを作成できます。 [ 13 ]そのようなライブラリの1つがJSTLです。[ 14 ]
Jakarta Standard Tag Library (JSTL) は、JSP で実行する必要のある一般的なタスクをサポートしています。[ 15 ]例としては、反復処理や条件分岐 (Java の「for」および「if」文に相当) などがあります。[ 14 ]
JSTL のすべてのライブラリの中で、JSTL コアライブラリが最もよく使用されます。タグライブラリディレクティブを使用して、プレフィックスを使用して JSTL コアライブラリの URI を指定する必要があります。プレフィックスにはさまざまな選択肢がありますが、このライブラリでは「c」プレフィックスがよく使用されます。[ 16 ]
JSP ページは、完全に有効な XML 構文で記述することもできます。[ 17 ]このような JSP ファイルは、通常、代替.jspxファイル拡張子を使用し、アプリケーション サーバーが XML 構文を検証するようになります。
XMLでは通常のJSP構文は無効であるため、開発者はJSPが提供する代替タグを使用する必要があります。例えば、一般的なディレクティブはタグとして記述でき、タグライブラリは通常のタグではなく、XML名前空間を使用してインポートされます。<% ... %><%@ page .. %><jsp:directive.page .. /><%@ taglib .. %>
JavaServer Pagesコンパイラは、JSPを解析して実行可能なJavaサーブレットに変換するプログラムです。この種のプログラムは通常、アプリケーションサーバーに組み込まれ、JSPに初めてアクセスしたときに自動的に実行されますが、パフォーマンス向上のためにページを事前にコンパイルしたり、エラーをテストするためにビルドプロセスの一部としてコンパイルしたりすることもできます。[ 18 ]
一部のJSPコンテナは、ページが変更されたかどうかを確認するためにコンテナがJSPファイルのタイムスタンプをチェックする頻度を設定する機能をサポートしています。通常、このタイムスタンプはソフトウェア開発中は短い間隔(おそらく数秒)に設定され、デプロイされたWebアプリケーションではより長い間隔(おそらく数分、あるいはまったくチェックしない)に設定されます。[ 19 ]
Joel Murach と Michael Urban による書籍「Murach's Java Servlets and JSP」によると、JSP に Java コードを埋め込むのは一般的に悪い習慣です。[ 20 ]より良いアプローチは、JSP に埋め込まれたバックエンド ロジックを Java コードに移行することですServlet。[ 20 ]このシナリオでは、がServlet処理を担当し、JSP は HTML の表示を担当し、[ 20 ]関心の明確な分離を維持します。
2000 年、「Java Servlet Programming」の著者である Jason Hunter は、JavaServer Pages のいくつかの「問題」について説明しました。[ 21 ]それにもかかわらず、彼は JSP は「 Java プラットフォームにとって最良のソリューション」ではないかもしれないが、「非 Java ソリューションに最も近い Java ソリューション」であると書いています。ここで彼が言っているのは、Microsoft のActive Server Pages のことです。その後、彼は自分のサイトに、JSP は 2000 年以降改善されたが、競合であるApache Velocityと Tea (テンプレート言語)も挙げているという注釈を追加しました。 [ 21 ]今日では、いくつかの代替手段と、大規模な Web アプリケーション内の多数の JSP 指向のページが技術的負債とみなされています。