JSP 構文
このセクションでは、JSP 開発における基本的な構文を簡単に紹介します。
スクリプト
スクリプトには、スクリプト言語で有効である限り、任意の数の Java ステートメント、変数、メソッド、または式を含めることができます。
スクリプト プログラムの構文形式:
<% 代码片段 %>
または、次のような同等の XML ステートメントを記述することもできます:
<jsp:scriptlet> 代码片段 </jsp:scriptlet>
テキスト、HTML タグ、および JSP 要素は、スクリプト プログラムの外部に記述する必要があります。
以下に例を示します。これは、このチュートリアルの最初の JSP 例でもあります:
<html> <head><title>Hello World</title></head> <body> Hello World!<br/> <% out.println("Your IP address is " + request.getRemoteAddr()); %> </body> </html>
注: Apache Tomcat が C:apache-tomcat-7.0.2 ディレクトリにインストールされていて、実行中であることを確認してください。環境は正しく設定されています。
上記のコードを hello.jsp に保存し、C:apache-tomcat-7.0.2webappsROOT ディレクトリに配置し、ブラウザを開いてアドレス バーに http://localhost:8080/hello.jsp と入力します。実行後、次の結果が得られます:
中国語のエンコードの問題
ページに中国語を通常どおり表示したい場合は、JSP ファイルの先頭に次のコードを追加する必要があります: <>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
解析後、
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> Hello World!<br/> <% out.println("你的 IP 地址 " + request.getRemoteAddr()); %> </body> </html>
のプログラムを修正して中国語が正常に表示されるようにします。
JSP 宣言
宣言ステートメントでは、後続の Java コードで使用する 1 つ以上の変数とメソッドを宣言できます。 JSP ファイルでは、これらの変数とメソッドを使用する前に宣言する必要があります。
JSP 宣言の構文形式:
<%! declaration; [ declaration; ]+ ... %>
あるいは、次のような同等の XML ステートメントを記述することもできます:
<jsp:declaration> 代码片段 </jsp:declaration>
プログラム例:
<%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %>
JSP 式
JSP 式に含まれるスクリプト言語式は、まず String に変換され、式が出現する場所に挿入されます。
式の値は文字列に変換されるため、HTMLタグかどうかに関係なく、テキスト行で式を使用できます。
expression 要素には、Java 言語仕様に準拠する任意の式を含めることができますが、式の終了にセミコロンを使用することはできません。
JSP 式の構文形式:
<%= 表达式 %>
同様に、同等の XML ステートメントを記述することもできます:
<jsp:expression> 表达式 </jsp:expression>
プログラム例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p> 今天的日期是: <%= (new java.util.Date()).toLocaleString()%> </p> </body> </html>
実行後、次の結果が得られます:
今天的日期是: 2016-6-25 13:40:07
JSP コメント
JSP コメントには、コードへのコメントとコードの特定のセクションのコメント アウトという 2 つの主な機能があります。
JSP コメントの構文形式:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <%-- 该部分注释在网页中不会被显示--%> <p> 今天的日期是: <%= (new java.util.Date()).toLocaleString()%> </p> </body> </html>
実行後に次の結果が得られます:
今天的日期是: 2016-6-25 13:41:26
さまざまな状況でコメントを使用するための構文規則:
文法 | 説明 |
---|---|
<%-- コメント --%> | JSP コメントの場合、コメントの内容はブラウザに送信されず、コンパイルもされません |
<!-- コメント --> | HTMLコメントとは、ブラウザでWebページのソースコードを閲覧する際にコメント内容を確認することができます |
<% | 静的 <% 定数を表します |
%> | 静的な %> 定数を表します |
' | 属性で使用される一重引用符 |
「 | 属性で使用される二重引用符 |
JSP ディレクティブ
JSP ディレクティブは、JSP ページ全体に関連するプロパティを設定するために使用されます。
JSP 命令構文形式:
<%@ directive attribute="value" %>
ここには 3 つの命令タグがあります:
命令 | 説明 |
---|---|
<%@ ページ ... %> | スクリプト言語、エラー ページ、キャッシュ要件など、ページの依存関係属性を定義します。 |
<%@ include ... %> | 他のファイルが含まれています |
<%@ taglib ... %> | カスタムタグとなるタグライブラリの定義を紹介します |
JSP 動作
JSP 動作タグは、XML 構文構造を使用してサーブレット エンジンを制御します。ファイルを動的に挿入したり、JavaBean コンポーネントを再利用したり、ユーザーを別のページに誘導したり、Java プラグインに関連する HTML を生成したりできます。
動作タグの構文形式は 1 つだけであり、XML 標準に厳密に準拠しています。
<jsp:action_name attribute="value" />
動作タグは基本的にいくつかの事前定義された関数です。 次の表に、使用可能な JSP 動作タグの一部を示します。
jsp:include | 現在のページに静的または動的リソースを含めるために使用されます | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JavaBean コンポーネントを見つけて初期化します | |||||||||||||||||||||||||||||||||||||||||||||||
JavaBeanコンポーネントの値を設定します | |||||||||||||||||||||||||||||||||||||||||||||||
JavaBean コンポーネントの値を出力に挿入します | |||||||||||||||||||||||||||||||||||||||||||||||
ユーザーのリクエストを含むリクエスト オブジェクトをある JSP ファイルから別の JSP ファイルに渡します | |||||||||||||||||||||||||||||||||||||||||||||||
生成された HTML ページにアプレットと JavaBean オブジェクトを含めるために使用されます | |||||||||||||||||||||||||||||||||||||||||||||||
XML 要素を動的に作成します | |||||||||||||||||||||||||||||||||||||||||||||||
動的に作成された XML 要素の属性を定義する | |||||||||||||||||||||||||||||||||||||||||||||||
動的に作成される XML 要素の本文を定義します | |||||||||||||||||||||||||||||||||||||||||||||||
テンプレートデータをカプセル化するために使用されます |
レスポンスのインスタンス | HttpServletResponse | class||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
out 結果を Web ページに出力するために使用される | PrintWriter | クラスのインスタンス||||||||||||||||||||||||||||||||||||||||||||||
セッション | HttpSession | クラス||||||||||||||||||||||||||||||||||||||||||||||
のインスタンス アプリケーションコンテキスト | に関連する application | ||||||||||||||||||||||||||||||||||||||||||||||
クラスのインスタンス | config | ||||||||||||||||||||||||||||||||||||||||||||||
class | のインスタンス pageContext | ||||||||||||||||||||||||||||||||||||||||||||||
クラスのインスタンス。JSP ページ | のすべてのオブジェクトと名前空間へのアクセスを提供します | ||||||||||||||||||||||||||||||||||||||||||||||
ページ | Java クラスの this キーワードに似ています | ||||||||||||||||||||||||||||||||||||||||||||||
Exception | クラスのオブジェクトは、エラーが発生した JSP ページ内の対応する例外オブジェクトを表します | ||||||||||||||||||||||||||||||||||||||||||||||
制御フロー ステートメントJSP は Java 言語を完全にサポートしています。 JSPプログラム内でJava APIを使用でき、判定文やループ文などのJavaコードブロックも作成できます。 判定ステートメントIf…else ブロック、次の例を見てください: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int day = 3; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h3>IF...ELSE 实例</h3> <% if (day == 1 | day == 7) { %> <p>今天是周末</p> <% } else { %> <p>今天不是周末</p> <% } %> </body> </html> 実行後、次の結果が得られます: IF...ELSE 实例 今天不是周末 次に、if…else とは大きく異なる switch…case ブロックを見てみましょう。 out .println() を使用し、次のようにすべてがスクリプト プログラムのタグにインストールされます: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int day = 3; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h3>SWITCH...CASE 实例</h3> <% switch(day) { case 0: out.println("星期天"); break; case 1: out.println("星期一"); break; case 2: out.println("星期二"); break; case 3: out.println("星期三"); break; case 4: out.println("星期四"); break; case 5: out.println("星期五"); break; default: out.println("星期六"); } %> </body> </html> ブラウザ アクセス、実行後、次の結果が得られます: SWITCH...CASE 实例 星期三 ループ ステートメントJava は JSP プログラムで使用できます。for、while、do...while の 3 つの基本的なループ タイプです。 for ループの例を見てみましょう。次の出力は、フォント サイズが異なる「php Chinese website」です: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h3>For 循环实例</h3> <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %> <font color="green" size="<%= fontSize %>"> php中文网 </font><br /> <%}%> </body> </html> 実行後、次の結果が得られます: 上記の例を次のように変更します。 while ループを使用して次のように記述します。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h3>While 循环实例</h3> <%while ( fontSize <= 3){ %> <font color="green" size="<%= fontSize %>"> php中文网 </font><br /> <%fontSize++;%> <%}%> </body> </html>ブラウザでアクセスすると、出力結果は次のようになります (fontSize は 0 に初期化されているため、さらに 1 行出力されます): JSP 演算子 JSP は、すべての Java 論理演算子および算術演算子をサポートします。 次の表は、一般的な JSP 演算子を優先順位の高い順にリストしています:
JSP リテラルJSP 言語は次のリテラルを定義します:
|