プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

JSPの構成要素

■JSP構成要素の解説

 

①スクリプトレット

【基本構文】
<% Javaのコード %>
 
【ポイント】
・1つのJSPファイル内に記述可能
・スクリプトレットを記述した箇所以降であれば、同JSPファイル内の別スクリプトレットでも使用可能
 
【使用例】


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<!-- スクリプトレットで変数iを1で初期化 -->
	<% int i = 1; %>

	<!-- スクリプトレットでif文を記述 -->
	<% if (i > 0) { %>
		0より大きい
	<% }else { %>
		0以下
	<% }%>
</body>
</html>

 
 


②スクリプト式

【基本構文】
<% Javaのコード %>
 
【ポイント】
・変数やメソッドの戻り値を出力
・Javaのコードに「;」(セミコロン)は不要
 
【使用例】


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<!-- スクリプトレットで変数iを1で初期化 -->
	<% int i = 0; %>

	<!-- スクリプトレットで変数iを1増やす -->
	<% i += 1; %>

	<!-- スクリプト式で変数iの結果を出力 -->
	<%= i %>
</body>
</html>

 
 


③スクリプト宣言

【基本構文】
<%! 宣言文 %>
 
【ポイント】
・変数の値はサーバー再起動するまで保持される
 
【使用例】 ※ブラウザを更新する度に値が1ずつ増える


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<!-- スクリプト宣言  -->
	<%! int i = 0; %>

	<!-- スクリプトレット -->
	<% i += 1; %>

	<!-- スクリプト式 -->
	<%=i %>
</body>
</html>

 
 


④pageディレクティブ

【基本構文】
<%@ page 属性名="値" %>
 
【ポイント】
・「contentType」属性でレスポンスのContent-Typeヘッダを指定可能
・「import」属性でJavaクラスやインターフェースのインポートが可能
 
【使用例】 ※「contentType」属性


<!-- 「contentType」属性でレスポンスのContent-Typeヘッダを指定 -->
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>

</body>
</html>

 
 
【使用例】 ※「import」属性
Javaクラス(sample.Model.java)をインポートし、そのインスタンスをJSPで利用


package sample;

public class Model {
	private String name;
	private int age;

	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
}

 
JSPファイル


<%@ page contentType="text/html; charset=UTF-8" %>
<!-- 「import」属性で「sample.Model」クラスをインポート -->
<%@ page import="sample.Model" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<%!-- スクリプトレット >
	<%
		Model model = new Model();
		model.setName("田中");
		model.setAge(25);
	%>

	<%!-- スクリプト式 >
	<p>名前:<%= model.getName() %></p>
	<p>年齢:<%= model.getAge() %></p>

</body>
</html>

 
 


⑤includeディレクティブ

【基本構文】
<%@ include file="インクルード先" %>
 
【ポイント】
・JSPファイル実行中に別のJSPファイルを呼び出すことが可能
・サーブレットクラスはインクルード不可 ※後述するアクションタグなら使用可能
・インクルード先の指定方法は「WebContent」より後のパスを指定する
 
【使用例】
ヘッダーに設定するJSPファイル(header.jsp)


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
	<h1>ヘッダー</h1>
</body>
</html>

 
ヘッダーをインクルードするJSPファイル(main.jsp)


<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<!-- ここにheader.jspをインクルード  -->
	<%@ include file="/header.jsp" %>
	<h1>メインページ</h1>
</body>
</html>

 
 


⑥標準アクションタグ(include)

【基本構文】
<jsp:include page=”/インクルード先” />
※インクルード先のパスはフォワードと同じ
⇒フォワードに関してはこちら→Java サーブレット(基礎編② サーブレットクラスからJSPファイル呼び出し)
 
【使用例】
・ヘッダーとなるJSPファイル:headr.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>ヘッダー</h1>
</body>
</html>

 
・ヘッダーをインクルードするJSPファイル:main.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- アクションタグ(インクルードタグ)でheader.jspをインクルード -->
	<jsp:include page="/header.jsp" />

	<h1>メインページ</h1>
</body>
</html>

 
 


⑦EL式

【基本構文】
${属性名.プロパティ}
 
【使用例】
・JavaBeansクラス:Model.java


package model;

import java.io.Serializable;

public class Model implements Serializable {
	private String name;
	private int age;

	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
}

 
・サーブレットクラス:Model.java


package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Model;

/**
 * Servlet implementation class mainController
 */
@WebServlet("/mainController")
public class MainController extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public MainController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Model model = new Model();
		model.setName("田中");
		model.setAge(25);
		request.setAttribute("model", model);

		RequestDispatcher rd = request.getRequestDispatcher("/main.jsp");
		rd.forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

 
・JSPファイル:main.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<h1>メインページ</h1>

	${model.name}
	${model.age}
	
</body>
</html>

 
 
 
 


⑧カスタムタグ(JSTL)

【事前準備】
下記2つのJARファイルをダウンロード(Files欄のjar)し、Eclipseにインストールする
①jstl-api-1.2.jar
リンク先
 
②jstl-impl-1.2.jar
リンク先
 
③JARファイルをWEB-INF配下のlibディレクトリ直下に配置

 
【基本構文】
<%@ taglib prefix=”接頭辞” uri=”使用するタグライブラリのURI” %>
 
【ポイント】
・JSTLは下記5つのタグライブラリで構成されている
  ⅰ.Core:変数、条件分岐、ループ処理等の基本的な処理に関するタグ
  ⇒<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
 
  ⅱ.I18N:数値や日付のフォーマット、国際化対応に関するタグ
  ⇒<%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt” %>
 
  ⅲ.Database:データベース操作に関するタグ
  ⇒<%@ taglib prefix=”sql” uri=”http://java.sun.com/jsp/jstl/sql” %>
 
  ⅳ.XML:XML操作に関するタグ
  ⇒<%@ taglib prefix=”x” uri=”http://java.sun.com/jsp/jstl/xml” %>
 
  ⅴ.Functions:コレクションや文字列を操作する関数
  ⇒<%@ taglib prefix=”fn” uri=”http://java.sun.com/jsp/jstl/functions” %>
 
【使用例】 ※Coreタグ
・JavaBeansクラス:Model.java


package model;

import java.io.Serializable;

public class Model implements Serializable {
	private String name;
	private int age;

	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
}

 
・サーブレットクラス:Model.java


package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Model;

/**
 * Servlet implementation class mainController
 */
@WebServlet("/mainController")
public class MainController extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public MainController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Model model = new Model();
		model.setName("田中");
		model.setAge(25);
		request.setAttribute("model", model);

		RequestDispatcher rd = request.getRequestDispatcher("/main.jsp");
		rd.forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

 
・JSPファイル:main.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPの構成要素</title>
</head>
<body>
	<h1>メインページ</h1>
	<!-- <c:out>タグ -->
	<p><c:out value="${model.name}" /></p>

	<!-- <c:if>タグ -->
	<c:if test="${model.age>= 20}">
		<p>20歳以上です</p>
	</c:if>

	<!-- <c:choose>タグ -->
	<c:choose>
		<c:when test="${model.age>= 30}">
			<p>30以上</p>
		</c:when>
		<c:when test="${model.age>=26}">
			<p>26以上</p>
		</c:when>
		<c:otherwise>
			<p>それ以外</p>
		</c:otherwise>
	</c:choose>
</body>
</html>