【slim3】JSPの開発手順および注意事項
前回まで、slim3 の画面遷移制御用コンポーネントである
”Controller”について触れてきました。
今回は、この Controller から呼び出される/を呼び出す JSP の開発手順、およびその際の注意事項について見ていきます。
1.あらかじめ用意されているもの
slim3-blank をインストールする際、あらかじめ以下のものが用意されています。
これらをベースに、自動生成した JSP(後述)に修正を加えていく形で、JSP を開発していくことになります。
なお、slim3-blank のインストール時に用意されているファイルについては、slim3のプロジェクト構成をご覧下さい。
2.自動生成されるJSPの概要
個別の JSP は、gen-controller で、Controller クラスらと一緒に Ant で自動生成されます。
自動生成される JSP のポイントは、以下の5点です。
- 文字コードは UTF-8。
- war/css/global.css を参照するようになっている。
- header・menu・footer は include していない。
- JSTL の各タグを使用できる。
- slim3 専用の function タグを使用できる。
- 機能は、SAStruts のものとほぼ同等。
なお、gen-controller での JSP ファイル名およびパスのルールについては、こちらの「2.URL の指定方法」をご覧下さい。
【参考】自動生成されたJSP
★で注記した箇所以外は、全て同じ内容で生成されます。
<%@page pageEncoding="UTF-8" isELIgnored="false"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@taglib prefix="f" uri="http://www.slim3.org/functions"%>order Order ←★URL をタイトルにしているHello order Order !!!
↑★Hello [URL で指定したもの]になっている
3.JSPからControllerを呼び出す手順
(1)リンクで呼び出す場合
<a> タグで、gen-controller で指定したものと同じパスを指定すればOKです。
<a href="${f:h('/order/')}">注文</a>
ちなみに f:h() は、引数の文字列を HTML エスケープ(サニタイズ)してくれます。
※クロスサイトスクリプティングを防止してくれる、という意味です。
(2)formで呼び出す場合
<form> タグで、action 属性に gen-controller で指定したものと同じパスを指定すればOKです。
(a)入力値の設定方法
(例)テキストフィールドの場合。
<input type="text" ${f:text("name")} />
f:text() で、テキストフィールドと HttpServletRequest 設定時のパラメータ名とを関連付けます。
(b)ボタンの設定方法
<input type="submit" value="登録" name="registerButton" />
複数のボタンを用意し、どれが押下されたかを判定したい場合は、ボタンに name を設定し、Controller 内で HttpServletRequest#getAttribute() を呼び出し、その name の値が取得できるか否かで判定できます。
4.注意事項
JSP の開発・使用に際しては、以下の点に注意が必要です。
(1)JSPのURL直接指定は不可
ブラウザで、JSP の URL を直接指定することはできません。
HTTP ERROR:403(アクセス禁止)になります。
- メッセージから推察するに、slim3 というよりは GAE/J の仕様のようです。
- ちなみに HTML は、WEB-INF 下でなければ直接参照が可能です。
よく JavaEE での開発では、直接参照されるのを避けるために、JSP を WEB-INF 下に配置したりします。
ですが、GAE/J・slim3 ではそもそも JSP を直接参照できないので、特に WEB-INF 下に配置・移動する必要性はないようです。
(2)web.xmlでjsp-configを使用できない
taglib や JavaScript の参照など、JSP 共通の定義を行えるようにするため、JavaEE では web.xml に jsp-config を設定できるようになっています。
ですが GAE/J では jsp-config の設定が認識されません。
ですので、taglib や JavaScript の参照などは、JSP に1つ1つ設定していく必要があります。
詳しくは、以下のリンクをご覧下さい。
5.JSPのhot deploy
slim3 では、JSP も hot deploy してくれます。
(1)Eclipse の同期化をさせなくても、Windows の explorer レベルでの変更を反映してくれます。
(2)JSP の文字コードの変更も反映してくれます。
6.【参考】JSPの実装例
header・menu・footer を使用する JSP の実装例を、以下に示します。
<%@ page pageEncoding="UTF-8" isELIgnored="false" %> <%@ taglib uri="http://www.slim3.org/functions" prefix="f" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>注文登録</title> <link rel="stylesheet" type="text/css" href="/css/global.css" /> </head> <body> <%-- ◆header --%> <jsp:include page="header.jsp"> <jsp:param name="title" value="注文登録" /> </jsp:include> <%-- ◆menu --%> <jsp:include page="menu.jsp" /> <%-- ◆メインのコンテンツ --%> <div id="body"> <form action="/order/orderConfirm" method="POST"> <table border="1" align="center"> <tr> <th>商品名</th> <td><input type="text" ${f:text("name")} /></td> </tr> <tr> <th>数量</th> <td><input type="text" ${f:text("amount")} /></td> </tr> </table> <br /> <table border="0" align="center"> <tr> <td><input type="submit" value="登録" /></td> <td> </td> <td><input type="reset" value="クリア" /></td> </tr> </table> </form> </div> <%-- ◆footer --%> <jsp:include page="footer.jsp" /> </body> </html>