9月4日

コントローラの実装

作成したDAOを経由してMyDataを利用するコントローラを作成する。

新規でコントローラクラスを作成する。
クラス名: MyDataController

MyDataController.java

package jp.abc;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MyDataController {

	@RequestMapping(value = "/mydata", method = RequestMethod.GET)
	public String mydata(Model model) {
		return "mydata";
	}
}

新規にJSPファイルを作成する。
src/main/webapp/WEB-INF/view/mydata.jsp

最初は動作確認のために、シンプルなJSPを作成する。

mydata.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MyData</title>
</head>
<body>
	<h1>${title}</h1>
	<p>${message}</p>
</body>
</html>

次に、サーバーから受け取ったデータを表示できるようにJSPを変更する。

mydata.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MyData</title>
</head>
<body>
	<h1>${title}</h1>
	<p>${message}</p>
	<table>
	<form:form modelAttribute="myData">
		<form:errors path="*" />
		<form:hidden path="id"/>
		<tr>
			<td><form:label path="name">名前</form:label></td>
			<td><form:input path="name" size="20" /></td>
		</tr>
		<tr>
			<td><form:label path="age">年齢</form:label></td>
			<td><form:input path="age" size="20" /></td>
		</tr>
		<tr>
			<td><form:label path="mail">メール</form:label></td>
			<td><form:input path="mail" size="20" /></td>
		</tr>
		<tr>
			<td><form:label path="memo">メモ</form:label>
			<td><form:textarea path="memo" cols="20" rows="5" /></td>
		</tr>
		<tr><td></td><td><input type="submit"></td></tr>
	</form:form>
	</table>
	<hr />
	<c:if test="${datalist != null}">
		<table border="1">
			<tr><th>ID</th><th>名前</th></tr>
			<c:forEach var="obj" items="${datalist}" varStatus="status">
				<tr>
					<td>${obj.id}</td>
					<td>${obj.name}</td>
				</tr>
			</c:forEach>
		</table>
	</c:if>
</body>
</html>

この状態で http://localhost:8080/MyData/mydata/ にアクセスするとJSPが必要としているデータが設定されていないためにエラーになる。
JSP側でアクセスしようとしているデータを、MyDataController で設定する。

MyDataController.java

package jp.abc;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MyDataController {

	@RequestMapping(value = "/mydata", method = RequestMethod.GET)
	public String mydata(Model model) {
		model.addAttribute("title", "MyData");
		model.addAttribute("message", "データを入力してください");
		MyData mydata = new MyData();
		model.addAttribute("myData", mydata);
		return "mydata";
	}
}

MyDataControllerで必要なデータを設定すれば、画面を表示できるようになる。

バリデーションを有効にするために、pom.xml に dependency を追加する。

pom.xml

		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.1.0.Final</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.0.1.Final</version>
		</dependency>

今の設定ではTomcatを再起動するとデータベースのテーブルが初期化されるので、設定を変更してデータベースサーバーに保存できるようにする。

Eclipseマーケットプレイスで「HSQLDB」を検索し、「HSQLDB Database Server」をインストールする。
インストール後にEclipseが再起動したら、[ウィンドウ]-[ビューの表示]-[その他]を選択。
「HSQLDB Server」を選択して「OK」すると、下のタブに「HSQLDB Server」が追加される。

以下、設定の変更。

persistence.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  version="2.0"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
      <property name="hibernate.hbm2ddl.auto" value="update" />
      <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver" />
      <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:hsql://localhost/mydatabase" />
    </properties>
  </persistence-unit>
</persistence>

database.properties

database.driverClassName=org.hsqldb.jdbc.JDBCDriver
database.url=jdbc:hsqldb:hsql://localhost/mydatabase
database.username=sa
database.password=

データベースサーバーに接続できるようになったので、コントローラにコードを追加する。

MyDataController.java

package jp.abc;

import java.util.List;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MyDataController {

	@RequestMapping(value = "/mydata", method = RequestMethod.GET)
	public String mydata(Model model) {
		model.addAttribute("title", "MyData");
		model.addAttribute("message", "データを入力してください");
		MyData mydata = new MyData();
		model.addAttribute("myData", mydata);
		MyDataDao<MyData> dao = new MyDataDaoImpl();
		List<MyData> list = dao.getAll();
		model.addAttribute("datalist", list);
		return "mydata";
	}

	@RequestMapping(value = "/mydata", method = RequestMethod.POST)
	public String form(@Valid @ModelAttribute MyData mydata, Errors errors, Model model) {
		if (errors.hasErrors()) {
			model.addAttribute("title", "MyData - エラー");
			model.addAttribute("message", "値をチェックしてください");
			return "mydata";
		}
		MyDataDao<MyData> dao = new MyDataDaoImpl();
		dao.add(mydata);
		return "redirect:/mydata";
	}
}

7月10日

バリデーションの利用

バリデーション用に新しいプロジェクトを作成する。

プロジェクトの作成と初期設定

プロジェクト名: Memo
テンプレート: Simple Spring Web Maven

プロジェクトを作成したら、以下を実行。

  1. [Maven]-[プロジェクトの更新]
  2. [実行]-[maven install]

文字化け対策のために、web.xml を編集。
最後の <web-app> タグの手前に以下の内容を追加。
src/main/webapp/WEB-INF/web.xml

	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

使用するパッケージ名を mvc-config.xml に設定。
src/main/webapp/WEB-INF/mvc-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="jp.abc"/>


    <mvc:annotation-driven />

	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	        <!-- Example: a logical view name of 'showMessage' is mapped to '/WEB-INF/jsp/showMessage.jsp' -->
	        <property name="prefix" value="/WEB-INF/view/"/>
	        <property name="suffix" value=".jsp"/>
	</bean>

</beans>

サーバータブの Tomcat7 サーバーに Memo プロジェクトを追加して Tomcat7 サーバーを再起動。
http://localhost:8080/Memo/ にアクセスすれば、click to enter が表示される。

FormModelの作成

javaリソースの src/java/main を右クリックし、クラスを新規作成する。
パッケージ名: jp.abc
クラス名; FormModel

FormModel.java

package jp.abc;

import java.util.Date;

public class FormModel {
	private String item;
	private Integer price;
	private Date buydate;
	private String memo;
	public String getItem() {
		return item;
	}
	public void setItem(String item) {
		this.item = item;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
	public Date getBuydate() {
		return buydate;
	}
	public void setBuydate(Date buydate) {
		this.buydate = buydate;
	}
	public String getMemo() {
		return memo;
	}
	public void setMemo(String memo) {
		this.memo = memo;
	}
}

ビューテンプレートの変更

showMessage.jsp を以下のように変更する。

<!DOCTYPE html>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
	<head>
		<meta charset="utf-8">
		<title>${title}</title>
		<style type="text/css">
		h1 { font-size: 16pt;background-color: #ccccff;padding:3px; }
		p { color: #000066; }
		</style>
	</head>
	<body>
		<h1>${title}</h1>
		<p>${message}</p>
		<table>
		<form:form modelAttribute="formModel">
			<tr>
				<td><form:label path="item">商品名</form:label></td>
				<td><form:input path="item" size="20" /></td>
			</tr>
			<tr>
				<td><form:label path="price">金額</form:label></td>
				<td><form:input path="price" size="20" /></td>
			</tr>
			<tr>
				<td><form:label path="memo">メモ</form:label></td>
				<td><form:textarea path="memo" cols="20" rows="5" /></td>
			</tr>
			<tr><td><input type="submit"></td></tr>
		</form:form>
		</table>
		<hr />
		<c:if test="${datalist != null}" >
		<table border="1">
			<tr><th>商品名</th><th>価格</th></tr>
			<c:forEach var="obj" items="${datalist}" varStatus="status">
				<tr>
					<td>${obj.item}</td>
					<td>${obj.price}</td>
				</tr>
			</c:forEach>
		</table>
		</c:if>
	</body>
</html>

コントローラを作成する

買い物メモのコントローラを作成する。
テキストでは MyAppController を再利用しているが、ここでは新しく MemoController を作成する。
※開発する際に、名前は重要!

Javaリソースの src/java/main の下にある jp.abc パッケージを右クリックして [新規]-[クラス] を選択。

名前: MemoController

まずは、GET メソッドに対応する部分だけ入力する。

MemoController.java

package jp.abc;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MemoController {
	private List<FormModel> buylist = new ArrayList<FormModel>();

	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public String list(Model model) {
		model.addAttribute("title", "Sample");
		model.addAttribute("message", "買い物メモです。");
		FormModel fm = new FormModel();
		model.addAttribute("formModel", fm);
		model.addAttribute("datalist", buylist);
		return "showMessage";
	}
}

http://localhost:8080/Memo/list にアクセスする。
買い物メモの画面が表示されればOK。

次に POST メソッドに対応する部分を実装する。

MemoController.java

	@RequestMapping(value = "/list", method = RequestMethod.POST)
	public String form(@ModelAttribute FormModel formModel, BindingResult result, Model model) {
		buylist.add(formModel);
		model.addAttribute("title", "Sample");
		String res = "<ol>";
		res += "<li>" + formModel.getItem() + "</li>";
		res += "<li>" + formModel.getPrice() + "</li>";
		res += "<li>" + formModel.getMemo() + "</li>";
		res += "<li>" + Calendar.getInstance().getTime() + "</li>";
		res += "</ol>";
		res += "<p>" + buylist.size() + "</p>";
		model.addAttribute("message", res);
		model.addAttribute("datalist", buylist);
		model.addAttribute("formModel", new FormModel());
		return "showMessage";
	}

バリデーション用ライブラリをロードする

パッケージエクスプローラで、Memoプロジェクトの一番下にあるファイル pom.xml を開く。
エディタの下にある「pom.xml」タブを選択する。
ファイルの最後の <dependencies> の手前に以下の内容を追加する。

pom.xml

		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.1.0.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.0.1.Final</version>
		</dependency>
	</dependencies>
</project>

保存すると、自動的にプロジェクトがビルドされ、ライブラリをダウンロードしてくれる。

JSPの変更

showMessage.jsp にエラーメッセージを表示するためのタグを追加する。

showMessage.jsp

		<form:form modelAttribute="formModel">
			<tr><td></td><td><form:errors path="*" element="div" /></td></tr>
			<tr>
				<td><form:label path="item">商品名</form:label></td>
				<td><form:input path="item" size="20" /></td>
			</tr>

コントローラの変更

GETメソッドはバリデーションは関係なので、POSTメソッドを処理するメソッドを変更する。

まず、バリデーションの対象となる最初の引数 FormModel に @Valid アノテーションを追加する。

MemoController.java

	@RequestMapping(value = "/list", method = RequestMethod.POST)
	public String form(@Valid @ModelAttribute FormModel formModel, BindingResult result, Model model) {

エラーがあったときには、異なるタイトルとメッセージを表示するように変更する。
判断は、BindingResult#hasErrors()メソッドを使用する。
MemoController.java

	@RequestMapping(value = "/list", method = RequestMethod.POST)
	public String form(@Valid @ModelAttribute FormModel formModel, BindingResult result, Model model) {
		if (result.hasErrors()) {
			model.addAttribute("title", "Sample [ERROR]");
			model.addAttribute("message", "値を再チェックしてください");
		} else {
			buylist.add(formModel);
			model.addAttribute("title", "送信内容");
			String res = "<ol>";
			res += "<li>" + formModel.getItem() + "</li>";
			res += "<li>" + formModel.getPrice() + "</li>";
			res += "<li>" + formModel.getMemo() + "</li>";
			res += "<li>" + Calendar.getInstance().getTime() + "</li>";
			res += "</ol>";
			res += "<p>" + buylist.size() + "</p>";
			model.addAttribute("message", res);
			model.addAttribute("formModel", new FormModel());
		}
		model.addAttribute("datalist", buylist);
		return "showMessage";
	}

エラーメッセージのカスタマイズ

エラーメッセージを変更するには、アノテーションに message 引数を追加するのが簡単。

FormModel.java

public class FormModel {
	@NotEmpty(message="商品名は必須です。")
	private String item;
	@Min(value=0, message="{value}以上の値が必要です。")
	private Integer price;
	private Date buydate;
	private String memo;

個別にメッセージを表示する

現状では1箇所にまとめてエラーメッセージを表示しているが、これを入力フィールド毎に変更できる。
<form:errors> タグの path 属性の * を、それぞれの変数名で指定すればよい。

showMessage.jsp

		<form:form modelAttribute="formModel">
			<tr>
				<td><form:label path="item">商品名</form:label></td>
				<td><form:input path="item" size="20" />
				<form:errors path="item" cssStyle="color:red" /></td>
			</tr>
			<tr>
				<td><form:label path="price">金額</form:label></td>
				<td><form:input path="price" size="20" />
				<form:errors path="price" cssStyle="color:red" /></td>
			</tr>
			<tr>
				<td><form:label path="memo">メモ</form:label></td>
				<td><form:textarea path="memo" cols="20" rows="5" />
				<form:errors path="memo" cssStyle="color:red" /></td>
			</tr>
			<tr><td><input type="submit"></td></tr>
		</form:form>

6月22日

JSPの暗黙オブジェクト

参考サイトを参照。
暗黙オブジェクト

index.jsp に暗黙オブジェクト request から取得できるデータを表示してみる。

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World!</title>
</head>
<body>

<h1>Hello World!</h1>
<p>
日本語の表示を確認
</p>

<h3>式</h3>
<%=1+1 %>
<br />
<%=new java.util.Date() %>
<!-- HTMLコメント -->
<%-- JSPコメント --%>

<h3>JSP宣言</h3>
<%! int count = 10; %>
<%=count %>

<h3>スクリプトレット</h3>
<%
	out.print("scriptlet<br />");
%>

<h3>requestの情報</h3>
authType=<%=request.getAuthType() %><br />
characterEncoding=<%=request.getCharacterEncoding() %><br />
contentLength=<%=request.getContentLength() %><br />
contentType=<%=request.getContentType() %><br />
contextPath=<%=request.getContextPath() %><br />
localAddr=<%=request.getLocalAddr() %><br />
localName=<%=request.getLocalName() %><br />
localPort=<%=request.getLocalPort() %><br />
method=<%=request.getMethod() %><br />
pathInfo=<%=request.getPathInfo() %><br />
pathTranslated=<%=request.getPathTranslated() %><br />
protocol=<%=request.getProtocol() %><br />
queryString=<%=request.getQueryString() %><br />
remoteAddr=<%=request.getRemoteAddr() %><br />
remoteHost=<%=request.getRemoteHost() %><br />
remotePort=<%=request.getRemotePort() %><br />
remoteUser=<%=request.getRemoteUser() %><br />
requestedSessionId=<%=request.getRequestedSessionId() %><br />
requestURI=<%=request.getRequestURI() %><br />
scheme=<%=request.getScheme() %><br />
serverName=<%=request.getServerName() %><br />
serverPort=<%=request.getServerPort() %><br />
servletPath=<%=request.getServletPath() %><br />

</body>
</html>

パラメータ

URL にパラメータを追加すれば、request.getParameter() で値を取得できる。

index.jsp

<h3>パラメータ</h3>
a=<%=request.getParameter("a") %><br />
b=<%=request.getParameter("b") %><br />
c=<%=request.getParameter("c") %><br />

EL式

EL式は、${式} の書式で記述できる。

index.jsp

<h3>EL式</h3>
${100 * 100}<br />
<% request.setAttribute("test", new java.util.Date()); %>
${test}<br />

JSTL

2つのJARファイルを以下の場所からコピーして、WEB-INF/lib の下に貼り付ける。
\\kgakusei1\share\澤田\jstl\lib

c:setタグ

c:set タグで、値を設定できる。
実際には、暗黙オブジェクト request に対して、setAttribute() メソッドを呼んでいる。

jstl.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL</title>
</head>
<body>

<h1>JSTL</h1>

<c:set var="data" value="てすと!" />
${data}<br />

</body>
</html>

c:ifタグ

c:if タグで、単一の条件分岐を記述できる。

jstl.jsp

<c:set var="count" value="10" />
<c:if test="${count >= 10}" >
  count=${count}
</c:if>
<c:if test="${count >= 11}" >
  count=${count}
</c:if>

c:chooseタグ

c:choose タグで複数の条件分岐を記述できる。

jstl.jsp

<c:set var="age" value="9" />
<c:choose>
  <c:when test="${age >= 30}">30代以上</c:when>
  <c:when test="${age >= 20}">20代</c:when>
  <c:when test="${age >= 10}">10代</c:when>
  <c:otherwise>10歳以下</c:otherwise>
</c:choose>

c:forEachタグ

c:forEach タグでループを記述できる。
items属性にループの対象となる配列またはコレクションを指定し、var属性に取得した要素を格納する変数名を指定する。

jstl.jsp

<h3>c:forEach</h3>
<%
	List<String> list = new ArrayList<String>();
	list.add("Wii U");
	list.add("PS Vita");
	list.add("Nintendo 3DS");
	request.setAttribute("list",list);
%>

<c:forEach var="s" items="${list}">
  ${s}<br />
</c:forEach>

fmt:formatDateタグ

fmt:formatDateタグで書式を指定して日時を出力できる。

jstl.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>



<h3>fmt:formatDate</h3>
<%
	request.setAttribute("date", new Date());
%>
<fmt:formatDate value="${date}" pattern="yyyy年MM月dd日(E) a KK時mm分ss秒" /><br>

6月19日

Webアプリケーション

Webアプリケーションを作る前に、Webアプリケーションとはどういうものかを考えてみる。

WebApp

昨年の設定

プロジェクトを作成する

Eclipseで[新規]-[プロジェクト]を選択
Webの下にある[動的Webプロジェクト]を選択
プロジェクト名: jsp
ターゲットランタイム: Apache Tomcat v7.0
「次へ」→「次へ」→「完了」でプロジェクトを作成する

Eclipseの設定

[ウィンドウ]>[設定]>[Web]>[JSPファイル]を選択
エンコードを「UTF-8」に設定
[ウィンドウ]>[設定]>[Tomcat]を選択
Tomcatバージョンは「バージョン7.x」を選択
Tomcatホームは「C:\All-in-One-Eclipse4.3\tomcat\7」を選択
「OK」をクリック

jspプロジェクトを右クリック
[Tomcatプロジェクト]-[コンテキスト定義を更新]を選択

JSPファイルを作成

パッケージエクスプローラでWebContentを右クリック
[新規]-[JSPファイル]を選択
ファイル名を index.jsp に設定

index.jsp を右クリックして、[実行]-[サーバーで実行]を選択。
ブラウザタブが開いて、index.jsp の内容が表示される。

index.jspの編集

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World!</title>
</head>
<body>

<h1>Hello World!</h1>
<p>
日本語の表示を確認
</p>

<h3>式</h3>
<%=1+1 %>
<br />
<%=new java.util.Date() %>
<!-- HTMLコメント -->
<%-- JSPコメント --%>

<h3>JSP宣言</h3>
<%! int count = 10; %>
<%=count %>

<h3>スクリプトレット</h3>
<% %>

</body>
</html>