corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

NetBeans IDE 4.0 チュートリアル (Midnight Cookie Company)

-
NetBeans IDE 4.0 クイックスタートガイド (Web アプリケーション)
-
-

NetBeans 4.0 あるいは Java が初めての方へ。『NetBeans IDE 4.0 クイックスタートガイド (Web アプリケーション)』をお読みください。『クイックスタートガイド』を終え、このチュートリアルに取り組むことによってさらに知識を高めることができます。


-
- - - -

このチュートリアルで構築する Midnight Cookie Company アプリケーションでは、次のことを行う方法を学びます。

このアプリケーションは、JavaServer Pages 標準タグライブラリ (JSTL) を使用して動的データをフェッチしたり、その中で使用する JSP ページを国際化します。

このチュートリアルに要する時間は 2 時間ほどです。

環境のセットアップ

必要なソースファイルの入手

Midnight Cookie Company アプリケーションを作成するには、そのソースファイルが含まれている midnight.zip ファイルが必要です。これらのソースファイルで、アプリケーションを構築します。この zip ファイルには WEB-INF フォルダがあり、さらにこのフォルダに、このチュートリアルで使用する classesdocstlds および lib フォルダが含まれています。

  1. ファイルシステムで、zip ファイルを展開したときのアプリケーションファイル用のフォルダを作成します。以降、このフォルダを $PROJECTHOME と表記します。
  2. ここを をクリックし、midnight.zip ファイルをダウンロードします。
  3. ファイルを展開するアプリケーションを使用し、midnight.zip ファイルを $UNZIPHOME フォルダに展開します。
  4. $UNZIPHOME に、次のファイルおよびフォルダを含む WEB-INF フォルダが作成されます。

    ファイルまたはフォルダ
    説明
    web.xml Web アプリケーションの配備記述子
    classes ページの国際化に使用するリソースバンドルプロパティファイルと、com/midnightcookies/taghandlers フォルダが含まれます。taghandlers フォルダには、ContentHandler、ButtonHandler および LinksHandler タグハンドラそれぞれのクラスファイルが含まれます。ContentHandler は、JSP ファイルの内容を取り込みます。ButtonHandler は、言語対応のメッセージを含む送信ボタンを出力します。LinksHandler は、区切り記号を含めて、タグ属性から得られた一群のリンクを表示します。
    docs header.jspindex.jsp、および nonesuch.jsp ファイルが含まれます。このチュートリアルでは、main.jsp ページを作成し、このフォルダに保存します。このフォルダにはまた cookies フォルダがあり、このフォルダには、CookieCutter.jsp および CookieMake.jsp ファイルが含まれます。このチュートリアルでは、Tray.jsp ページを作成し、このフォルダに保存します。about フォルダには、この Web アプリケーションのアーキテクチャの概略を説明した about.jsp ファイルが含まれます。
    lib standard.jar ファイルと jstl.jar ファイルが含まれます。これら 2 つのファイルは JSTL の実装内容です。standard.jar は、TLD とタグハンドラで構成され、jstl.jar ファイルは、その他の必要なアプリケーションプログラミングインタフェース (API) で構成されます。
    tlds 専用の midnight.tld が含まれます。


アプリケーションの開発

入手したソースファイルからの Web プロジェクトの作成
  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。「カテゴリ」で「Web」を選択します。「プロジェクト」で「既存のソースを使用する Web プロジェクト」を選択し、「次へ」をクリックします。
  2. 「場所」で「ブラウズ」をクリックし、Web アプリケーションのドキュメントルートを選択します。ドキュメントルートは、midnight.zip ファイルの展開先のフォルダの $UNZIPHOME です。
  3. 「プロジェクト名」に Midnight と入力します。「プロジェクトフォルダ」をローカルコンピュータ上の任意のフォルダに変更します。以降、このフォルダを $PROJECTHOME と表記します。「コンテキストパス」が /Midnight になっていることに注意してください。「次へ」をクリックします。
  4. 「完了」をクリックします。これで、$PROJECTHOME/Midnight プロジェクトフォルダが作成されます。このプロジェクトフォルダには、ソースおよび、プロジェクトの Ant スクリプトなどのプロジェクトメタデータのすべてが含まれます。IDE で Midnight プロジェクトが開きます。「プロパティ」ウィンドウでプロジェクトの論理構造を、「ファイル」ウィンドウでそのファイル構造を見ることができます。
サーブレットを使ったフロントコントローラの作成

フロントコントローラは、ユーザーからの要求を受け取って送信し、Web アプリケーション内でナビゲーションが行えるようにする働きをします。フロントコントローラは、1 つの Web アプリケーションパスで複数のリソースを要求するためのエントリポイントを 1 つ提供します。フロントコントローラは、JSP ページにおけるコードの重複を減らすのに役立ちます。これは、複数のリソースが同じ処理を必要とする場合に顕著です。フロントコントローラの詳細は、プログラミングシリーズの一冊、『Web コンポーネントのプログラミング』の「フロントコントローラ」の項を参照してください。このシリーズは、Sun[tm] Java Studio Developer Resources Web サイトから入手できます。

  1. 「Midnight」プロジェクトノード、「ソースパッケージ」ノードの順に展開します。
  2. com.midnightcookies」パッケージノードを右クリックし、「新規」>「ファイル/フォルダ」を選択します。「カテゴリ」で「Web」を選択します。「ファイルの種類」で「サーブレット」を選択します。「次へ」をクリックします。
  3. 「クラス名」テキストボックスに FrontController と入力し、「パッケージ」ドロップダウンメニューで com.midnightcookies パッケージが選択されていることを確認します。「次へ」をクリックします。
  4. 「URL マッピング」テキストボックスの値を次のように変更します。
     /docs/*, /
    上記の行の「,」は、URL マッピング間の区切り文字であることに注意してください。区切り文字を使用することによって、1 つのサーブレットに複数の URL マッピングを作成できます。

  5. 「完了」をクリックします。

    ソースエディタが開いて、FrontController.java が表示されます。

  6. 「Web ページ」ノード、「WEB-INF」ノードの順に展開します。「web.xml」ノードをダブルクリックします。ソースエディタに、配備記述子ファイル web.xml の内容が表示されます。サーブレットマッピングエントリに、上記の手順 4 で定義した次のマッピングがあることに注意してください。

    サーブレットマッピングの「/docs/*」は、FrontController サーブレットがそのサーブレット自身にページを送信するのを防止するのに対し、サーブレットマッピング「/」は、http://hostname:portnumber/midnight/ などの要求を処理するサーブレットマッピングを FrontController サーブレットに提供します。

要求を処理するメソッドと Cookie を作成するメソッドの追加

今度は、FrontController.java ファイルをエディタで開いて、Web アプリケーションが受け取った要求の処理に必要なロジックを追加します。processRequest メソッドを変更し、createCookie という新しいメソッドを作成します。Web アプリケーションで使用するクッキーを作成する方法を具体的に学ぶことができます。

  1. 「プロジェクト」ウィンドウで「FrontController.java」ノード、「FrontController」クラスノードの順に展開します。「フィールド」ノード、「コンストラクタ」ノード、「メソッド」ノード、そして「Bean パターン」ノードが表示されます。

  2. 「メソッド」ノードを展開し、「processRequest」ノードをダブルクリックします。ソースエディタに、processRequest メソッドが表示されます。

  3. ソースエディタで左マージンを右クリックし、コンテキストメニューから「行番号を表示」を選択します。

  4. processRequest メソッド (行 39 〜 54 の部分) を次のコードに置き換えます。

    
     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);
    
         // The page variable holds the path to the page that will be included
         // in the content area of the template page /WEB-INF/docs/main.jsp.
    
         // It is passed to the template in a request attribute.
         String page;
    
         // If no request is received or if the request received is
         // for the root, serve /WEB-INF/docs/index.jsp
    
         if (id == null || id.trim().equals("") || id.equals("/")){
             page = "/WEB-INF/docs/index.jsp";
         }
    
         // If a request received is for a file that does not end in
         // .jsp or .html, there was an error. Include the
         // error page (nonesuch.jsp) and set the nonesuch attribute with
         // the path requested.
         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());
         }
     }
    

    注: 直接入力するか、コピー & ペーストでソースエディタにコードを入力した後、ソースエディタにカーソルを置いたまま、Ctrl-Shift-F キーを押すと、自動的にコードが再フォーマットされます。

    次の図に示すように、createCookie メソッドへの呼び出しがある行に下線が引かれ、エラーのマークが付いてます。これは、そのメソッドがまだ存在していないためです。この後の手順で createCookie メソッドを作成します。

    Source Editor with the call to the createCookie method marked as an error because the createCookie method does not exist yet.

    エラーボックス (ソースエディタの左マージンに白抜きの十字の入った小さな赤色の矩形) にカーソルを置くと、そのエラーの説明を見ることができます。

  5. ソースエディタ内のファイルの終わり近くにある getServletInfo メソッドの直後にカーソルを移動します。

  6. 次のコードをソースエディタにコピーし、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) {
    	    // Probably an illegal name
    	    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-Shift-F キーを押すと、自動的にコードが再フォーマットされます。

  7. Ctrl-S キーを押してファイルを保存します。ソースエディタの該当ファイルのタブにあったアスタリスクが消えます。このアスタリスクは、ディスクに保存されていない変更があると必ず表示されます。

  8. 「プロジェクト」ウィンドウで「FrontController.java」ノードを右クリックし、「ファイルをコンパイル」を選択することによって、これまでに完了した作業に何もエラーがないことを確認します。「出力」ウィンドウにコンパイラからのメッセージが表示されます。エラーがある場合は、そのエラーに関する情報が表示されます。エラーメッセージのリンクをダブルクリックし、エラーの原因を確認することができます。次に進む前に「出力」ウィンドウに示されたすべてのエラーを解決してください。
すべての要求を受け取る JSP ページの作成

main.jsp ページは、FrontController サーブレットが処理するすべての要求を受け取ります。このページは、動的なインクルード文と LinksHandler を使用して作成します。

  1. 「Midnight」プロジェクトノードを右クリックし、「新規」>「JSP」を選択して JSP ファイル名に main という名前を指定します。

  2. 「ブラウズ」をクリックして WEB-INF/docs フォルダに移動し、そのフォルダを選択します。これで、「フォルダ」テキストボックスに WEB-INF/docs が表示されます。「完了」をクリックします。ソースエディタに main.jsp が表示されます。

  3. ソースエディタで main.jsp ファイルの内容を次のコードに置き換えます。
    
      <%@page contentType="text/html;charset=UTF-8"%>
      <%@page buffer="none"%>
      <%-- The <midnight:content/> tag which handles the contents section
      is simplistically implemented to use an include. Hence this page
      cannot be buffered --%>
    
      <%@taglib prefix="midnight" uri="/WEB-INF/tlds/midnight.tld"%>
    
      <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>
    	    </span>
    	</TABLE>
        </body>
      </html>
    
    
  4. 注: 直接入力するか、コピー & ペーストでソースエディタにコードを入力した後、ソースエディタにカーソルを置いたまま、Ctrl-Shift-F キーを押すと、自動的にコードが再フォーマットされます。

  5. Ctrl-S キーを押し、変更を保存します。

ユーザー入力の処理に使用するパラメータファイルの作成

この節で作成するパラメータファイルは、タブライブラリにあるタグを使用して国際化に対処する方法を示す具体例です。これらのファイルはまた、要求パラメータ、特に JSP 表現言語 (EL) 表現の ${param.input} (Input.jsp ページの入力フィールドに設定) を使ってユーザーからの入力を引き渡し方法も示します。

  1. 「docs」ノードを右クリックし、コンテキストメニューから「新規」>「フォルダ」を選択します。「フォルダ名」テキストフィールドに parameters と入力して「完了」をクリックします。「プロジェクト」ウィンドウの「docs」ノードの下に新しい「parameters」フォルダが表示されます。

  2. 「parameters」ノードを右クリックし、「新規」>「JSP」を選択します。「新規」メニューに JSP が表示されることに注意してください。これは、「新規」メニューに最近選択した項目が含まれるためです。「JSP ファイル名」テキストフィールドに Input と入力し、「フォルダ」テキストボックスで WEB-INF/docs/parameters が選択されていることを確認します。「完了」をクリックします。ソースエディタに Input.jsp が表示されます。

  3. ソースエディタで 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>
    		<%-- The value of the Input field will be placed in a
    		      request parameter named "input" and it will be
    		      passed to 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>
    
    
  4. Ctrl-S キーを押し、変更を保存します。

  5. Input.jsp ファイルの作成で使用したのと同じ方法で、「Parameters」フォルダに Output.jsp ファイルを作成します。

  6. ソースエディタで 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}"/>:
    
      <!--The following line gets the value of the request parameter named
      "input". This is a demo application. For security reasons, one should
      never echo user input without parsing first. -->
      <c:out value="${param.input}"/>
    
    
  7. Ctrl-S キーを押し、変更を保存します。

JSTL による国際化対処

ここで作成する Tray.jsp ページは、スクリプトを使わずに JSTL を使用してページを国際化する方法を示す具体例です。midnight.zip ファイルには、CookieCutter.jsp ファイルと CookieMaker.jsp ファイル、それにリソースバンドルプロパティファイルが含まれていました。このアプリケーションでの国際化の対処例として、これらのファイルと Tray.jsp ファイルをじっくりと検討します。

  1. 「docs」ノードを展開し、「cookies」ノードを表示します。

  2. 他の JSP ファイルを作成に使用したのと同じ方法で、cookies フォルダに Tray.jsp ファイルを作成します。このファイルは、必ず cookies フォルダに保存します。

  3. ソースエディタで 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>
         <%-- We have to use expression to get at an array.
              If we use ${cookie} then we get a map and
              the entries are not automatically cast --%>
         <% 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>
    
          
  4. Ctrl-S キーを押し、変更を保存します。

まとめ

上記の開発段階を終了すると、「プロジェクト」および「ファイル」ウィンドウの表示はそれぞれ以下のようになります。

Projects window with files of completed Midnight Cookie Company applicationFiles window with files of completed Midnight Cookie Company application



アプリケーションの実行と監視

アプリケーションの実行

この手順では、付属の Tomcat Web サーバーを使用し、完成した Web アプリケーションを実行する方法を示します。デフォルトの Web サーバーを変更した場合は、デフォルトの Web サーバーの設定の手順に従うことによって、Tomcat をすべての Web アプリケーション用のデフォルトサーバーに設定することができます。

  • 「プロジェクト」ウィンドウで「Midnight」プロジェクトノードを右クリックし、コンテキストメニューから「プロジェクトを実行」を選択します。

    アプリケーションの準備が整い、Web サーバーに配備されると、進捗モニターウィンドウが表示されます。

    http://hostname:port/midnight の URL 設定で、 Web ブラウザが起動します。以下は、Microsoft Windows プラットフォームで動作する Web ブラウザの画面例です。

    Contents of web browser after the web application was executed.

    アプリケーションを実行しようとしてエラーが発生した場合の対策については、実行時の問題の対処方法 を参照してください。

    デフォルトでは、Web アプリケーションを実行すると、HTTP モニターが表示されます。以下の項では、HTTP モニターを使用して要求やセッション、Cookie を監視する方法を紹介します。

要求とセッションの監視
  1. 「HTTP モニター」ウィンドウで「現在のレコード」ノードの最後のエントリを選択します。

    このエントリは、midnight Web アプリケーションに対する要求を表します。

  2. 「要求」タブを選択し、以下のような情報が表示されることを確認します。

    HTTP Monitor displaying records in the Request tab after the web application was executed.

  3. 「セッション」タブを選択し、以下のような情報が表示されることを確認します。

    Session Tab in HTTP Monitor after the web application was executed.


  4. Web ブラウザで「Parameters」のリンクをクリックし、Input.jsp ページを表示します。

    Web ブラウザに次のような情報が表示されます。

    Web browser displaying Input.jsp page

  5. 「Type Input」テキストフィールドに hello と入力し、「Submit data」をクリックします。
  6. Web ブラウザに、以下に示すような Output.jsp ページの内容が表示されます。

    Web browser displaying Output.jsp page

  7. HTTP モニターで「現在のレコード」の最後のエントリを選択し、「要求」タブを選択します。

    HTTP モニターに次のような情報が表示されます。

    HTTP Monitor displaying the records in the Request tab.

Cookie の監視
  1. Web ブラウザで「Cookies」のリンクをクリックします。
  2. Web ブラウザに CookieCutter.jsp ページが表示されます。

  3. 「Name」テキストフィールドに cookie、「Value」テキストフィールドに chocolate と入力します。

    Web browser displaying CookieCutter.jsp page with Name and Value text fields populated.

  4. 「Make me a cookie now!」をクリックします。

    Web ブラウザに次のような情報が表示されます。

    Web browser after entering values in the Name and Value text fields

  5. HTTP モニターで「現在のレコード」ノードの最後のエントリを選択します。

  6. HTTP モニターの「Cookie」タブに次のような情報が表示されます。

    HTTP Monitor records after Cookie is made.

  7. Web ブラウザで「Cookie tray」をクリックします。Web ブラウザに、次のような情報が表示されます。

  8. Browser displaying the Tray.jsp page.

  9. HTTP モニターで「現在のレコード」ノードの最後のエントリを選択し、「Cookie」タブを選択します。
  10. HTTP モニターに次のような情報が表示されます。

    Cookies tab in the HTTP Monitor after Tray.jsp page is displayed.

  11. 「要求」タブを選択します。HTTP モニターに次のような情報が表示されます。

    Request tab on the HTTP Monitor after Tray.jsp page is displayed.

  12. HTTP モニターで「現在のレコード」ノードにある同じエントリ (GET Tray.jsp) を右クリックし、コンテキストメニューから「編集と再実行」を選択します。「編集と再実行」ダイアログで「Cookie」タブをクリックし、「Cookie を追加」をクリックします。名前を Ingredient、値を Sugar に設定します。「HTTP 要求を送信」をクリックします。ブラウザに、新しいクッキーの入ったページが再表示されます。

存在しないページの要求の監視
  1. Web ブラウザで存在しないページの URL を入力し、nonesuch.jsp ページがどのように使用されるか確認します。たとえば URL として http://localhost:8084/Midnight/docs/Bake.jsp と入力します。Web ブラウザに次のような内容が表示されます。
  2. Web browser displaying contents of nonesuch.jsp after request was made for the non-existent Bake.jsp page

  3. HTTP モニターで「要求」タブを選択し、次のような情報が表示されることを確認します。
  4. HTTP Monitor's Request tab after the call to non-existent Bake.jsp page.

    存在しない Bake.jsp ページではなく、nonesuch.jsp ページの内容が表示されることに注意してください。

国際化
  1. Web ブラウザの言語の設定をフランス語またはスウェーデン語に変更し、この Midnight Cookie Company Web アプリケーションの国際化機能を確認します。
  2. Web ブラウザで使用可能な言語の一覧にこれら 2 つの言語が含まれていない場合は、追加する必要があることに注意してください。

  3. 上記の手順で表示されたページを再読み込みするか、再表示します。

    左側のナビゲーションバーのリンクと、ページ最下部のリンク、アプリケーションの一部 JSP ページの内容が選択した言語に翻訳されていることに注意してください。

    この Web アプリケーションはリソースバンドルプロパティファイルを使用し、アプリケーションで使われている一部ページの翻訳の支援します。このため、翻訳されるのは、リソースバンドルプロパティファイルの内容に該当する部分だけです。



実行時の問題の対処方法

この節では、Midnight Cookie Company アプリケーションの実行中にエラーが発生した場合の推奨する対処方法をまとめています。

指定されているブラウザを IDE が起動しようとしたときに例外が発生する。 IDE で使用するように指定したブラウザのパス設定に誤りがないか確認してください。

  1. IDE のメインウィンドウで「ツール」>「オプション」を選択します。

  2. 「IDE 構成」ノードを展開し、「サーバーと外部ツールの設定」 を展開します。

  3. 「Web ブラウザ」を選択します。

  4. ブラウザのパスに誤りがないか確認します。正しくない場合は、「ブラウズ」ボタンをクリックするか、正しいパスを入力します。デフォルトのブラウザが Netscape 6.0 または 7.0 の場合は、「DDE サーバー」プロパティを NETSCAPE6 に設定します。

JSP ページを表示しようとすると、「File Not Found」エラーが返される。 Web ブラウザがプロキシサーバーを使用する設定になっている場合、Web ブラウザは、ローカルファイルを含めて、表示するすべてのファイルをプロキシサーバー経由で送信しようとします。この問題を解決するには、Web ブラウザの設定で、localhost および使用しているマシン名を、バイパスされるホストのリストに追加します。詳細は、IDE で Core IDE ヘルプにある「Accessing Local Files Through a Proxy」というオンラインヘルプページを参照してください。このためには、「ヘルプ」>「ヘルプセット」>「Core IDE ヘルプ」を選択します。「目次」ページで「Configuring the Environment」ノード、「Using a Web Browser」ノードの順に展開します。

Web アプリケーションを実行したときに「File not found」エラーが返される。 このチュートリアルで作成した JSP ファイルの名前を調べます。「新規」ウィザードでオブジェクトの名前を入力したときに .jsp ファイル拡張子を入力していないか確認してください。必要に応じて、ファイル名を変更してください。



応用編

適切な言語で「Goodbye」と表示するページにジャンプする「Exit」のリンクの追加
  1. com/midnightcookies/Midnight.properties ファイルを右クリックし、コンテキストメニューから「開く」を選択します。次のキーワードと値を追加します。

    キーワード デフォルト フランス語 スウェーデン語
    exit Exit Sortie Utgång
    closingRemark Goodbye Au revoir Hej då

    å を使用し、å 文字を表示します。

  2. Exit.jsp コンテンツファイルを追加します。fmt タグライブラリにある message タグを使用し、closingRemark キーワードのメッセージを表示します (ヒント: Output.jsp を参照)。fmt タブライブラリの taglib 指令を追加するのを忘れないでください。

  3. ソースエディタで com/midnightcookies/taghandlers/LinksHandler.java を開き、Exit.jsp ファイルへのリンクを追加します。exit キーワードを使用し、プロパティバンドルからリンクテキストを取得します。クラスをコンパイルします。

  4. Web アプリケーションを実行します。


次のステップ

ここでは、一部ですが、使用すると便利なその他の Web アプリケーション機能をまとめています。

Midnight タグライブラリの内容

「tlds/midnight.tld」ノードを展開し、ライブラリ内のタグの一覧を表示します。ソースエディタで「Links」のタグおよびその属性を表示し、このタグが区切り記号属性を取ることを確認します。

よく使うタグライブラリを IDE から利用できるようにする

JSTL の JAR ファイルを永続的な場所に置きます。メインメニューから「ツール」>「ライブラリマネージャ」を選択し、JAR ファイルを追加します。これで、「プロジェクト」または「ファイル」ウィンドウでプロジェクトのノードを右クリックし、「プロパティ」を選択することによって、任意の Web アプリケーションにそれらのタグライブラリを追加することができます。コード補完にそのタグライブラリを使用できるようにするには、「プロジェクトプロパティ」ダイアログの「ソースのコンパイル」セクションを使用します。WAR ファイルにそのタグライブラリを含めるには、同じダイアログの「プロジェクトのパッケージ化」セクションを使用します。

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 ファイルのテスト public JSP ファイル (WEB-INF フォルダの下にないファイル) を実行するには、単にそのファイルのノードを右クリックし、コンテキストメニューから「ファイルを実行」を選択します。ページが読み込まれている場合、ブラウザの「再読み込み」ボタンをクリックすると、それまでに加えたすべての変更が表示されます。このチュートリアルのもの同様、private JSP ファイルの実行は public ファイルほど簡単ではありません。Web アプリケーションを再起動することなく変更後の private JSP ファイルをテストし、そのページに移動するには、1 つの方法として HTTP モニターの再実行アクションを使用します。docs/cookies/Tray.jsp ファイルを開いて表のボーダーの設定を 10 に変更し、変更を保存します。HTTP モニターで GET Tray.jsp レコードを右クリックし、コンテキストメニューから「再実行」を選択します。ブラウザに、表のボーダーが太くなった Tray.jsp ページが表示されます。



用語集

このチュートリアルで使用されている主な用語を説明しています。

複合ビュー

JSP ページ内の情報の提供に使用されるデザインパターン。このデザインパターンは、複数のコンポーネントビューから 1 つのビューを作成します。コンポーネントビューにはたとえばページの動的およびモジュール部分が含まれます。複合ビューのデザインパターンは、多数のサブビューから 1 つのビューを作成するときの Web アプリケーションデザインに関係しています。複雑な Web ページは、さまざまなリソースから得られた内容で構成されることがよくあります。ページのレイアウトは、そのサブビューの内容とは別に管理されます。こうして、たとえば 1 つのビューに、Navigation や Search、Feature Story、Headline などのサブビューを持たせることができます。

複合ビューの作成では、静的内容と動的内容の両方を含めることができます。静的内容は 1 つの HTML ファイルで構成されます。動的内容は、JSP ページの断片です。具体的な内容は、JSP 変換時または実行時のいずれかに決定することができます。

フロントコントローラ フロントコントローラは、要求を受け取って送信し、Web アプリケーション内でナビゲーションを行えるようにする働きをします。フロントコントローラデザインパターンの使用方法の詳細は、プログラミングシリーズの一冊、『Web コンポーネントのプログラミング』の「フロントコントローラ」の項を参照してください。このシリーズは、Sun[tm] Java Studio Developer Resources Web サイトのマニュアルページから入手できます。

JSP ページ

Web アプリケーションでエンドユーザーに情報を提供し、エンドユーザーからサーバーにデータが送信できるようにするために使用されるページです。JSP ページが IDE 内で実行できるようにするには、Web アプリケーション内に JSP ページを含める必要があります。

サーブレット

サーブレットは、一般に Web サーバー内で動作するサーブレットコンテナ内で実行される Java クラスです。サーブレットは以下の目的に使用されます。

  • 動的内容の生成
  • Web サーバーおよび Web 対応のアプリケーションサーバーの機能拡張
  • 要求応答パラダイムを使用する Web クライアント (一般には Netscape や Internet Explorer などのブラウザアプリケーション) との対話

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems