English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 文法

このセクションでは、JSP開発における基本的な文法について簡単に紹介します。

スクリプトプログラム

スクリプトプログラムは、スクリプト言語で有効なJava文、変数、メソッド、または式を任意の量含むことができます。

スクリプトプログラムの文法形式:

<% コードスライス %>

または、以下のように等価なXML文を書くこともできます:

<jsp:scriptlet>
   コードスライス
</jsp:scriptlet>

テキスト、HTMLタグ、JSP要素は、スクリプトプログラムの外に書かなければなりません。

以下は、本チュートリアルの最初のJSPサンプルです:

<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
out.println("あなたの IP アドレスは " + request.getRemoteAddr());
%>
</body>
</html>

注意:Apache TomcatがC:\apache-tomcat-7.0.2ディレクトリに配置し、環境が正しく設定されていることを確認してください。

以下のコードをhello.jspに保存し、それをC:\apache-tomcat-7.0.2\webapps\ROOTディレクトリに、ブラウザを開き、アドレスバーに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>基础教程网(oldtoolbag.com)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("あなたの IP アドレス " + request.getRemoteAddr());
%>
</body>
</html>

このようにして中国語が正常に表示されます。

    JSP宣言

一つの宣言文は、一つまたは複数の変数、メソッドを宣言し、それを後のJavaコードで使用することができます。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に変換され、その後、表現が現れる場所に挿入されます。

表現の値はStringに変換されるため、HTMLタグであるかどうかに関係なく、テキスト行に表現を使用することができます。

表現要素には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>基础教程网(oldtoolbag.com)</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>基础教程网(oldtoolbag.com)</title>
</head>
<body>
<%-- この部分のコメントはウェブページでは表示されません。--%> 
<p>
   今日の日付は: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html>

运行后得到以下结果:

今日の日付は: 2016-6-25 13:41:26

コメントの文法規則は以下の通りです:

文法                説明
                <%-- コメント --%>                JSPコメント、コメント内容はブラウザに送信されず、コンパイルもされません。
                <!-- コメント -->                HTMLコメント、ブラウザでページのソースコードを確認するとコメント内容が見られます。
                <\%                静的 <% 常量を表します
                %\>                静的 %> 常量を表します
                \'                属性で使用されるシングルクォート
                \"                属性で使用されるダブルクォート

    JSP指令

JSP指令は、全体のJSPページに関連する属性を設定するために使用されます。

JSP指令の文法形式:

<%@ directive attribute="value" %>

ここには3種類の指令タグがあります:

指令説明
                <%@ page ... %>                ページの依存属性を定義します。例えば、スクリプト言語、エラーページ、キャッシュの要件などです。
                <%@ include ... %>                他のファイルを含めます。
                <%@ taglib ... %>                タグライブラリの定義を導入します。カスタムタグも可能です。

    JSPアクション

JSPアクションタグは、servletエンジンを制御するためにXML構造を使用します。ファイルを動的に挿入したり、JavaBeanコンポーネントを再利用したり、ユーザーを別のページにリダイレクトしたり、Javaプラグインに関連するHTMLを生成したりすることができます。

アクションタグは、XML標準に厳密に従う一種の文法形式を持っています:

<jsp:action_name attribute="value" />

アクションタグは、事前に定義された関数のようなものです。以下の表に、使用可能なJSPアクションタグの一覧を示します:

文法説明
                jsp:include                現在のページに静的または動的なリソースを含めるために使用
                jsp:useBean                JavaBeanコンポーネントを検索し、初期化
                jsp:setProperty                JavaBeanコンポーネントの値を設定
                jsp:getProperty                JavaBeanコンポーネントの値をoutputに挿入
                jsp:forward                ユーザー要求を含むrequestオブジェクトを一つのJSPファイルから別のファイルに伝達
                jsp:plugin                生成されたHTMLページにAppletやJavaBeanオブジェクトを含めるために使用
                jsp:element                動的に作成されるXML要素を一つ作成
                jsp:attribute                動的に作成されるXML要素の属性を定義
                jsp:body                動的に作成されるXML要素の主体を定義
                jsp:text                テンプレートデータをエンキャップするために使用

    JSP隠しオブジェクト

JSPは九つの自動定義の変数をサポートしており、これらの変数は隠しオブジェクトと呼ばれます。以下の表に、これらの隠しオブジェクトの簡単な説明を示します:

オブジェクト説明
                requestHttpServletRequestクラスの例
                responseHttpServletResponseクラスの例
                outPrintWriterクラスの例、結果をウェブページに输出するために使用
                sessionHttpSessionクラスの例
                applicationServletContextクラスの例、アプリケーションコンテキストに関連しています
                configServletConfigクラスの例
                pageContextPageContextクラスの例、JSPページのすべてのオブジェクトおよびネームスペースへのアクセスを提供
                page                Javaクラス内のthisキーワードに似ています
                例外例外 エラーオブジェクトを表すクラスのオブジェクト、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>基础教程(oldtoolbag.com)</title>
</head>
<body>
<h2>IF...ELSE 示例</h2>
<% if (day == 1 | day == 7) { %>
      <p>今天是周末</p>
<% } else { %>
      <p>今天不是周末</p>
<% } %>
</body> 
</html>

运行后得到以下结果:

IF...ELSE 示例
今天不是周末

现在来看看switch…case块,与if…else块有很大的不同,它使用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>基础教程(oldtoolbag.com)</title>
</head>
<body>
<h2>SWITCH...CASE 示例</h2>
<% 
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 示例
星期三

循环语句

在JSP程序中可以使用Java的三个基本循环类型:for,while,和 do…while。

让我们来看看for循环的实例,以下输出的不同字体大小的"基础教程网":

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!int fontSize; %> 
!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基础教程网(oldtoolbag.com)</title>
</head>
<body>
<h2>For 循环示例</h2>
<%for ( fontSize = 1; fontSize <= 3; fontSize++{ %>
   <font color="green" size="<%= fontSize %>">
    基本教程
   </font><br />
<%}%>
</body> 
</html>

运行后得到以下结果:

将上例改用 while 循环来写:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% int fontSize=0; %> 
!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基础教程(oldtoolbag.com)</title>
</head>
<body>
<h2>While ループの例</h2>
<%while ( fontSize <= 3{ %>
   <font color="green" size="<%= fontSize %>">
    基本教程
   </font><br />
<%fontSize++;%>
<%}%>
</body> 
</html>

ブラウザからのアクセス、出力結果は(fontSizeが0に初期化されているため、一行分多く出力されます):

    JSP演算子

JSPはすべてのJavaの論理および算術演算子をサポートしています。

以下の表に、JSPの一般的な演算子とその優先順位を示します:

カテゴリ演算子結合性
                後置                () [] . (点演算子)                左から右
                一元                ++ - - ! ~                右から左
                可乗性                * / %                 左から右
                可加性                + -                 左から右
                シフト                >> >>> <<                  左から右 
                関係                > >= < <=                  左から右
                相等/不等                == !=                 左から右
                ビットと                &                 左から右
                ビット異或                ^                 左から右
                ビット或                |                 左から右
                論理と                &&                 左から右
                論理或                ||                 左から右
                条件判定                ?:                 右から左
                代入                = += -= *= /= %= >>= <<= &= ^= |=                 右から左
                カンマ                 ,                 左から右 

    JSP 文字列リテラル

JSP言語は以下のいくつかの文字列リテラルを定義しています:

  •             ボルン値(boolean):trueおよびfalse;

  •             整数型(int):Javaと同じ;

  •             浮動小数点型(float):Javaと同じ;

  •             文字列(string):シングルクォートまたはダブルクォートで始まり、終わる;

  •             Null:null。