// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Spring Web MVC入門
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Spring Web MVC入門 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Spring Web MVC入門

このドキュメントでは、link:http://www.springframework.org/[+Spring Framework+]を使用して、単純なWeb link:http://www.oracle.com/technetwork/articles/javase/index-142890.html[+MVC+]アプリケーションを構築する方法を説明します。このアプリケーションでは、ユーザーが自分の名前をテキスト・フィールドに入力して「OK」をクリックすると、名前が返され、2ページ目に挨拶メッセージとともにその名前を表示できます。

Spring Frameworkはポピュラなオープン・ソース・アプリケーション・フレームワークで、Java EE開発に役立ちます。このフレームワークはコンテナ、コンポーネント管理フレームワーク、およびWebユーザー・インタフェース、トランザクション、持続性のためのスナップイン・サービス・セットから構成されます。Spring Frameworkの一部はSpring Web MVCです。これはWebアプリケーション作成用の拡張可能なMVCフレームワークです。

IDEには、Spring Framework 4.xおよび3.xに対するサポートが組み込まれています。フレームワーク・ライブラリはIDEにパッケージ化されており、フレームワークが選択されると、プロジェクト・クラスパスに自動的に追加されます。また、Spring Web MVC`DispatcherServlet`の命名やマッピングなどの構成設定が用意されています。JSTLライブラリは、プロジェクト作成時にオプションで登録できます。Spring XML Bean構成ファイルのサポートも用意されており、これには次の機能が含まれます。

* *コードの補完*。Spring XML構成ファイル内のJavaクラスやBean参照に対して起動される。
* *ナビゲーション*。Spring Bean定義に含まれるJavaクラスやプロパティのハイパーリンクや、他のSpring Bean参照へのハイパーリンク。
* *リファクタリング*。Spring XML構成ファイル内のJavaクラスへの参照の名前の変更。

Spring Frameworkの詳細は、link:http://www.springsource.org/[+http://www.springsource.org/+]を参照してください。Spring Frameworkアーティファクトの動作方法と、アプリケーション内の他のオブジェクトとの連携方法に関するさらに詳しい説明は、link:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/[+Spring Frameworkリファレンス・ドキュメント+]またはlink:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/[+Spring Framework APIドキュメント+]を参照してください。


image::images/netbeans-stamp-80-74-73.png[title="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます"]


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

|===
|ソフトウェアまたはリソース |必須バージョン 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2、7.3、7.4、8.0、Java EE 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit (JDK)+] |バージョン7または8 

|link:http://glassfish.dev.java.net/public/downloadsindex.html[+GlassFishサーバー+] |3.x、4.x 
|===

*注意: *

* IDEのJavaインストール版では、IDEとともにGlassFishサーバーをインストールして登録することもできます。
* プロジェクトを、正常に機能するソリューションと比較する必要がある場合は、link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%2520Web%252FHelloSpring69.zip[+サンプル・アプリケーションをダウンロード+]できます。


[[setting]]
== Spring Web MVCサポートを使用した新規プロジェクトの設定

* <<creating,Spring Web MVCスケルトン・プロジェクトの作成>>
* <<running,スケルトン・プロジェクトの実行>>


[[creating]]
=== Spring Web MVCスケルトン・プロジェクトの作成

Spring Frameworkを使用し、Webアプリケーションの新規プロジェクトを次のように作成します。

1. IDEの「ファイル」メニューから「新規プロジェクト」([Ctrl]-[Shift]-[N]、Macの場合は[⌘]-[Shift]-[N])を選択します。「Java Web」カテゴリを選択し、「プロジェクト」で「Webアプリケーション」を選択します。「次」をクリックします。
2. 「プロジェクト名」に「*HelloSpring*」と入力します。「次」をクリックします。
3. このチュートリアルではlink:http://jcp.org/en/jsr/detail?id=299[+JSR-299+]仕様を使用しないため、ステップ3の「サーバーと設定」の「コンテキストと依存性の注入を有効にする」オプションは無効にします。
4. 「サーバー」ドロップダウン・リストで「GlassFish Server」が選択されていることを確認します。「次」をクリックします。

Java EEのバージョンは、選択したサーバーのバージョンによって異なります。選択したサーバーがGlassFish Server 4.0の場合、デフォルトJava EEバージョンはJava EE 7 Webです。

5. ステップ4の「フレームワーク」パネルで、「Spring Web MVC」を選択します。
6. 「Springライブラリ」ドロップダウン・リストで*「Spring Framework 3.x」*を選択します。
image::images/frameworks-window.png[title="「フレームワーク」パネルに表示された「Spring Web MVC」"]

IDEではSpring 4.xライブラリをプロジェクトに追加できますが、このチュートリアルではSpring 4.xでサポートされていないSimpleFormControllerを使用します。また、Spring Web MVCを選択すると、デフォルトでプロジェクト作成時にJSTL (JavaServer Pages Standard Tag Library)ライブラリがクラスパスに追加されます。このチュートリアルではJSTLは必要ないため、このオプションの選択を解除します(上のスクリーンショットを参照)。

7. 「構成」タブをクリックすると、このウィザードでSpring Dispatcherサーブレットの名前とマッピングを指定できます。
image::images/spring-configuration.png[title="「構成」タブでのSpring Dispatcherサーブレットの名前とマッピングの指定"]
8. 「終了」をクリックします。IDEでアプリケーション全体のプロジェクトが作成されます。このプロジェクトには、すべてのメタデータに加え、「ファイル」ウィンドウ([Ctrl]-[2]、Macの場合は[⌘]-[2])から検査できる、プロジェクトのAntビルド・スクリプトが含まれます。テンプレート構造は「プロジェクト」ウィンドウ([Ctrl]-[1]、Macの場合は[⌘]-[1])から表示できます。また、IDEのエディタで`dispatcher-servlet.xml`、`applicationContext.xml`、`redirect.jsp`および`index.jsp`の4つのファイルがデフォルトで開きます。
9. 「プロジェクト」ウィンドウで新規プロジェクトの「ライブラリ」ノードを展開すると、Spring JARがプロジェクトのクラスパスに含まれていることが確認できます。
image::images/spring-libraries.png[title="プロジェクトの「ライブラリ」ノードに一覧表示されているSpring JAR"]


[[running]]
=== スケルトン・プロジェクトの実行

プロジェクト・ファイルになんらかの変更を加える前に、次のようにIDEで新規プロジェクトの実行を試します。

1. IDEのメイン・ツールバーにある「プロジェクトの実行」(image::images/run-project-btn.png[])をクリックします。GlassFishサーバーが実行されていない場合は、IDEが自動的にGlassFishサーバーを起動し、プロジェクトをコンパイルしてサーバーにデプロイします。出力内容は、IDEの出力ウィンドウ([Ctrl]-[4]、Macの場合は[⌘]-[4])に表示されます。生成された出力は、「`BUILD SUCCESSFUL`」のメッセージが表示されて完了します。
image::images/output.png[title="プロジェクト実行時の情報が表示された「出力」ウィンドウ"]
IDEのデフォルト・ブラウザが開始され、開始ページのビュー(`/WEB-INF/jsp/index.jsp`)からコンテンツが表示されます。
image::images/browser-output.png[title="ブラウザに表示された開始ページ出力"]

IDEでプロジェクトを実行すると、コンパイルされたプロジェクトがサーバーにデプロイされ、デフォルトのブラウザで開かれます。また、IDEには「保存時にデプロイ」機能が用意されており、Webプロジェクトに対してデフォルトでアクティブ化されています。ファイルをエディタで保存すると、プロジェクトが自動的に再コンパイルされ、サーバーにデプロイされます。変更の確認は、ブラウザでページを単純にリフレッシュするのみで表示できます。

実行内容を理解するために、プロジェクトのデプロイメント・ディスクリプタ(`web.xml`)を調べることから始めます。このファイルをソース・エディタで開くには、「`WEB-INF`」>「`web.xml`」ノードを「プロジェクト」ウィンドウで右クリックし、「編集」を選択します。アプリケーションのデフォルトのエントリ・ポイントは「`redirect.jsp`」です。


[source,xml]
----

<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
----

`redirect.jsp`内には、すべてのリクエストを`index.htm`に向ける次のredirect文があります。


[source,java]
----

<% response.sendRedirect("index.htm"); %>
----

デプロイメント・ディスクリプタ内で、`*.htm`に一致するURLパターンのすべてのリクエストは、次のようにSpringのlink:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html[+`DispatcherServlet`+]にマップされます。


[source,xml]
----

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
----

dispatcherサーブレットの完全修飾名は、前述のとおり`org.springframework.web.servlet.DispatcherServlet`です。このクラスはSpringライブラリに含まれ、このライブラリはプロジェクトの作成時にプロジェクト・クラスパスに追加されています。「プロジェクト」ウィンドウでこのことを確認するには、「ライブラリ」ノードをドリルダウンします。`spring-webmvc-3.1.1.RELEASE.jar`を探し、「`org」>「springframework」>「web」>「servlet`」と展開して、`DispatcherServlet`を探します。

`DispatcherServlet`では、受信するリクエストが`dispatcher-servlet.xml`にある構成設定に基づいて処理されます。エディタでタブをクリックして、`dispatcher-servlet.xml`を開きます。次のコードを確認します。


[source,xml]
----

<bean id="urlMapping" class="org.springframework.web.servlet.handler.link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/handler/SimpleUrlHandlerMapping.html[+SimpleUrlHandlerMapping+]">
    <property name="mappings">
        <props>
            <prop key="/index.htm">indexController</prop>
        </props>
    </property>
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/InternalResourceViewResolver.html[+InternalResourceViewResolver+]"
      p:prefix="/WEB-INF/jsp/"
      p:suffix=".jsp" />

<bean name="indexController"
      class="org.springframework.web.servlet.mvc.link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/ParameterizableViewController.html[+ParameterizableViewController+]"
      p:viewName="index" />
----

このファイルには、`indexController`、`viewResolver`、および`urlMapping`の3つのBeansが定義されています。`DispatcherServlet`で、`index.htm`など「`*.htm`」と一致するリクエストが受信されると、リクエストに対応する`urlMapping`内のコントローラが検索されます。上記のコードに、`/index.htm`から`indexController`へのリンクを行う`mappings`プロパティがあります。

次に、実行時環境で`indexController`というBeanの定義が検索されます。このBeanは、スケルトン・プロジェクトによって必要なタイミングにあわせて提供されます。`indexController`は、link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/ParameterizableViewController.html[+`ParameterizableViewController`+]を拡張します。これがSpringで提供されるもう1つのクラスで、単純に表示を返すためのものです。上記のコードでは、`p:viewName="index"`で論理ビュー名が指定され、この名前の前に`/WEB-INF/jsp/`、後ろに`.jsp`が付加されることで、`viewResolver`を使用して解決されます。これにより、実行時にアプリケーション・ディレクトリでファイルが特定されるようになり、開始ページのビュー(`/WEB-INF/jsp/index.jsp`)に応答できます。


[[overview]]
== アプリケーションの概要

作成するアプリケーションは、2つのJSPページ(link:http://www.oracle.com/technetwork/articles/javase/index-142890.html[+MVC+]の用語では_ビュー_とも表現)で構成されます。最初のビューには、ユーザー名の入力を求める入力フィールドがあるHTMLフォームが含まれます。2番目のビューは、ユーザー名を含む挨拶メッセージのみを表示するページです。

これらのビューは、アプリケーションへのリクエストを受信し、返すビューを判定する_コントローラ_によって管理されます。また、表示する必要がある情報をビューに渡します(_モデル_と呼ばれる)。このアプリケーションのコントローラは、`HelloController`と命名されています。

複雑なWebアプリケーションの場合、ビジネス・ロジックは直接コントローラには格納されません。かわりに、コントローラでなんらかのビジネス・ロジックの実行が必要になったときに、_service_という名前の別のエンティティがコントローラによって使用されます。このアプリケーションでは、ビジネス・ロジックは挨拶メッセージの処理の実行に限定されているため、この目的にあわせて`HelloService`を作成します。


== サービスの実装

これまでの手順で、環境を適切に設定できたため、次は必要に応じてスケルトン・プロジェクトを拡張します。`HelloService`クラスの作成から始めます。

1. IDEのメイン・ツールバーにある「新規ファイル」(image::images/new-file-btn.png[])ボタンをクリックします。または、[Ctrl]-[N] (Macの場合は[⌘]-[N])を押します。
2. 「*Java*」カテゴリを選択し、「*Javaクラス*」を選択して、「次」をクリックします。
3. 表示された新規Javaクラス・ウィザードで、「クラス名」に「*HelloService*」、「パッケージ」に「*service*」と入力して、このクラスの新規パッケージを作成します。
4. 「終了」をクリックします。IDEによって新しいクラスが生成され、エディタで開きます。

`HelloService`クラスで実行されるサービスは、ごく基本的なものです。名前をパラメータとして取得し、その名前を格納する`String`を処理して返します。エディタで、クラスに次の`sayHello()`メソッドを作成します(*太字*で表示)。


[source,java]
----

public class HelloService {

    *public static String sayHello(String name) {
        return "Hello " + name + "!";
    }*
}
----


[[controller]]
== コントローラとモデルの実装

link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html[+`SimpleFormController`+]を使用して、ユーザー・データを処理し、どのビューを返すかを判定できます。

*注意: *SimpleFormControllerはSpring 3.xで非推奨になっています。このチュートリアルでは、デモの目的でのみ使用されます。ただし、注釈の付いたコントローラをXMLファイルのかわりに使用してください。

1. [Ctrl]-[N] (Macの場合は[⌘]-[N])を押して、新規ファイル・ウィザードを開きます。「カテゴリ」で「*Spring Framework*」を選択します。または、「ファイル・タイプ」で「*単純フォーム・コントローラ*」を選択します。
image::images/simple-form-controller.png[title="NetBeans IDEで提供される様々なSpringアーティファクト用のテンプレート"]
[tips]#NetBeans IDEには、「Spring XML構成ファイル」、「link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/AbstractController.html[+`抽象コントローラ`+]」、「link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html[+`単純フォーム・コントローラ`+]」など、様々なSpringアーティファクト用のテンプレートが用意されています。#
2. 「次」をクリックします。
3. クラスに「*HelloController*」という名前を付け、「パッケージ」テキスト・フィールドに「*controller*」と入力してクラスの新規パッケージを作成します。「終了」をクリックします。IDEによって新しいクラスが生成され、エディタで開きます。
4. クラス・テンプレートのデフォルトで表示する取得メソッドのコメントを解除し、コントローラ・プロパティを指定します。コード・スニペットのコメントを解除するには、次のイメージに示すようにコードを強調表示して、[Ctrl]-[/] (Macの場合は[⌘]-[/])を押します。
image::images/comment-out.png[title="コード・スニペットを強調表示した後の[Ctrl]-[/]の押下によるコメントの切替え"]
[tips]#[Ctrl]-[/] (Macの場合は[⌘]-[/])を押して、エディタ内のコメントを切り替えます。#
5. 次のように変更を加えます(*太字*で表示)。

[source,java]
----

public HelloController() {
    link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/BaseCommandController.html#setCommandClass(java.lang.Class)[+setCommandClass+](*Name*.class);
    link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/BaseCommandController.html#setCommandName(java.lang.String)[+setCommandName+]("*name*");
    link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html#setSuccessView(java.lang.String)[+setSuccessView+]("*hello*View");
    link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html#setFormView(java.lang.String)[+setFormView+]("*name*View");
}
----

`FormView`を設定することで、フォームの表示に使用されるビュー名を設定できます。これは、ユーザーが自分の名前を入力できるテキスト・フィールドがあるページです。同様に、`SuccessView`を設定することによって、送信の成功時に表示されるべきビュー名を設定できます。`CommandName`の設定時、モデル内でコマンド名を定義します。この場合、このコマンドは、バインドされるリクエスト・パラメータを持つフォーム・オブジェクトです。`CommandClass`を設定することで、コマンド・クラス名を設定できます。このクラスのインスタンスは、各リクエストと同時に生成および検証されます。

エラーのフラグが`setCommandClass()`メソッド内の`Name`に表示されます。

image::images/set-command-class.png[title="setCommandClass()に表示されたエラー・バッジ"]

ここで、各リクエストの情報を保持するための単純なBeanとして、`Name`クラスを作成する必要があります。

6. 「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「新規」>「Javaクラス」を選択します。新規Javaクラス・ウィザードが表示されます。
7. 「クラス名」に「*Name*」と入力し、「パッケージ」のドロップダウン・リストから「*controller*」を選択します。
8. 「終了」をクリックします。`Name`クラスが作成され、エディタで開きます。
9. `Name`クラスに対し、`value`という名前のフィールドを作成し、このフィールドのアクセッサ・メソッド(取得メソッドと設定メソッド)を作成します。まず、`value`フィールドを宣言します。

[source,java]
----

public class Name {

    *private String value;*

}
----

すばやく「`private`」と入力するには、「`pr`」と入力してから[Tab]を押します。「`private`」アクセス修飾子が自動的に行に追加されます。これは、エディタのコード・テンプレートの使用例です。コード・テンプレートの一覧を確認するには、「ヘルプ」>「キーボード・ショートカット・カード」を選択します。


IDEでアクセッサ・メソッドが作成されます。エディタ内で`value`を右クリックし、「コードを挿入」を選択するか、[Alt]-[Insert] (Macの場合は[Ctrl]-[I])を押します。ポップアップ・メニューで、「取得メソッドおよび設定メソッド」を選択します。
image::images/generate-code.png[title="「コードを生成」ポップアップ・メニューから使用できるアクセッサ・メソッドの設定"]
10. 表示されるダイアログで、「`value: String`」オプションを選択し、「OK」をクリックします。`getValue()`および`setValue()`メソッドが`Name`クラスに追加されます。

[source,java]
----

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}
----
11. [Ctrl]-[Tab]を押し、`HelloController`を選択して、`HelloController`クラスに切り替えます。`Name`クラスが存在するようになったため、以前のエラー・バッジは表示されなくなります。
12. `doSubmitAction()`メソッドを削除し、link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html#setFormView(java.lang.String)[+`onSubmit()`+]メソッドのコメントを解除します。`onSubmit()`メソッドを使用し、ここで必要な独自の`ModelAndView`を作成できます。次の変更を加えます。

[source,java]
----

@Override
protected ModelAndView onSubmit(
            HttpServletRequest request,
            HttpServletResponse response,
            Object command,
            BindException errors) throws Exception {

        Name name = (Name) command;
        ModelAndView mv = new ModelAndView(getSuccessView());
        mv.addObject("helloMessage", helloService.sayHello(name.getValue()));
        return mv;
}
----
上記に示すとおり、`command`は`Name`オブジェクトにキャストされます。`ModelAndView`のインスタンスが作成され、成功ビューが`SimpleFormController`の取得メソッドを使用して取得されます。最後に、モデルにデータが取り込まれます。このモデル内の唯一の項目は、以前の手順で作成した`HelloService`から取得された挨拶メッセージです。`addObject()`メソッドを使用し、`helloMessage`という名前のモデルに挨拶メッセージを追加します。
13. エディタ内を右クリックし、「インポートを修正」([Ctrl]-[Shift]-[I]、Macの場合は[⌘]-[Shift]-[I])を選択してインポート・エラーを修正します。
image::images/fix-imports70.png[title="[Ctrl]-[Shift]-[I]の押下によるファイルのインポートの修正"]

*注意:*「すべてのインポートを修正」ダイアログ・ボックスで* ``org.springframework.validation.BindException`` *と* ``org.springframework.web.servlet.ModelAndView`` *が選択されていることを確認してください。

14. 「OK」をクリックします。次のインポート文がファイルの最初に追加されます。

[source,java]
----

import link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/ModelAndView.html[+org.springframework.web.servlet.ModelAndView+];
----
APIドキュメントで説明されているように、このクラスは「ハンドラによって返されるモデルとビューを示しており、`DispatcherServlet`によって解決されます。このビューは、`ViewResolver`によって解決される必要がある`String`ビュー名か、または直接指定できる`View`オブジェクトの形を取ることができます。モデルは`Map`であるため、名前をキーとする複数のオブジェクトが使用できます」。

この時点では、クラスで`HelloService`クラスを特定することも、`sayHello()`メソッドを使用することもできないため、すべてのエラーが修正されるわけではありません。
15. `HelloController`内で`HelloService`という名前のprivateフィールドを宣言します。

[source,java]
----

private HelloService helloService;
----
次に、このフィールドのpublic取得メソッドを作成します。

[source,java]
----

public void setHelloService(HelloService helloService) {
    this.helloService = helloService;
}
----
最後に、エディタを右クリックし、「インポートを修正」を選択します([Ctrl]-[Shift]-[I]、Macの場合は[⌘]-[Shift]-[I])。次の文がファイルの最初に追加されます。

[source,java]
----

import service.HelloService;
----
今度はすべてのエラーが修正されるはずです。
16. `HelloService`を`applicationContext.xml`に登録します。`applicationContext.xml`をエディタで開き、次のBean宣言を入力します。

[source,java]
----

<bean name="helloService" class="service.HelloService" />
----
IDE内のSpringサポートには、Bean参照と同様に、JavaクラスのXML構成ファイル内でのコード補完が含まれています。コード補完を呼び出すには、エディタでの作業時に[Ctrl]-[Space]を押します。
image::images/code-completion.png[title="[Ctrl]-[Space]を押して呼び出されたコード補完"]
17. `HelloController`を`dispatcher-servlet.xml`に登録します。`dispatcher-servlet.xml`をエディタで開き、次のBean宣言を入力します。

[source,java]
----

<bean class="controller.HelloController" p:helloService-ref="helloService"/>
----


[[view]]
== ビューの実装

このプロジェクトのビューを実装するには、2つのJSPページを作成する必要があります。1つ目は`nameView.jsp`で、開始ページとして機能し、ユーザーはここに名前を入力できます。もう1つのページは`helloView.jsp`で、入力された名前を含む挨拶メッセージがここに表示されます。最初に`helloView.jsp`を作成します。

1. 「プロジェクト」ウィンドウで「WEB-INF」>「`jsp`」ノードを右クリックし、「新規」>「JSP」を選択します。新規JSPファイル・ウィザードが開きます。ファイルに「*helloView*」という名前を付けます。
2. 「終了」をクリックします。新規JSPページが`jsp`フォルダに作成され、エディタに表示されます。
3. エディタで、ファイルのtitleを「`Hello`」に変更し、`HelloController`で作成される`ModelandView`オブジェクトの`helloMessage`を取得するよう、出力メッセージを変更します。

[source,xml]
----

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>*Hello*</title>
</head>
<body>
    <h1>*${helloMessage}*</h1>
</body>

----
4. もう1つのJSPページを<<create-jsp,上記>>と同じ方法で作成し、名前は「`nameView`」とします。
5. エディタで、次のSpringタグ・ライブラリ宣言を`nameView.jsp`に追加します。

[source,java]
----

<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>
----
これにより、link:http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html[+Springタグ・ライブラリ+]がインポートされます。このライブラリには、ビューをJSPページとして実装する際に役立つタグが格納されます。
6. 「`Enter your name`」の入力を読み取るように、`<title>`タグと`<h1>`タグの内容を変更します。
7. `<h1>`タグの下に次のコードを入力します。

[source,xml]
----

<spring:nestedPath path="name">
    <form action="" method="post">
        Name:
        <spring:bind path="value">
            <input type="text" name="${status.expression}" value="${status.value}">
        </spring:bind>
        <input type="submit" value="OK">
    </form>
</spring:nestedPath>

----
link:http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html#spring.tld.bind[+spring:bind+]を使用することで、Beanプロパティをバインドできます。bindタグによってバインド・ステータスと値が提供され、これが入力フィールドの名前および値として使用されます。この方法で、フォームの送信時に、送信された値の抽出方法がSpringで識別されます。ここで、コマンド・クラス(`controller.Name`)に`value`プロパティが追加されるため、「`path`」を「`value`」に設定します。

link:http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html#spring.tld.nestedPath[+spring:nestedPath+]を使用することで、指定したパスをBeanの前に付加できます。そのため、上記のように`spring:bind`と一緒に使用すると、Beanへのパスは`name.value`になります。再コール時、`HelloController`コマンドの名前は`name`になります。そのため、ページ範囲内の`name`という名前のBeanの`value`プロパティがこのパスから参照されます。
8. アプリケーションの相対エントリ・ポイントを変更します。現在、プロジェクトのエントリ・ポイントは依然として`index.htm`であり、前述の<<running,スケルトン・プロジェクトの実行>>にあるとおり、このページから`WEB-INF/jsp/index.jsp`にリダイレクトされます。プロジェクトのデプロイおよび実行時のエントリ・ポイントを指定できます。「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログが表示されます。「カテゴリ」で「実行」を選択します。「相対URL」フィールドに「`/hello.htm`」と入力し、「OK」をクリックします。

この時点では、`hello.htm`から`HelloController`へのマッピングがどこにあるか疑問に感じるかもしれません。`urlMapping` Beanへのマッピングは、スケルトン・プロジェクトの開始ページである`index.htm`の場合と同様に、まだ追加していません。この処理は、次のようにBeanを`dispatcher-servlet.xml`に定義することで実現できるSpringの機能を使用すれば可能になります。

[source,java]
----

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
----
このBeanには、このファイルに登録されたすべてのコントローラに対してURLマッピングを自動的に作成する役割があります。コントローラ(ここでは`controller.HelloController`)の完全修飾クラス名が取得され、パッケージ名と`Controller`接尾辞が取り除かれて、その結果がURLマッピングに使用されます。そのため、`HelloController`の場合は`hello.htm`というマッピングが作成されます。しかしこの機能は、`ParameterizableViewController`のようなSpring Frameworkに含まれるコントローラには機能しません。これらには、明示的なマッピングが必要になります。
9. 「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「実行」を選択します。これにより、プロジェクトがコンパイル、デプロイおよび実行されます。デフォルト・ブラウザが開き、`hello.htm`がプロジェクトの`nameView`として表示されます。
image::images/name-view.png[title="ブラウザでのnameViewの表示"]
テキスト・フィールドに名前を入力し、[Enter]を押します。`helloView`が次のように挨拶メッセージと一緒に表示されます。
image::images/hello-view.png[title="ブラウザでのhelloViewの表示"]
link:/about/contact_form.html?to=3&subject=Feedback:%20Introduction%20to%20Spring[+ご意見をお寄せください+]



[[seeAlso]]
== 関連項目

これで、NetBeans IDEでのSpring Framework入門は終わりです。このドキュメントでは、Spring Frameworkを使用してNetBeans IDEで単純なWeb MVCアプリケーションを構築する方法をデモし、Webアプリケーション開発用のIDEインタフェースを紹介しました。

link:http://sites.google.com/site/springmvcnetbeans/step-by-step/[+NetBeansおよびGlassFishサーバーによるSpring Framework MVCアプリケーションの手順を追った開発+]などの他のNetBeans IDEチュートリアル全般を実行し、Spring Frameworkの学習を続けることをお薦めします。これはThomas Risbergによる公式なlink:http://static.springframework.org/docs/Spring-MVC-step-by-step/[+Spring Frameworkチュートリアル+]であり、Arulazi DhesiaseelanによってNetBeans IDEのために改訂されました。

Spring NetBeansモジュール機能の多くは、Webベース以外のSpring Frameworkアプリケーションにも適用できます。

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

* link:../../docs/web/framework-adding-support.html[+Webフレームワークのためのサポートの追加+]。NetBeans更新センターを使用してWebフレームワークのプラグインをインストールすることによるサポート追加方法を説明した基本ガイドです。
* link:jsf20-intro.html[+JavaServer Faces 2.0入門+]。JSF 2.0サポートを既存のプロジェクトに追加し、管理対象Beanを接続し、Faceletsテンプレートを利用する方法を説明しています。
