Struts Webフレームワーク入門

このドキュメントでは、NetBeans IDEを使用して、Struts Webフレームワークを使用するWebアプリケーションを開発する基本手順を示します。Strutsは、Java Servlet APIを拡張してMVC (Model、View、Controller)アーキテクチャを採用した、オープン・ソースのフレームワークです。JSPページ、JavaBeans、リソース・バンドル、XMLなどの標準テクノロジに基づいた、管理可能で拡張可能な柔軟性のあるWebアプリケーションを作成できます。

このチュートリアルでは、ログイン・ページを表示し、検証をパスするデータを送信すると成功ページを返す、単純なMVCアプリケーションのビルド方法を学習します。Strutsの提供するいくつかの基本機能と、IDEを使用してそれらの機能を実装する方法を学びます。具体的には、JSPページでStrutsタグを使用し、StrutsのActionForm Beanを使用してユーザー・データを管理し、StrutsのActionオブジェクトを使用して転送ロジックを実装します。また、ログイン失敗に対する警告メッセージの設定など、アプリケーションに単純な検証を実装する方法も示します。

Strutsに関するさらに詳しい説明については、公式のStruts WebサイトにあるHow does Struts work?を参照してください。IDEのJavadoc索引検索(「ヘルプ」>「Javadoc索引検索」)を使用して、Strutsライブラリとともにパッケージ化されているStrutsフレームワークAPIも参照してください。

目次

このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます

このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE 7.2、7.3、7.4、8.0、Java EE
Java Development Kit (JDK) 7または8
GlassFishサーバー
または
Tomcatサーブレット・コンテナ
Open Source Edition 3.xまたは4.0

バージョン7.xまたは8.x

注意:

  • Javaインストール版では、GlassFishサーバーとApache Tomcatサーブレット・コンテナをオプションでインストールできます。このチュートリアルの手順に従うには、これらのいずれかをインストール(または別のサーバーをIDEに登録)する必要があります。
  • プロジェクトを、正常に機能するソリューションと比較する必要がある場合は、サンプル・アプリケーションをダウンロードできます。

アプリケーションの概要

Strutsを使用すると、フレームワークによってコントローラ・サーブレットActionServletが提供されます。このサーブレットは、IDEに含まれているStrutsライブラリで定義されて、次に示すように、web.xmlデプロイメント・ディスクリプタに自動的に登録されます。このコントローラ・サーブレットはstruts-config.xmlファイルを使用して、受信リクエストをStrutsのActionオブジェクトにマップし、アクションに関連付けられたActionFormオブジェクトがある場合は、そのオブジェクトをインスタンス化して、フォーム・データを一時的に保存します。Actionオブジェクトは、フォームBeanに保存された任意のデータを使用しながら、executeメソッドを使用してリクエストを処理します。リクエストを処理すると、Actionオブジェクトは新しいデータを(同じフォームBeanまたは別の結果Beanに)保存し、その結果を適切なビューに転送します。

Strutsワークフロー

Strutsアプリケーションの開発は、NetBeans IDEで他の種類のWebアプリケーションを開発するのと似ています。ただし、IDEが提供するStrutsサポートを利用することによって、使用するWeb開発ツールキットを補完できます。たとえば、IDEのテンプレートを使用して、StrutsのActionオブジェクトやActionForm Beanを作成します。作成すると、IDEによって、これらのクラスは自動的にstruts-config.xmlファイルに登録され、ソース・エディタの右クリック・メニューのメニュー項目を使用してこのファイルを簡単に拡張できます。多くのWebアプリケーションがビューにJSPページを使用するため、StrutsにもHTMLフォームとの対話を容易にするカスタム・タグ・ライブラリが用意されています。IDEのソース・エディタ内でコード補完およびJavadocサポートを呼び出して、そのライブラリの効率的な操作に役立てることができます。

次の手順では、ユーザー・データの収集、単純な検証の実行、および成功ページへのデータの出力を行う、単純なフォームを作成する方法を示します。

Strutsアプリケーションの設定

IDEでは、Strutsアプリケーションは、StrutsライブラリとStruts構成ファイルを伴った通常のWebアプリケーションにすぎません。Strutsアプリケーションを作成する方法は、IDEで他のWebアプリケーションを作成する方法と同様に、新規Webアプリケーション・ウィザードを使用して、追加ステップでStrutsライブラリとStruts構成ファイルをアプリケーションに含めるように指示します。

  1. メイン・メニューから「ファイル」>「新規プロジェクト」([Ctrl]-[Shift]-[N]、Macの場合は[⌘]-[Shift]-[N])を選択します。「カテゴリ」のリストで「Java Web」を選択し、「プロジェクト」のリストで「Webアプリケーション」を選択します。「次」をクリックします。
  2. 「名前と場所」パネルで「プロジェクト名」に「MyStrutsApp」と入力し、「次」をクリックします。
  3. 「サーバーと設定」パネルで、アプリケーションのデプロイ先のサーバーを選択します。表示されるのは、IDEに登録されているサーバーのみです。サーバーを登録するには、「サーバー」ドロップダウン・リスト横の「追加」をクリックします。デプロイしたアプリケーションのコンテキスト・パスは/MyStrutsAppになります。「次」をクリックします。
  4. 「フレームワーク」パネルで「Struts」を選択します。
    新規Webアプリケーション・ウィザードの「フレームワーク」パネルに表示された「Struts」オプション

    このチュートリアルの目的のためには、このパネルの下部領域にある構成値を変更しないでください。ウィザードには、次の構成オプションが表示されます。

    • アクションのサーブレット名: アプリケーションで使用するStrutsアクション・サーブレットの名前。web.xmlデプロイメント・ディスクリプタにはアクション・サーブレットのエントリが格納され、Strutsライブラリ内のサーブレット・クラスやアプリケーション内のstruts-config.xml構成ファイルのパスなど、Struts固有の適切なパラメータを指示します。
    • アクションのURLパターン: Strutsアクション・コントローラにマップされる、受信リクエストのパターンを指定します。この指定によって、デプロイメント・ディスクリプタにマッピング・エントリが生成されます。デフォルトでは、*.doパターンのみマップされます。
    • アプリケーション・リソース: メッセージのローカライズのためにstruts-config.xmlファイルで使用されるリソース・バンドルを指定できます。デフォルトでは、com.myapp.struts.ApplicationResourceです。
    • Struts TLDを追加: Strutsタグ・ライブラリ用のタグ・ライブラリ・ディスクリプタを生成できます。タグ・ライブラリ・ディスクリプタは、タグ・ライブラリ全体のみでなく、各個別タグに関する追加情報も格納されるXMLドキュメントです。一般に、ローカルTLDファイルではなく、オンラインのURIを参照できるため、これは必要ありません。
  5. 「終了」をクリックします。IDEによって、ファイル・システムにプロジェクト・フォルダが作成されます。IDEのWebアプリケーションでは、プロジェクト・フォルダに、すべてのソースとIDEのプロジェクト・メタデータ(Antビルド・スクリプトがなど)が含まれます。ただし、使用するWebアプリケーションには、そのクラスパス上にすべてのStrutsライブラリがさらに含まれます。これらはアプリケーションのクラスパス上に存在するのみでなく、プロジェクトに含まれるため、後でプロジェクトをビルドしたときに一緒にパッケージ化されます。

IDEでプロジェクトが開きます。「プロジェクト」ウィンドウは、プロジェクト・ソースへのメインのエントリ・ポイントです。ここには重要なプロジェクト内容の論理ビューが表示されます。たとえば、新しいプロジェクト内のいくつかのノードを展開すると、次のようになります。

新規作成されたプロジェクトが表示された「プロジェクト」ウィンドウ

注意: プロジェクトのすべての内容をディレクトリ・ベースで表示するには、「ファイル」ウィンドウ(「ウィンドウ」>「ファイル」)を使用します。

Struts固有の構成ファイルとアプリケーションのデプロイメント・ディスクリプタは、「構成ファイル」フォルダ内に使いやすく配置されます。デプロイメント・ディスクリプタを開きます(ソース・エディタで表示するにはweb.xmlをダブルクリック)。Struts処理に対応するため、Strutsコントローラ・サーブレットにマッピングが提供されます。

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>2</param-value>
    </init-param>
    <init-param>
       <param-name>detail</param-name>
       <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

ここでは、Strutsコントローラ・サーブレットの名前はactionで、Strutsライブラリで定義されています(org.apache.struts.action.ActionServlet)。このサーブレットは、*.doマッピングを満たすリクエストをすべて処理するように設定されています。また、サーブレットの初期化パラメータはstruts-config.xmlファイルによって指定されます。このファイルもまた、WEB-INFフォルダに含まれています。

JSPページの作成

最初に、アプリケーション用のJSPページを2つ作成します。1つ目はフォームを表示します。2つ目はログインが成功したときに返されるビューです。

ログイン・ページの作成

  1. MyStrutsApp」プロジェクト・ノードを右クリックし、「新規」>「JSP」を選択して、新規ファイル名として「login」を入力します。「終了」をクリックします。ソース・エディタにlogin.jspファイルが表示されます。
  2. ソース・エディタで<title><h1>タグ(または使用中のIDEバージョンによっては<h2>タグ)の内容をLogin Formに変更します。
  3. ファイルの先頭に、次の2つのtaglibディレクティブを追加します。
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

    多くのWebアプリケーションは、MVCパラダイム内のビューにJSPページを使用するため、Strutsには、HTMLフォームとの対話を容易にするカスタム・タグ・ライブラリが用意されています。これらのタグはIDEのコード補完サポートを使用して、簡単にJSPファイルに適用できます。ソース・エディタに入力すると、IDEによってStrutsタグに対するコード補完とStruts Javadocが提供されます。[Ctrl]-[Space]を押して手動でコード補完を起動することもできます。

    ソース・エディタで提供される、Strutsタグに対するコード補完とJavadoc

    Bean taglibは、フォームから収集されたデータにフォームBean (ActionForm Bean)を関連付ける際に役立つ、多数のタグを提供します。html taglibは、ビューと、Webアプリケーションに必要な他のコンポーネントとの間のインタフェースを提供します。たとえば、次では一般的なhtmlformタグをStrutsの<html:form>タグに置き換えます。この利点の1つは、こうすることで、html:formaction要素に提供される値に対応するBeanオブジェクトを、サーバーが検索または作成することです。

  4. <h1> (または<h2>)タグの下に、次を追加します。
    <html:form action="/login">
    
       <html:submit value="Login" />
    
    </html:form>

    ソース・エディタでの入力が終了するたびに、右クリックして「フォーマット」を選択([Alt]-[Shift]-[F])することにより、コードを整えることができます。

  5. IDEの右側にあるパレット(「ウィンドウ」>「パレット」)で、「表」項目を「HTML」カテゴリから<html:submit value="Login" />行の直前の位置にドラッグします。「挿入表」ダイアログ・ボックスが表示されます。行を3、列を2に設定し、その他の設定はすべて0のままにします。このチュートリアルの後の方で、表の表示に影響するスタイル・シートを添付します。
    ソース・エディタに表示された「表を作成」ダイアログ
    「OK」をクリックし、必要に応じてコードの書式を再設定します([Alt]-[Shift]-[F])。これで、login.jspのフォームは次のようになります。
    <html:form action="/login">
        <table border="0">
            <thead>
                <tr>
                    <th></th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                </tr>
            </tbody>
        </table>
    
        <html:submit value="Login" />
    
    </html:form>

    注意: このチュートリアルでは使用されないため、表の<thead>行は安全に削除できます。

  6. 表の最初の行に、次の太字で示した部分を入力します。
    <tr>
        <td>Enter your name:</td>
        <td><html:text property="name" /></td>
    </tr>
  7. 表の2行目に、次の太字で示した部分を入力します。
    <tr>
        <td>Enter your email:</td>
        <td><html:text property="email" /></td>
    </tr>
    html:text要素によって、フォームからの入力フィールドを、次のステップで作成されるフォームBeanのプロパティと一致させることができます。たとえば、propertyの値は、このフォームに関連付けられたフォームBeanで宣言されているフィールドと一致します。
  8. 表の3行目の2列目に<html:submit value="Login" /> 要素を移動し、表の3行目が次の太字で示した部分になるようにします。
    <tr>
        <td></td>
        <td><html:submit value="Login" /></td>
    </tr>

この段階で、ログイン・フォームは次のようになるはずです。

<html:form action="/login">
    <table border="0">
        <tbody>
            <tr>
                <td>Enter your name:</td>
                <td><html:text property="name" /></td>
            </tr>
            <tr>
                <td>Enter your email:</td>
                <td><html:text property="email" /></td>
            </tr>
            <tr>
                <td></td>
                <td><html:submit value="Login" /></td>
            </tr>
        </tbody>
    </table>
</html:form>

成功ページの作成

  1. MyStrutsApp」プロジェクト・ノードを右クリックし、「新規」>「JSP」を選択して、新規ファイル名として「success」を入力します。「フォルダ」フィールドで、横の「参照」ボタンをクリックし、表示されるダイアログから「WEB-INF」を選択します。「フォルダを選択」をクリックし、「フォルダ」フィールドに「WEB-INF」と入力します。WEB-INFフォルダに含まれるどのファイルにも、クライアント・リクエストから直接アクセスすることはできません。success.jspを正しく表示するために、処理済のデータを含める必要があります。「終了」をクリックします。
  2. ソース・エディタで新しく作成されたページの内容を次のように変更します。
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login Success</title>
    </head>
    <body>
        <h1>Congratulations!</h1>
    
        <p>You have successfully logged in.</p>
    
        <p>Your name is: .</p>
    
        <p>Your email address is: .</p>
    </body>
  3. ファイルの先頭にBean taglibディレクティブを追加します。
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    
  4. 次の太字で示した<bean:write>タグを追加します。
    <p>Your name is: <bean:write name="LoginForm" property="name" />.</p>
    
    <p>Your email address is: <bean:write name="LoginForm" property="email" />.</p>
    
    <bean:write>タグを使用することによって、Bean taglibを利用し、これから作成するActionForm Beanを検索して、nameおよびemailに保存されたユーザー・データを表示します。

ActionForm Beanの作成

StrutsのActionForm Beanは、リクエスト間でデータを保持するために使用されます。たとえば、ユーザーがフォームを送信した場合、フォーム・ページに再表示(データが無効な形式か、ログインに失敗した場合)するか、ログイン成功ページに表示(データが検証をパスした場合)できるように、そのデータは一時的にフォームBeanに格納されます。

  1. MyStrutsApp」プロジェクト・ノードを右クリックし、「新規」>「その他」を選択します。「カテゴリ」で「Struts」を選択し、「ファイル・タイプ」で「Struts ActionForm Bean」を選択します。「次」をクリックします。
  2. 「クラス名」に「LoginForm」と入力します。続いて、「パッケージ」ドロップダウン・リストから「com.myapp.struts」を選択し、「終了」をクリックします。

    IDEによってLoginForm Beanが生成され、ソース・エディタで開きます。デフォルトでは、IDEにはnameというStringと、numberというintが用意されています。両方のフィールドに、それらに定義されたアクセッサ・メソッドがあります。また、IDEによりstruts-config.xmlファイルにBean宣言が追加されます。ソース・エディタでstruts-config.xmlファイルを開くと、ウィザードによって追加された次の宣言を確認できます。

    <form-beans>
        <form-bean name="LoginForm" type="com.myapp.struts.LoginForm" />
    </form-beans>
    

    struts-config.xmlファイルには、IDEのナビゲーション・サポートが用意されています。[Ctrl]キーを押したまま、LoginForm Beanの完全修飾クラス名の上にマウスを動かします。名前がリンクになり、ソース・エディタ内のそのクラスに直接移動できます。

    Struts configファイルに表示されたナビゲーション・サポート
  3. ソース・エディタのLoginForm Beanで、login.jsp内に作成したnameおよびemailテキスト入力フィールドに対応するフィールドと付随するアクセッサ・メソッドを作成します。nameLoginFormスケルトンですでに作成されているため、実装する必要があるのはemailのみです。

    nameの下に、次の太字で示した宣言を追加します。

    private String name;
    private String email;

    アクセッサ・メソッドを作成するには、email上にカーソルを置き、[Alt]-[Insert]を押します。

    ソース・エディタに表示された「コードを挿入」メニュー

    「取得メソッドおよび設定メソッド」を選択し、表示されるダイアログで「email: String」を選択して、「生成」をクリックします。「email」フィールドに対するアクセッサ・メソッドが生成されます。

    注意: このチュートリアルでは使用されないため、number用の宣言およびアクセッサ・メソッドは削除してかまいません。

Actionクラスの作成

Actionクラスには、アプリケーションのビジネス・ロジックが含まれます。フォーム・データを受信したときに、そのデータを処理し、処理したデータの転送先ビューを特定するのはActionオブジェクトのexecuteメソッドです。ActionクラスはStrutsフレームワークに不可欠なため、NetBeans IDEにはウィザードが用意されています。

  1. 「プロジェクト」ウィンドウで「MyStrutsApp」プロジェクト・ノードを右クリックし、「新規」>「その他」を選択します。「Struts」カテゴリで「Strutsアクション」を選択し、「次」をクリックします。
  2. 「名前と場所」パネルで名前をLoginActionに変更します。
  3. 「パッケージ」ドロップダウン・リストから「com.myapp.struts」を選択します。
  4. 「アクションのパス」に「/login」と入力します。この値は、login.jsp<html:form>タグのaction属性に設定したのと同じです。設定が、次に示すスクリーンショットの表示のようになっていることを確認し、「次」をクリックします。
    新規Strutsアクション・ウィザード
  5. ウィザードの3番目のステップで、ActionクラスをフォームBeanと関連付けられます。ActionForm Bean名のオプションとして、前に作成したLoginForm Beanが表示されています。パネルに対して次の調整を適用します。
    • 「入力リソース」フィールドのスラッシュを削除します。
    • 「スコープ」を「リクエスト」に設定します(Strutsでは、「セッション」がデフォルトのスコープ設定します。)
    • 「ActionForm Beanを検証」オプションを選択解除します。
    「終了」をクリックします。LoginActionクラスが生成され、ソース・エディタでそのファイルが開きます。struts-config.xmlファイルに次のactionエントリが追加されています。
    <action-mappings>
        <action name="LoginForm" path="/login" scope="request" type="com.myapp.struts.LoginAction" validate="false"/>
        <action path="/Welcome" forward="/welcomeStruts.jsp"/>
    </action-mappings>
    name属性とscope属性は、このアクションに関連付けられているフォームBeanに適用されます。具体的には、受信リクエストが/loginに一致すると、Strutsフレームワークは自動的にLoginFormオブジェクトをインスタンス化し、リクエストで送信されたフォーム・データとともに取り込みます。validateのデフォルト値はtrueに設定されます。これは、フォームBeanのvalidateメソッドへのコールをフレームワークに指示します。ただし、次のステップでvalidateメソッドを必要としない単純な検証を手動でコーディングするため、このウィザードでは、このオプションを選択解除しました。

検証の実装

ソース・エディタでLoginActionクラスを参照し、executeメソッドを検査します。

public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {

    return mapping.findForward(SUCCESS);
}

LoginActionクラス宣言の下に、SUCCESSの定義が表示されています。

private final static String SUCCESS = "success";

現在、mapping.findForwardメソッドは、任意のリクエストを無条件でsuccessという出力ビューに転送するように設定されています。これは実際には望ましいことではありません。受信データに対して、まずなんらかの検証を実行してから、successビューまたは別のビューに送信するかどうかを決定します。

Beanデータへのアクセスと転送条件の準備

  1. executeメソッドの本体に次のコードを入力します。
    // extract user data
    LoginForm formBean = (LoginForm)form;
    String name = formBean.getName();
    String email = formBean.getEmail();
    受信フォーム・データを使用するには、executeActionForm引数を受け取り、LoginFormとしてキャストして、前に作成した取得メソッドを適用します。
  2. 受信データに検証を実行するため、次の条件節を入力します。
    // perform validation
    if ((name == null) ||             // name parameter does not exist
        email == null  ||             // email parameter does not exist
        name.equals("") ||            // name parameter is empty
        email.indexOf("@") == -1) {   // email lacks '@'
    
        return mapping.findForward(FAILURE);
    }
    この段階で、executeメソッドは次のようになるはずです。
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
    
        // extract user data
        LoginForm formBean = (LoginForm) form;
        String name = formBean.getName();
        String email = formBean.getEmail();
    
        // perform validation
        if ((name == null) || // name parameter does not exist
                email == null || // email parameter does not exist
                name.equals("") || // name parameter is empty
                email.indexOf("@") == -1) {   // email lacks '@'
    
            return mapping.findForward(FAILURE);
        }
    
        return mapping.findForward(SUCCESS);
    }
  3. FAILUREの宣言をLoginActionクラスに追加します(変更箇所は太字で表示)。
    private final static String SUCCESS = "success";
    private final static String FAILURE = "failure";
    

上記のロジックを使用して、executeメソッドは、ユーザーがnameおよびemailフィールドの両方に入力を行い、入力されたemailに「@」記号が含まれている場合、リクエストをsuccessビューに転送します。そうでない場合、failureビューに転送されます。この後のstruts-config.xmlへのforwardエントリの追加で示すように、ユーザーがもう一度正しい形式でデータを入力できるよう、フォーム・ページに戻るためのfailureビューを設定できます。

エラー・メッセージの設定

ログイン・フォームが返された場合、検証に失敗したことをユーザーに通知することをお薦めします。このためには、フォームBeanにerrorフィールドを追加し、適切な<bean:write>タグをlogin.jsp内のフォームに追加します。最後にActionオブジェクトで、failureビューが選択された場合にエラー・メッセージが表示されるように設定します。

  1. LoginFormを開き、クラスにerrorフィールドを追加します。
    // error message
    private String error;
  2. 前に示したように、error用の取得メソッドと設定メソッドを追加します。
  3. 設定メソッドを次のように変更します。
    public void setError() {
        this.error =
            "<span style='color:red'>Please provide valid entries for both fields</span>";
    }
    
  4. login.jspを開き、次の変更を行います。
    <html:form action="/login">
        <table border="0">
            <tbody>
                <tr>
                    <td colspan="2">
                        <bean:write name="LoginForm" property="error" filter="false"/>
                        &nbsp;</td>
                </tr>
                <tr>
                    <td>Enter your name:</td>
                    <td><html:text property="name" /></td>
                </tr>
    
  5. LoginActionif条件節内に、failure条件を転送する前にエラー・メッセージを設定する文を追加します(太字部分)。
    if ((name == null) ||             // name parameter does not exist
        email == null  ||             // email parameter does not exist
        name.equals("") ||            // name parameter is empty
        email.indexOf("@") == -1) {   // email lacks '@'
    
        formBean.setError();
        return mapping.findForward(FAILURE);
    }
    

完成したLoginActionクラスは、次のようになるはずです。

public class LoginAction extends org.apache.struts.action.Action {

    private final static String SUCCESS = "success";
    private final static String FAILURE = "failure";

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        // extract user data
        LoginForm formBean = (LoginForm)form;
        String name = formBean.getName();
        String email = formBean.getEmail();

        // perform validation
        if ((name == null) ||             // name parameter does not exist
            email == null  ||             // email parameter does not exist
            name.equals("") ||            // name parameter is empty
            email.indexOf("@") == -1) {   // email lacks '@'

            formBean.setError();
            return mapping.findForward(FAILURE);
        }

        return mapping.findForward(SUCCESS);

    }
}

struts-config.xmlへのforwardエントリの追加

アプリケーションが、JSPページとLoginActionexecuteメソッドによって返された転送条件を一致させるようにするには、struts-config.xmlファイルにforwardエントリを追加する必要があります。

  1. ソース・エディタでstruts-config.xmlを開き、LoginFormactionエントリ内を右クリックし、「Struts」>「転送を追加」を選択します。
    struts-config.xmlの右クリック・メニューに表示された「Struts」のオプション
  2. 「転送を追加」ダイアログ・ボックスで、「転送名」に「success」と入力します。「リソース・ファイル」フィールドにsuccess.jspのパス(/WEB-INF/success.jsp)を入力します。ダイアログ・ボックスは次のようになるはずです。
    「転送の追加」ダイアログ
    「Add」をクリックします。次の太字で示したforwardエントリが、struts-config.xmlに追加されます。
    <action name="LoginForm" path="/login" scope="request" type="com.myapp.struts.LoginAction" validate="false">
        <forward name="success" path="/WEB-INF/success.jsp"/>
    </action>
    
  3. 同じ処理を行い、failureのforwardエントリを追加します。「リソース・ファイル」のパスを「/login.jsp」に設定します。次の太字で示したforwardエントリが、struts-config.xmlに追加されます。
    <forward name="success" path="/WEB-INF/success.jsp"/>
    <forward name="failure" path="/login.jsp"/>
    

アプリケーションの構成と実行

IDEでは、Antビルド・スクリプトを使用し、Webアプリケーションをビルドおよび実行します。ビルド・スクリプトは、プロジェクトの作成時に、新規プロジェクト・ウィザードで入力したオプションに基づいて生成されます。アプリケーションをビルドおよび実行する前に、アプリケーションのデフォルトのエントリ・ポイントをlogin.jspに設定する必要があります。(オプション)単純なスタイル・シートをプロジェクトに追加することもできます。

開始ページの設定

  1. 「プロジェクト」ウィンドウでweb.xmlデプロイメント・ディスクリプタをダブルクリックします。ソース・エディタ最上部に、web.xmlファイルへのインタフェースを提供するタブが表示されます。「ページ」タブをクリックします。「開始ファイル」フィールドに「login.jsp」と入力します。
    デプロイメント・ディスクリプタ・インタフェース
    ここで、「ソース」タブをクリックしてファイルを表示します。welcome-fileエントリ内にlogin.jspが示されます。
    <welcome-file>login.jsp</welcome-file>
    

スタイル・シートの添付

  1. プロジェクトに単純なスタイル・シートを追加します。これを行うための簡単な方法の1つは、使用するコンピュータにこのサンプル・スタイル・シートを保存することです。ファイルをコピーし([Ctrl]-[C])、IDEの「プロジェクト」ウィンドウで「Webページ」ノードを選択して、[Ctrl]-[V]を押します。ファイルがプロジェクトに追加されます。
  2. login.jspsuccess.jspの両方の<head>タグ間に参照を追加して、JSPページにスタイル・シートを関連付けます。
    <link rel="stylesheet" type="text/css" href="stylesheet.css">
    

アプリケーションの実行

  1. 「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「実行」を選択します。Webアプリケーションがビルドされ、プロジェクトを作成するときに指定したサーバーを使用してデプロイされます。ブラウザが開き、login.jspページが表示されます。検証に失敗するデータを入力します(つまり、いずれかのフィールドを空のままにするか、「@」符号が含まれていない電子メール・アドレスを入力)。
    ブラウザに表示されたlogin.jspとサンプル・データ

    「Login」をクリックすると、エラー・メッセージを含むログイン・フォームが再表示されます。
    エラー・メッセージが表示されたlogin.jsp

    検証をパスするデータを入力してみます。「Login」をクリックすると、成功ページが表示されます。
    入力データが表示されたsuccess.jsp

関連項目

これで、NetBeans IDEでのStrutsフレームワーク入門は終わりです。このドキュメントでは、Strutsフレームワークを使用してNetBeans IDEで単純なWeb MVCアプリケーションを構築する方法を示し、Webアプリケーション開発用のIDEのインタフェースを紹介しました。JSPページ内でStrutsタグを使用する方法、StrutsActionForm Beanに一時的にデータを保持する方法、およびStrutsActionオブジェクトを使用して転送ロジックを実装する方法も示しました。また、ログイン失敗に対する警告メッセージの設定など、アプリケーションに単純な検証を実装する方法も示します。

関連するチュートリアルについては、次のリソースを参照してください。

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2017, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo