Web アプリケーションの NetBeans IDE チュートリアル
Web アプリケーション構築に関する NetBeans IDE 6.0 および 6.1 のチュートリアルにようこそ。このチュートリアルでは、かなり複雑な Web アプリケーションを構築し、その中で NetBeans IDE の多数のツールと技術の紹介を行います。また、作成から配備までの標準的な Web 開発サイクルも説明します。サーブレットおよび JSP ページの作成を手始めとし、このチュートリアルの詳細セクションに JSTL (JavaServer Pages 標準タグライブラリ) を使用して動的データを取得し、このアプリケーションで JSP ページを国際化する方法を説明します。チュートリアルの最後では、Web アプリケーションの配備時の分析に使用できる IDE の HTTP モニターを紹介します。
注: NetBeans IDE での Web 開発がはじめての場合、このチュートリアルの手順を進める前に『Web アプリケーション開発入門 』を理解することをお勧めします。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
NetBeans IDE
Web および Java EE の version 6.1 または 6.0
Java Developer Kit (JDK)
version 6 または
version 5
JavaServer Faces コンポーネント /
Java EE プラットフォーム
Java EE 5 または J2EE 1.4
GlassFish アプリケーションサーバー
または
Tomcat サーブレットコンテナ
V2
version 6.x
注
用語
次に、このチュートリアルで使用する用語の一部を説明します。
必須ソースファイルの取得
Midnight Cookie Company アプリケーションを作成するには、midnight.zip ファイルが必要です。このファイルにはアプリケーションの構築に使用するソースファイルが格納されています。このソースファイルには WEB-INF フォルダがあり、ここにこのチュートリアルで使用する classes 、docs 、tlds 、および lib の各フォルダが格納されています。
ファイルシステムに、「midnight 」というフォルダを作成します。ここにアプリケーションのファイルを解凍します。以降、このドキュメントでは、このフォルダを $ UNZIPHOME とします。
ここ をクリックすると、ファイルをダウンロードできます。
ファイルを解凍するアプリケーションを使用して、midnight.zip ファイルを $ UNZIPHOME に解凍します。
$ UNZIPHOME に WEB-INF フォルダが作成され、ここには次のファイルおよびフォルダが含まれます。
ファイルまたはフォルダ
説明
web.xml
Web アプリケーションの配備記述子です。
classes
ページの国際化に使用するリソースバンドルプロパティーファイルと、com/midnightcookies/taghandlers フォルダが含まれます。taghandlers フォルダには、ContentHandler タグハンドラ、ButtonHandler タグハンドラ、および LinksHandler タグハンドラのクラスファイルが含まれます。ContentHandler には指定された JSP ファイルのコンテンツが含まれます。ButtonHandler には送信ボタンがローカライズされたメッセージ付きで表示されます。LinksHandler には区切り文字を含むタグ属性からの一連のリンクが表示されます。
docs
header.jsp ファイル、index.jsp ファイル、および nonesuch.jsp ファイルが含まれます。このチュートリアルの中で main.jsp ページを作成し、それをこのフォルダに配置します。また、cookies フォルダも含まれます。ここには CookieCutter.jsp ファイルと CookieMake.jsp ファイルが含まれます。このチュートリアルの中で Tray.jsp ページを作成し、それをこのフォルダに配置します。about フォルダには about.jsp ファイルが含まれます。ここには、この Web アプリケーションのアーキテクチャーの概要が示されます。
lib
standard.jar ファイルと jstl.jar ファイルが含まれます。これらの 2 つのファイルには、JSTL のための実装が含まれます。standard.jar には、TLD とタグハンドラが含まれます。jstl.jar ファイルには、そのほかに必要な API (アプリケーションプログラミングインタフェース) が含まれます。
tlds
商用の midnight.tld が含まれます。
アプリケーションの開発
提供されたソースファイルからの Web プロジェクトの作成
「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。「カテゴリ」で「Web」を選択します。「プロジェクト」の下の「既存のソースを使用する Web プロジェクト」を選択します。「次へ」をクリックします。
「場所」の「参照」をクリックし、Web アプリケーションのドキュメントルートを選択します。ドキュメントルートは $ UNZIPHOME で、前述の手順に従った場合 midnight という名前になります。ここが、midnight.zip ファイルを解凍したフォルダです。
「プロジェクト名」に、midnight と設定されています。単純に表示の目的で、この名前を「Midnight」と大文字にします。これは、プロジェクト名の最初の文字は通常大文字になっているためです。「プロジェクトの場所」をローカルコンピュータ上の任意のフォルダに変更します。以降、このドキュメントでは、このフォルダを $ PROJECTHOME と表記します。
注: NetBeans 6.1 では、プロジェクトを作成するときに新しいオプションが表示されますが、これらのオプションはデフォルトのままでかまいません。たとえば、「ライブラリの格納用に専用フォルダを使用」チェックボックスは選択しないままにします。
NetBeans IDE 6.1 を使用している場合は「次へ」をクリックします。それ以外の場合は手順 5 に進みます。
アプリケーションを配備するサーバーを選択します。IDE に登録されているサーバーのみ表示されます。
「Java EE バージョン」は必ず「Java EE 5」を選択してください。「コンテキストパス」が /Midnight になっていることを確認します。「次へ」をクリックします。
「Web ページフォルダ」で、ドキュメントルート ($ UNZIPHOME ) を選択します。次に示すように、$ PROJECTHOME /Midnight/WEB-INF/lib フォルダおよび $ PROJECTHOME /Midnight/WEB-INF/classes フォルダがそれぞれライブラリおよびソースフォルダとして自動的に選択されます。
「完了」をクリックします。 IDE でクラスファイルを削除するかどうかの確認が求められます。これらは、プロジェクトの構築時にプロジェクトの build フォルダに自動的にコンパイルされるためです。
「削除」をクリックし、IDE での削除を実行します。
IDE でソースがインポートされ、クラスファイルが削除されて、Midnight プロジェクトが IDE 内に作成されます。
プロジェクトの論理構造は「プロジェクト」ウィンドウで、ファイル構造は「ファイル」ウィンドウで確認できます。
サーブレットを使用したフロントコントローラの作成
フロントコントローラは、受信するユーザー要求のルーティングに関与し、Web アプリケーション内でのナビゲーションを実行できます。フロントコントローラでは単一のエントリポイントが提供され、ここを介して Web アプリケーション内のいくつかのリソースに対する要求が渡されます。フロントコントローラを使用すると、JSP ページ内のコードの重複を減らすことができます。複数のリソースで同じ処理が必要な場合に、特に有効です。フロントコントローラの詳細については、J2EE パターンカタログ を参照してください。
「Midnight」プロジェクトノードと「ソースパッケージ」ノードを展開します。
「com.midnightcookies 」パッケージノードを右クリックし、「新規」>「サーブレット」を選択します。
「クラス名」テキストボックスに「FrontController 」と入力し、「パッケージ」ドロップダウンで必ず「com.midnightcookies 」パッケージを選択してください。「次へ」をクリックします。
「URL パターン」テキストボックスの値を次のように変更します。
/docs/*, /
上記の行の「, 」は URL マッピングの区切り文字です。これにより、各サーブレットに複数の URL マッピングを作成できます。
「完了」をクリックします。
ソースエディタに FrontController.java が表示されます。
「Web ページ」ノードと「WEB-INF」ノードを展開します。「web.xml 」ノードをダブルクリックします。配備記述子ファイルである web.xml の内容がグラフィカルエディタに表示されます。「サーブレット」をエディタの最上部でクリックします。「FrontController」サーブレットのエントリ用のノードを展開します。前述の手順 4 で定義したサーブレットの URL パターンは、次のようになっています。
サーブレットマッピング「/docs/* 」を設定すると、FrontController サーブレットでそのページ自体へのページの転送が行われなくなり、サーブレットマッピング「/ 」を設定すると、FrontController サーブレットに http:// hostname:portnumber /midnight/ などの要求を処理するためのサーブレットマッピングが提供されます。
エディタの最上部で「XML」をクリックします。配備記述子ファイルの内容が XML 形式で表示されます。サーブレットマッピングは次のとおりです。
要求の処理と Cookie の作成のためのメソッドの追加
次に、FrontController.java ファイルを編集して、Web アプリケーションが受信した要求を処理するために必要なロジックを含めます。processRequest メソッドを変更し、createCookie という新しいメソッドを作成します。これは、Web アプリケーションで使用される Cookie を作成する方法を示します。
「ナビゲータ」(Ctrl-7) を開き、「プロジェクト」ウィンドウ内で「FrontController.java」ノードを選択します。クラスのメソッドがナビゲータに表示されます。
ナビゲータで、processRequest メソッドのノードをダブルクリックします。ソースエディタに processRequest メソッドが表示されます。
デフォルトの processRequest を次のコードで置き換えます。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getRequestURI();
id = id.substring(request.getContextPath().length());
getServletContext().log
("Midnight Cookies FrontController received a request for " + id);
// ページ変数にはテンプレートページ /WEB-INF/docs/main.jsp の
// コンテンツ領域内に含まれるページへのパスが保持される。
// このパスは request 属性内のテンプレートに渡される。
String page;
// 受信する要求がない、または受信した要求がルートに対するもの
// である場合、/WEB-INF/docs/index.jsp を提供
if (id == null || id.trim().equals("") || id.equals("/")){
page = "/WEB-INF/docs/index.jsp";
}
// 受信した要求のファイル名の末尾が .jsp または .html
// でない場合、エラーが発生する。
// エラーページ (nonesuch.jsp) を含め、nonesuch 属性を
// 要求されたパスと一緒に設定する。
else if (!id.endsWith(".jsp") && !id.endsWith(".html")) {
page = "/WEB-INF/docs/nonesuch.jsp";
request.setAttribute("nonesuch", id);
}
else {
page = "/WEB-INF".concat(id);
if (id.equals("/docs/cookies/CookieMake.jsp")) {
Cookie cookie = createCookie(request);
if (cookie == null) {
page = "/WEB-INF/docs/cookies/CookieCutter.jsp";
}
else {
response.addCookie(cookie);
request.setAttribute("cookie", cookie);
}
}
}
request.setAttribute("page", page);
try {
request.getRequestDispatcher("/WEB-INF/docs/main.jsp").forward(request, response);
}
catch(Throwable t) {
getServletContext().log(t.getMessage());
}
}
注: ソースエディタへのコードの入力後 (入力またはコピーして貼り付け)、ソースエディタにカーソルを置き Alt-Shift-F キーを押して自動的にコードが整形されるようにします。行番号を表示するには、左マージンを右クリックしてコンテキストメニューから「行番号を表示」を選択します。
createCookie メソッドへの呼び出しがある行に下線が付き、次の図のようなエラーの印が表示されます。これは、このメソッドがまだ存在しないためです。
エラーのある行で Alt-Enter キーを押すと、IDE によって推奨のエラー解決方法が表示されます。
推奨を選択します。IDE によってスケルトン createCookie メソッドがファイルの末尾に作成されます。
新しい createCookie メソッドのソースエディタに、次のコードをコピーして貼り付けます。
private Cookie createCookie(HttpServletRequest request) {
String name = (String)request.getParameter("name");
if (name == null || name.trim().equals("")) {
request.setAttribute("noname", "noname");
request.setAttribute("error", "true");
return null;
}
String value = (String)request.getParameter("value");
if (value == null || value.trim().equals("")) {
request.setAttribute("novalue", "novalue");
request.setAttribute("error", "true");
return null;
}
System.out.println(name);
System.out.println(value);
Cookie cookie = null;
try {
cookie = new Cookie(name, value);
}
catch(IllegalArgumentException ex) {
// 不正な名前の可能性
ex.printStackTrace();
request.setAttribute("error", "true");
request.setAttribute("noname", "badname");
return null;
}
String maxage = request.getParameter("maxage");
if (maxage != null && !maxage.trim().equals("")) {
try {
cookie.setMaxAge(Integer.parseInt(maxage));
}
catch(NumberFormatException nfe) {
nfe.printStackTrace();
request.setAttribute("badnumber", "badnumber");
request.setAttribute("error", "true");
return null;
}
}
String domain = request.getParameter("domain");
if (domain != null && !domain.trim().equals("")) {
cookie.setDomain(domain);
}
String path = request.getParameter("path");
if (path != null && !path.trim().equals("")) {
cookie.setPath(path);
}
String secure = request.getParameter("secure");
if (secure != null && secure.equals("on")) {
cookie.setSecure(true);
} else {
cookie.setSecure(false);
}
return cookie;
}
まだディスクに保存されていない変更内容がある場合、ソースエディタ上部のファイルのタブにアスタリスクが表示されます。
Ctrl-S キーを押してドキュメントを保存します。ソースエディタ上部のファイルのタブにあるアスタリスクが消えます。
「プロジェクト」ウィンドウで「FrontController.java」ノードを右クリックし、「ファイルをコンパイル」(F9) を選択して、これまでに完了した手順にエラーがないことを確認します。「出力」ウィンドウにエラーを含むコンパイラからのメッセージが表示されます。エラーメッセージ内のリンクをダブルクリックすると、エラーのソースを検索できます。チュートリアルの次の手順に進む前に、「出力」ウィンドウに表示されたすべてのエラーを解決します。
すべての要求を受信する JSP ページの作成
main.jsp ページは、FrontController サーブレットが処理するすべての要求を受信します。動的な include 文と LinksHandler がページの作成に使用されます。
「Midnight」プロジェクトノードと「WEB-INF」ノードを展開します。「docs」ノードを右クリックし、「新規」>「JSP」を選択し、JavaServer Page ファイルに「main 」という名前を付けます。「完了」をクリックします。
main.jsp がソースエディタで開きます。
ソースエディタで、main.jsp ファイルの内容を次のコードで置き換えます。
<%@page contentType="text/html;charset=UTF-8"%>
<%@page buffer="none"%>
<%-- コンテンツセクションを処理する <midnight:content/> タグ
は include を使用するために単純化されて実装される。 そのため、このページは
バッファーに格納できない --%>
<%@taglib prefix="midnight" uri="http://www.midnightcookies.com/midnight"%>
<html>
<head><title>The Midnight Cookie Company</title></head>
<body text="#996633" link="#cc6600" vlink="#993300" alink="#000000">
<span font-style="sans-serif">
<TABLE border="0">
<tr>
<table border="0">
<tr><td width="80" height="100"> </td>
<td width="500" height="100"
text="#996633" bgcolor="#ffff99"
valign="center"halign="center">
<jsp:include page="/WEB-INF/docs/header.jsp"
flush="true"/>
</td>
</tr>
<tr><td width="90" height="300"
text="#996633" bgcolor="#ffff99"
valign="top">
<midnight:links separator="<br>"/>
</td>
<td width="500" height="300"
valign="top"cellpadding="15"
cellspacing="15">
<midnight:content/>
</td>
</tr>
</table>
</tr>
<tr><td width="580" height="50" text="#996633"
bgcolor="#ffff99" valign="top">
<midnight:links separator="|"/>
</td>
</tr>
</TABLE>
</span>
</body>
</html>
注: ソースエディタへのコードの入力後 (入力またはコピーして貼り付け)、ソースエディタにカーソルを置き Alt-Shift-F キーを押して自動的にコードが整形されるようにします。
Ctrl-S キーを押して変更を保存します。
ユーザー入力の処理に使用するパラメータファイル作成
この節で作成するパラメータファイルで、国際化を処理するために、タグライブラリからタグを使用する方法を説明します。また、Request パラメータを介して (特に JSP 式言語 (EL) の式 ${param.input} を介する場合)、入力を渡す方法を示します。この式は、Input.jsp ページの入力フィールドに挿入されます。
「docs」ノードを右クリックし、コンテキストメニューから「新規」>「その他」を選択します。「カテゴリ」の「その他」を選択し、「ファイルの種類」から「フォルダ」を選択します。「次へ」をクリックします。
「名前と場所」パネルで、「フォルダ名」テキストフィールドに「parameters 」と入力し、「完了」をクリックします。「docs」ノードの下の「プロジェクト」ウィンドウに、新しいパラメータフォルダが表示されます。
「parameters」ノードを右クリックし、「新規」>「JSP」を選択します。「JSP ファイル名」テキストフィールドに「Input 」と入力し、「フォルダ」テキストボックスで必ず「WEB-INF/docs/parameters 」を選択してください。「完了」をクリックします。これで、Input.jsp がソースエディタで開きます。
ソースエディタで、Input.jsp ファイルの内容を次のコードで置き換えます。
<%@page contentType="text/html;charset=UTF-8"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@taglib prefix="midnight" uri="/WEB-INF/tlds/midnight.tld"%>
<fmt:setBundle basename="com.midnightcookies.Midnight" var="bundle"
scope="page"/>
<h3><fmt:message key="provide_input" bundle="${bundle}"/></h3>
<form method="POST" action="Output.jsp">
<table>
<tr>
<td><fmt:message key="type_input" bundle="${bundle}"/>:</td>
<%-- 入力フィールドの値は "input" という名前の
要求パラメータに格納され、Output.jsp に
渡される。 --%>
<td><input type="text" size="20" name="input" value=""></td>
</tr>
<tr>
<td><fmt:message key="submit" bundle="${bundle}"
var="buttonLabel" scope="page"/>
<midnight:button/>
</td>
<td></td>
</tr>
</table>
</form>
Ctrl-S キーを押して変更を保存します。
Input.jsp ファイルの作成に使用したのと同じ方法で、Output.jsp ファイルを Parameters フォルダに作成します。
ソースエディタで、Output.jsp ファイルの内容を次のコードで置き換えます。
<%@page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<fmt:setBundle basename="com.midnightcookies.Midnight" var="bundle" scope="page"/>
<h3><fmt:message key="display_input" bundle="${bundle}"/></h3>
<fmt:message key="datareceived" bundle="${bundle}"/>:
<!--次の行では、"input" という名前の要求パラメータの値を
取得する。 これはデモアプリケーションである。セキュリティー上の理由から、先に構文解析を行わずに
ユーザー入力をエコーしてはいけない。 -->
<c:out value="${param.input}"/>
Ctrl-S キーを押して変更を保存します。
国際化の処理のための JSTL の使用
この節で作成する Tray.jsp ページで、ページを国際化するために、スクリプトの代わりに JSTL を使用する方法を説明します。CookieCutter.jsp ファイル、CookieMaker.jsp ファイル、およびリソースバンドルプロパティーファイルは midnight.zip ファイルとともに提供されています。これらのファイルと Tray.jsp ファイルで、このアプリケーションでの国際化の処理方法の例を、より詳しく見ることができます。
「docs」ノードを展開して「cookies」ノードを展開します。
ほかの JSP ファイルの作成に使用したのと同じ方法で、Tray.jsp ファイルを cookies フォルダに作成します。これは、必ず cookies フォルダ内に置いてください。
ソースエディタで、Tray.jsp ファイルの内容を次のコードで置き換えます。
<%@page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<fmt:setBundle basename="com.midnightcookies.Midnight" var="bundle" scope="page"/>
<h3><fmt:message key="cookies" bundle="${bundle}"/></h3>
<table border="1">
<tr>
<th halign="center">#</th>
<th align="left">
<fmt:message key="name" bundle="${bundle}"/>
</th>
<th align="left">
<fmt:message key="value" bundle="${bundle}"/>
</th>
<tr>
<%-- 配列の取得には式を使用する必要がある。
${cookie} を使用する場合、マップを取得すると、
エントリは自動的にキャストされない --%>
<% request.setAttribute("cookies", request.getCookies()); %>
<c:set var="i" value="0"/>
<c:forEach var="ck" items="${cookies}">
<c:set var="i" value="${i+1}"/>
<tr>
<td><c:out value="${i}"/></td>
<td><c:out value="${ck.name}"/></td>
<td><c:out value="${ck.value}"/></td>
</tr>
</c:forEach>
</table>
Ctrl-S キーを押して変更を保存します。
まとめ
前述の開発段階が終了したあと、「プロジェクト」ウィンドウおよび「ファイル」ウィンドウのビューは次のようになるはずです。
注: 前出のアプリケーションは、Tomcat Web サーバーに配備されます。別のターゲットサーバーを代わりに登録 して選択した場合は META-INF/context.xml ファイルはありません。たとえば、サーバーが GlassFish の場合、WEB-INF/sun-web.xml ファイルが配備記述子になります。
アプリケーションの実行と監視
HTTP モニターの有効化
HTTP モニターは、Tomcat Web サーバーではデフォルトで有効になっています。ただし、そのほかのサーバーの場合は、手動で HTTP モニターを有効にしてください。さらに、HTTP モニターが、そのほかのサーバーに動作するよう、HTTP サーバーを起動してください。
HTTP モニターを使用する準備のため、次の操作を実行します。
メインウィンドウから「ツール」>「サーバー」を選択します。
サーバーを選択します。
「HTTP モニターを有効化」をクリックし、「閉じる」をクリックします。
「実行時」ウィンドウで「HTTP サーバー」ノードを右クリックし、「HTTP サーバーを起動」を選択します。
コンテキストパスの検査
「Midnight」プロジェクトノードを右クリックし、「プロパティー」を選択します。
「プロジェクトプロパティー」ダイアログで「実行」をクリックします。
「コンテキストパス」は必ず「/Midnight 」に設定してください。
「相対 URL」は必ず「docs/index.jsp 」に設定してください。
アプリケーションの実行
「プロジェクト」ウィンドウで、「Midnight」プロジェクトノードを右クリックしてコンテキストメニューから「実行」を選択します。
アプリケーションが準備され、Web サーバーへ展開されていることを示す進捗モニターウィンドウが表示されます。
URL が「http:// hostname:port /Midnight 」に設定された状態で Web ブラウザが起動します。次に、Web ブラウザが Microsoft Windows プラットフォーム上で実行されている例を示します。
IDE で、HTTP モニターが表示されます。
次の節では HTTP モニターを使用して、要求、セッション、および Cookie を監視する方法を説明します。
要求とセッションの監視
HTTP モニターで、「現在のレコード」ノードの下の最後のエントリを選択します。
最後のエントリは、Midnight Web アプリケーションに対する要求を示します。
「要求」タブを選択すると、次のような情報が表示されます。
「セッション」タブを選択すると、次のような情報が表示されます。
Web ブラウザで「Parameters」リンクをクリックし、Input.jsp ページを表示します。Web ブラウザに次のような情報が表示されます。
「Type Input」テキストフィールドに「hello 」と入力し、「Submit data」をクリックします。
Web ブラウザに次のような Output.jsp ページの内容が表示されます。
HTTP モニターで、「現在のレコード」の下の最後のエントリを選択し、「要求」タブを選択します。
HTTP モニターに次のような情報が表示されます。
Cookie の監視
Web ブラウザで「Cookies」リンクをクリックします。
Web ブラウザに CookieCutter.jsp ページが表示されます。
「Name」テキストフィールドに「cookie 」と入力し、 「Value」テキストフィールドに「chocolate 」と入力します。
「Make me a cookie now!」をクリックします。
Web ブラウザに次のような情報が表示されます。
HTTP モニターで、「現在のレコード」ノードの下の最後のエントリを選択します。
HTTP モニターの「Cookies」タブに次のような情報が表示されます。
Web ブラウザの「Cookie tray」をクリックすると、次のような情報が Web ブラウザに表示されます。
HTTP モニターで、「現在のレコード」ノードの下の最後のエントリを選択し、「Cookies」タブを選択します。
HTTP モニターに次のような情報が表示されます。
「要求」タブを選択すると、HTTP モニターに次のような情報が表示されます。
HTTP モニターで、「現在のレコード」ノードの下にある同じエントリ (GET Tray.jsp) を右クリックし、コンテキストメニューから「編集と再実行」を選択します。「編集と再実行」ダイアログで「Cookies」タブを選択し、「Cookie を追加」をクリックします。名前を「Ingredient」に設定し、値を「Sugar」に設定します。「HTTP 要求を送信」をクリックします。新しい Cookie があるページがブラウザで再表示されます。
存在しないページへの要求の監視
Web ブラウザで、存在しないページの URL を入力し、nonesuch.jsp ページの使用方法を確認します。たとえば、「http://localhost:8084/Midnight/docs/Bake.jsp 」という URL を入力すると、Web ブラウザに次のような情報が表示されます。
HTTP モニターで「要求」タブを選択すると、次のような情報が表示されます。
存在しない Bake.jsp ページの代わりに nonesuch.jsp ページの内容が表示されています。
国際化の有効化
Web ブラウザで使用されている言語設定をフランス語またはスウェーデン語に変更し、Midnight Cookie Company Web アプリケーションの国際化機能を確認します。
Web ブラウザで現在使用可能な言語の一覧に、これらの 2 つの言語を追加する必要がある場合があります。
前の手順で表示したページを再読み込みするか、または再表示します。
左側のナビゲーションバーのリンク、ページ最下部のリンク、およびアプリケーションの JSP ページの一部の内容が、どのように選択した言語へ変換されるかを見てください。
この Web アプリケーションは、この Web アプリケーションで使用される一部のページを翻訳するために、リソースバンドルプロパティーファイルを使用します。そのため、翻訳はリソースバンドルプロパティーファイルの内容の範囲に限られます。
応用
「Goodbye」を適切な言語で表示するページにユーザーを移動させる、「Exit」リンクを追加します。
「com/midnightcookies/Midnight.properties 」ファイルを右クリックし、コンテキストメニューから「開く」を選択します。次のキーワードと値を追加します。
キーワード
デフォルト
フランス語
スウェーデン語
exit
Exit
Sortie
Utgång
closingRemark
Goodbye
Au revoir
Hej då
å 文字を表示するには、å を使用します。
Exit.jsp コンテンツファイルを追加します。fmt タグライブラリから message タグを使用して closingRemark キーワードのためのメッセージを表示します (ヒント: Output.jsp を参照)。fmt タグライブラリへの taglib 指令を忘れずに追加してください。
ソースエディタで com/midnightcookies/taghandlers/LinksHandler.java ファイルを開き、Exit.jsp ファイルへのリンクを追加します。exit キーワードを使用してリンクテキストをプロパティーバンドルから取得します。このクラスをコンパイルします。
Web アプリケーションを実行します。
詳細な操作
今後操作する可能性のある、その他の Web アプリケーションの機能を次に示します。
Midnight タグライブラリの調査
「tlds/Midnight 」ノードを展開し、ライブラリ内のタグの一覧を表示します。ソースエディタの「リンク」タグとその「属性」を参照し、個別の属性を取得していることを確認します。
Web アプリケーションのデバッグ
ソースエディタで docs/main.jsp ファイルを開き、32 行目付近 (midnight:content を実行する行) のマージンをクリックしてブレークポイントを設定します。「プロジェクト」ウィンドウまたは「ファイル」ウィンドウでプロジェクトノードを右クリックし、コンテキストメニューから「プロジェクトをデバッグ」を選択します。設定したブレークポイントで Web アプリケーションが停止します。F7 キーを押してコードにステップインします。ソースが見つからないためにダイアログが表示されるときは、毎回「了解」をクリックして、ソースのある最初の行で停止するデフォルトを選択します。ContentHandler クラスに otherDoStartTagOperations() 関数を入力するまで F7 キーを押し続けます。50 行目 (request.getRequestDispatcher(page).include(request, response)) にブレークポイントを設定し、Ctrl-F5 キー (続行) を押します。「page」、「request」、および「response」にカーソルを置き、値を確認します。値は、「局所変数」タブで確認することもできます。「呼び出しスタック」タブに JSP コードと生成されたサーブレットメソッドとの関係が表示されます。このほかのブレークポイントを設定してみましょう。変数を右クリックして、コンテキストメニューから「新規ウォッチポイント」を選択します。「ウォッチポイント」タブをクリックし、Web アプリケーションでさまざまなページを実行するときの値の変化を確認します。「デバッグ」>「セッションを終了」を選択し、セッションのデバッグを終了します。
JSP ファイルのテスト
公開 JSP ファイル (WEB-INF フォルダ下にはないファイル) を実行するには、単純にファイルのノードを右クリックして、コンテキストメニューから「実行」を選択するだけです。ページが読み込まれたら、ブラウザの再読み込みボタンをクリックすると、行なった変更内容が表示されます。このチュートリアルにあるような非公開 JSP ファイルでは、実行がやや難しいです。Web アプリケーションを再実行してそのページに移動せずに、変更された非公開 JSP ファイルをテストする方法の 1 つは、HTTP モニターの再実行アクションを使用することです。docs/cookies/Tray.jsp ファイル内の表のボーダーを「10」に設定して変更し、変更内容を保存します。HTTP モニターで「GET Tray.jsp」レコードを右クリックして、コンテキストメニューから「再実行」を選択します。表のボーダーが太くなった状態で、Tray.jsp ページがブラウザに表示されるはずです。
用語集
次に、このチュートリアルで使用する用語の一部を説明します。
複合ビュー
JSP ページ内に情報を表示するために使用するデザインパターン。このデザインパターンでは、コンポーネントの複数のビューから集合ビューが作成されます。コンポーネントビューには、このページの動的部分またはモジュール部分が含まれる場合があります。複合ビューデザインパターンは、ビューを多数のサブビューから作成する際の Web アプリケーションのデザインに関係します。複雑な Web ページは、さまざまなリソースを基にしたコンテンツで構成されることがよくあります。ページのレイアウトは、ページのサブビューのコンテンツとは別個に管理されます。たとえば、ビューにはナビゲーション、検索、特集記事、および見出しなどのサブビューが含まれることがあります。
複合ビューの作成時、静的コンテンツおよび動的コンテンツを含めることができます。静的コンテンツは、HTML ファイルから構成されることもあります。動的コンテンツは JSP ページの一部です。特定のコンテンツが JSP の変換時または実行時に決定されることがあります。
フロントコントローラ
フロントコントローラは、受信する要求のルーティングと Web アプリケーション内でのナビゲーションの実行に関与します。フロントコントローラデザインパターンの使用方法の詳細については、J2EE パターンカタログ を参照してください。
JSP ページ
エンドユーザー向けに情報を表示し、エンドユーザーからのデータをサーバーに戻すために Web アプリケーション内で使用されるファイルです。JSP ページは、JSP ページを IDE 内で実行できるようにするために、Web アプリケーション内に配置してください。
サーブレット
サーブレットとは、通常 Web サーバー内で実行中のサーブレットコンテナ内で実行される Java クラスです。サーブレットは次の処理に使用されます。
動的コンテンツを生成する。
Web サーバーの機能および Web で使用可能なアプリケーションサーバーの機能を拡張する。
Web クライアント (一般に Firefox や Internet Explorer などのブラウザアプリケーション) と対話する。
関連項目:
NetBeans IDE の使用方法の詳細については、次のリソースを参照してください。
nbj2ee
@
netbeans.org
メーリングリストに登録することによって、NetBeans IDE J2EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。