blob: a779209b4f736a2b4be7c23c8fdeb831dda0ecfb [file] [log] [blame]
//
// 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.
//
= Введение в веб-модель MVC Spring
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Введение в веб-модель MVC Spring - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Введение в веб-модель MVC Spring
В этом документе показано создание простого веб-приложения link:http://www.oracle.com/technetwork/articles/javase/index-142890.html[+MVC+] с помощью link:http://www.springframework.org/[+платформы Spring+]. В приложении пользователь может ввести свое имя в текстовом поле, и после нажатия кнопки "ОК" это имя отображается на второй странице вместе с приветствием.
Платформа Spring популярная платформа приложений с открытым кодом, предназначенная для упрощения разработки для J2EE. Она состоит из контейнера, платформы управления элементами и набора интегрируемых служб для веб-интерфейсов пользователя, транзакций и сохранения состояния. В состав платформы Spring входит Spring Web MVC расширяемая платформа MVC для создания веб-приложений.
В IDE реализована встроенная поддержка платформ Spring 4.x и 3.x. Библиотеки платформ упакованы в IDE и автоматически добавляются в путь к классу при выборе платформы. Предоставляются параметры настройки, например название и сопоставление Spring Web MVC `DispatcherServlet`. При создании проекта можно зарегистрировать библиотеку JSTL. Также предоставляется поддержка файлов настройки XML компонента, в том числе следующие функциональные возможности:
* *Автозавершение кода*. Вызывается в файлах настройки XML Spring для классов Java и ссылок на компоненты.
* *Переходы*. Гиперссылки на классы Java и свойства, указанные в определениях компонентов Spring, а также гиперссылки на описания других компонентов.
* *Реорганизация кода*. Переименование ссылок на классы Java в файлах настройки XML Spring.
Для получения дополнительных сведений об платформе Spring посетите веб-сайт link:http://www.springsource.org/[+http://www.springsource.org/+]. Более подробное пояснение поведения артефактов платформы Spring и их взаимодействия с другими объектами в приложении приведено на официальном сайтеlink:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/[+Spring Framework Reference Documentation+] и в документации link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/[+Spring Framework API+].
image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"]
*Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.*
|===
|Программное обеспечение или материал |Требуемая версия
|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |7.2, 7.3, 7.4, 8.0, Java EE
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |версия 7 или 8
|link:http://glassfish.dev.java.net/public/downloadsindex.html[+Сервер GlassFish+] |3.x, 4.x
|===
*Примечания:*
* При установке среды IDE Java позволяет дополнительно установить сервер GlassFish и зарегистрировать его в среде IDE.
* Если необходимо сравнить проект с работающим решением, можно link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%2520Web%252FHelloSpring69.zip[+загрузить демонстрационное приложение+].
[[setting]]
== Создание проекта с поддержкой веб-модели MVC Spring
* <<creating,Создание схемы проекта с поддержкой веб-модели MVC Spring>>
* <<running,Выполнение схемы проекта>>
[[creating]]
=== Создание схемы проекта с поддержкой веб-модели MVC Spring
Начните с создания проекта веб-приложения с поддержкой платформы Spring.
1. Выберите New Project ("Создать проект") (Ctrl-Shift-N; &amp;#8984-Shift-N на Mac) из меню File ("Файл") среды IDE. Выберите категорию "Java Web", затем выберите проект "Веб-приложение". Нажмите кнопку "Далее".
2. В поле "Имя проекта" введите *HelloSpring*. Нажмите кнопку "Далее".
3. На третьем экране "Сервер и параметры настройки" отключите параметр "Enable Contexts and Dependency Injection", поскольку в данном учебном курсе не используется спецификация link:http://jcp.org/en/jsr/detail?id=299[+JSR-299+].
4. Убедитесь, что в разворачивающемся списке 'Сервер' выбран сервер GlassFish. Нажмите кнопку "Далее".
Версия Java EE зависит от версии выбранного сервера. Если выбран сервер GlassFish Server 4.0, в качестве версии Java EE по умолчанию указывается Java EE 7 Web.
. На четвертом экране мастера на панели "Frameworks" выберите "Spring Web MVC".
. Выберите *Spring Framework 3.x* в списке "Библиотека Spring".
image::images/frameworks-window.png[title="Spring Web MVC отображается на панели палтформы"]
Обратите внимание, что IDE позволяет добавить библиотеку Spring 4.x в проект, но в данном учебном курсе используется компонент SimpleFormController, не поддерживаемый на платформе Spring 4.x. Кроме того, если выбран вариант Spring Web MVC, следует помнить, что во время создания проекта в путь к классу по умолчанию добавляется библиотека JSTL (JavaServer Pages Standard Tag Library). Отключите этот параметр (как показано на снимке экрана), поскольку в этом учебном курсе не требуется JSTL.
. Выберите вкладку "Настройка" и обратите внимание, что в мастере можно настроить имя и отображение сервлета обработчика Spring.
image::images/spring-configuration.png[title="Укажите имя и сопоставление сервлета Spring Dispatcher на вкладке 'Конфигурация'"]
. Нажмите кнопку "Завершить". В результате создается проект для всего приложения, в т.ч. все метаданные, а также сценарий сборки проекта Ant, с которым можно ознакомиться в окне "Файлы" (сочетание клавиш CTRL+2; &amp;#8984+2 в Mac OS). Структуру шаблона можно просмотреть в окне "Проекты" (сочетание клавиш CTRL+1; &amp;#8984+1 в Mac OS). Также следует отметить, что по умолчанию в редакторе среды IDE открываются четыре файла: `dispatcher-servlet.xml`, `applicationContext.xml`, `redirect.jsp` и `index.jsp`.
. В окне 'Проекты' разверните узел 'Библиотеки' нового проекта и обратите внимание, что файлы JAR Spring включены в путь к классу проекта.
image::images/spring-libraries.png[title="Файлы JAR Spring указаны в узле 'Библиотеки' проекта"]
[[running]]
=== Выполнение схемы проекта
Перед изменением файлов проекта следует попытаться запустить созданный проект в среде IDE:
1. Нажмите кнопку 'Запустить проект' (image:images/run-project-btn.png[]) на главной панели инструментов IDE. В среде IDE автоматически запускается сервер GlassFish, если он не был запущен, проект компилируется и развертывается на сервере. Обратите внимание на данные, отображаемые в окне "Вывод" среды IDE (сочетание клавиш CTRL+4; &amp;#8984+4 в Mac OS). В конце этих данных отображается сообщение `BUILD SUCCESSFUL`.
image::images/output.png[title="В окне вывода отображаются сведения при запуске проекта"]
В среде IDE запускается браузер по умолчанию, и отображается содержимое представления страницы приветствия (`/WEB-INF/jsp/index.jsp`).
image::images/browser-output.png[title="Выходные данные страницы приветствия отображаются в браузере"]
При выполнении проекта в среде IDE он компилируется и развертывается на сервере, а затем открывается в браузере по умолчанию. Более того, среда IDE предоставляет возможность "Развертывание при сохранении", которая включена по умолчанию для веб-проектов. При сохранении файлов в редакторе проект автоматически компилируется и развертывается на сервере. Для просмотра изменений достаточно просто обновить страницу в браузере.
Ключ к пониманию произошедших событий представлен в дескрипторе развертывания проекта (`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`:
[source,java]
----
<% response.sendRedirect("index.htm"); %>
----
Обратите внимание, что в дескрипторе развертывания все шаблоны URL-адресов, соответствующие выражению `*.htm` отображаются на link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html[+`DispatcherServlet`+] Spring.
[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>
----
Полностью определенное имя сервлета диспетчера сервлета `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`. Когда `DispatcherServlet` получает запрос, соответствующий выражению `*.htm`, например, `index.htm`, выполняется поиск контроллера внутри `urlMapping`, способного обработать этот запрос. Выше можно заметить, что существует свойство `mappings`, связывающее `/index.htm` с `indexController`.
Среда выполнения выполняет поиск определения компонента `indexController`, предоставляемого схемой проекта. Обратите внимание, что класс `indexController` расширяет класс link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/ParameterizableViewController.html[+`ParameterizableViewController`+]. Это еще один класс инфраструктуры Spring, который просто возвращает представление. Также обратите внимание, что `p:viewName="index"` указывает логическое имя представления, которое разрешается с помощью `viewResolver` путем добавления `/WEB-INF/jsp/` слева и добавления `.jsp` справа. Это позволяет среде выполнения найти файл в папке приложения и предоставить в ответ представление страницы приветствия (`/WEB-INF/jsp/index.jsp`).
[[overview]]
== Обзор приложения
Создаваемое приложение состоит из двух страниц JSP (которые называются _представлениями_ в терминологии link:http://www.oracle.com/technetwork/articles/javase/index-142890.html[+MVC+]). Первое представление содержит форму HTML с полем, в которое пользователь вводит свое имя. Второе представление — страница, на которой отображается приветственное сообщение с именем пользователя.
Представления управляются _контроллером_, который получает запросы к приложению и принимает решение, какие представления вернуть. Также он передает в представления информацию, которая требуется для их отображения (она называется _моделью_). Контроллер этого приложения называется `HelloController`.
В сложном веб-приложении бизнес-логика не размещается непосредственно в контроллере. Вместо этого контроллером используется другой объект _служба_ при каждом обращении к бизнес-логике. В этом приложении бизнес-логика ограничена обработкой приветственного сообщения, и для этой цели создается служба `HelloService`.
== Реализация службы
Теперь, после проверки правильности настроек среды, можно начать расширение схемы проекта в соответствии с имеющимися требованиями. Начните с создания класса `HelloService`.
1. Нажмите кнопку 'Создать файл' (image:images/new-file-btn.png[]) на панели инструментов IDE. качестве альтернативы нажмите Ctrl-N; ⌘-N в Mac.)
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 (⌘-N в Mac). Выберите категорию *Spring Framework* и тип файла *Simple Form Controller*.
image::images/simple-form-controller.png[title="IDE NetBeans обеспечивает шаблоны для различных артефактов Spring"]
[tips]#IDE NetBeans обеспечивает шаблоны для различных артефактов Spring, включая файл конфигурации Spring XML, link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/AbstractController.html[+`AbstractController`+] и link:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html[+`SimpleFormController`+].#
. Нажмите кнопку "Далее".
. Назовите класс *HelloController* и создайте для него новый пакет, для этого введите в поле "Package" текст *controller*. Нажмите кнопку "Завершить". В среде IDE создается и открывается в редакторе новый класс.
. Укажите свойства контроллера, раскомментировав методы установки, отображаемые шаблоном класса по умолчанию. Чтобы раскомментировать фрагмент кода, выделите его, как показано на рисунке, и нажмите сочетание клавиш CTRL+/ (&amp;#8984+/ в Mac OS).
image::images/comment-out.png[title="Выделите фрагменты кода, затем нажмите Ctrl-/ для переключения комментариев"]
[tips]#Нажатие сочетания клавиш CTRL+/ (&amp;#8984+/ в Mac OS) переключает комментарии в редакторе.#
. Внесите следующие изменения (показаны *полужирным шрифтом*).
[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` определяет имя класса команды. Экземпляр этого класса заполняется и проверяется на допустимость при каждом запросе.
Обратите внимание, что для `Name` в методе `setCommandClass()` отображается ошибка:
image::images/set-command-class.png[title="Метка ошибки отображается для setCommandClass()"]
Требуется создать класс `Name` в качестве простого компонента, хранящего данные каждого запроса.
. В окне 'Проекты', щелкните правой кнопкой мыши узел проекта и выберите 'Создать' > 'Класс Java'. Отображается мастер создания класса Java.
. Введите имя класса *Name* и выберите в выпадающем списке пакет *controller*.
. Нажмите кнопку "Завершить". Класс `Name` будет создан и открыт в редакторе.
. В классе `Name` создайте поле `value`, затем создайте методы доступа (т.е. методы получения и установки) для этого поля. Сначала объявите поле `value`:
[source,java]
----
public class Name {
*private String value;*
}
----
Чтобы быстро ввести "`private`", можно ввести "`pr`" и затем нажать клавишу TAB. Автоматически добавляется модификатор доступа "`private`". Это пример использования шаблонов кода редактора. Полный список шаблонов кода можно просмотреть, выбрав в меню "Справка" пункт "Таблица сочетаний клавиш".
В среде IDE предусмотрена возможность автоматического создания методов доступа. В редакторе щелкните правой кнопкой мыши в `value` и выберите 'Вставить код' (или нажмите Alt-Insert; Ctrl-I в Mac). Во всплывающем меню выберите пункт "Методы получения и установки".
image::images/generate-code.png[title="Всплывающее меню создания кода позволяет настроить методы доступа"]
. В диалоговом окне выберите параметр `value : String` и нажмите кнопку "ОК". Методы `getValue()` и `setValue()` добавляются к классу `Name`:
[source,java]
----
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
----
. Нажмите сочетание клавиш CTRL+TAB и выберите `HelloController`, чтобы переключиться обратно к классу `HelloController`. Обратите внимание, что значок ошибки исчез, поскольку класс `Name` теперь существует.
. Удалите метод `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`.
. Исправьте ошибки импорта, щелкнув правой кнопкой мыши в редакторе и выбрав 'Исправить ошибки' (Ctrl-Shift-I; ⌘-Shift-I в Mac).
image::images/fix-imports70.png[title="Нажмите Ctrl-Shift-I, чтобы исправить выражения импорта в файле"]
*Примечание.* Убедитесь, что * ``org.springframework.validation.BindException`` * и * ``org.springframework.web.servlet.ModelAndView`` * выбраны в диалоговом окне 'Исправить все выражения импорта'.
. Нажмите кнопку "ОК". В начало файла добавляется следующий оператор импорта:
[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`. Представление может принимать форму имени представления `String`, которое должно быть разрешено объектом `ViewResolver`; в качестве альтернативы объект `View` может быть указан непосредственно. Модель — это объект `Map`, что позволяет использовать несколько объектов, выбираемых по имени."
Обратите внимание, что на данном этапе исправлены не все ошибки, поскольку класс по-прежнему не может определить класс `HelloService` и использовать его метод `sayHello()`.
. Внутри `HelloController` объявите частное поле `HelloService`:
[source,java]
----
private HelloService helloService;
----
Затем создайте для поля общедоступный метод установки:
[source,java]
----
public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}
----
Наконец, щелкните правой кнопкой мыши в редакторе и выберите 'Исправить выражения импорта' (Ctrl-Shift-I; ⌘-Shift-I в Mac). В начало файла добавляется следующий оператор импорта:
[source,java]
----
import service.HelloService;
----
Все ошибки исправлены.
. Зарегистрируйте `HelloService` в файле `applicationContext.xml`. Откройте в редакторе файл `applicationContext.xml` и введите следующее определение компонента:
[source,java]
----
<bean name="helloService" class="service.HelloService" />
----
В состав поддержки Spring в среде IDE входит автозавершение кода в файлах настройки XML для классов Java и ссылок на компоненты. Для вызова автозавершения кода нажмите сочетание клавиш CTRL+ПРОБЕЛ в редакторе:
image::images/code-completion.png[title="Автозавершение кода вызывается при нажатии Ctrl-Space"]
. Зарегистрируйте `HelloController` в файле `dispatcher-servlet.xml`. Откройте в редакторе файл `dispatcher-servlet.xml` и введите следующее определение компонента:
[source,java]
----
<bean class="controller.HelloController" p:helloService-ref="helloService"/>
----
[[view]]
== Реализация представлений
Для реализации представлений в проекте требуется создать две страницы JSP. Первая из них, `nameView.jsp`, служит страницей приветствия и позволяет пользователю ввести имя. На второй, `helloView.jsp`, отображается приветственное сообщение с введенным именем. Сначала создайте `helloView.jsp`.
1. В окне 'Проекты' щелкните правой кнопкой мыши узел WEB-INF > `jsp` и выберите 'Создать' > JSP. Откроется мастер "New JSP File". Введите имя файла *helloView*.
2. Нажмите кнопку "Завершить". Страница JSP создается в папке `jsp` и открывается в редакторе.
3. В редакторе измените заголовок файла на `Hello` и измените выходное сообщение для получения `helloMessage` объекта `ModelandView`, созданного в `HelloController`.
[source,xml]
----
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>*Hello*</title>
</head>
<body>
<h1>*${helloMessage}*</h1>
</body>
----
. <<create-jsp,Тем же способом>> создайте вторую страницу JSP и назовите ее `nameView`.
. В редакторе добавьте следующее определение библиотеки тегов 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.
. Измените содержимое тегов `<title>` и `<h1>` на `Enter Your Name`.
. После тега `<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+] позволяет привязать свойство компонента. Тег привязки обеспечивает состояние и значение привязки, которые используются в качестве имени и значения поля ввода. Таким образом, при передаче формы платформе 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+] позволяет добавить к компоненту слева определенный путь. Поэтому при использовании вместе с `spring:bind` путь к компоненту становится равным `name.value`. Как уже указывалось, имя команды `HelloController` — `name`. Поэтому этот путь ссылается на свойство `value` компонента `name` в контексте страницы.
. Измените относительную точку входа для приложения. В настоящий момент точка входа по-прежнему `index.htm`, что в соответствии с разделом <<running,Выполнение схемы проекта>> перенаправляется на `WEB-INF/jsp/index.jsp`. Можно указать точку входа для проекта после его развертывания и запуска. В окне 'Проекты', щелкните правой кнопкой мыши узел проекта и выберите 'Свойства'. Открывается диалоговое окно "Свойства проекта". В области "Категории" выберите "Выполнить". В поле "Относительный URL-адрес" введите `/hello.htm` и нажмите кнопку "ОК".
Возникает вопрос: где же располагается отображение `hello.htm` на `HelloController`? Отображение не добавлялось к компоненту `urlMapping`, как в случае страницы приветствия схемы проекта `index.htm`. Такая возможность обеспечивается средствами автоматизации платформы Spring, предоставляемыми следующим определением компонента `dispatcher-servlet.xml`:
[source,java]
----
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
----
Этот компонент отвечает за автоматическое создание отображения URL-адресов для всех зарегистрированных в файле контроллеров. Из полностью определенного имени контроллера данном случае `controller.HelloController`) удаляется имя пакета и суффикс `Controller`, и затем результат используется как образец URL-адреса. Таким образом, для `HelloController` создается отображение `hello.htm`. Это средство, однако, не срабатывает для контроллеров, включенных в платформу Spring, например, `ParameterizableViewController`. Для них требуется явное отображение.
. В окне 'Проекты' щелкните правой кнопкой мыши узел проекта и выберите 'Выполнить'. Проект компилируется, развертывается и выполняется. Открывается браузер по умолчанию и отображается `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]]
== Дополнительные сведения
На этом завершается введение в платформу Spring в IDE NetBeans. В этом документе описывается создание простого веб-приложения MVC в IDE NetBeans с помощью платформы Spring и описывается интерфейс IDE для разработки веб-приложений.
Пользователям рекомендуется продолжить изучение платформы Spring путем изучения других учебных курсов в IDE NetBeans, таких как link:http://sites.google.com/site/springmvcnetbeans/step-by-step/[+Пошаговая разработка приложения MVC платформы Spring с помощью NetBeans и сервера GlassFish+]. Это официальный link:http://static.springframework.org/docs/Spring-MVC-step-by-step/[+учебный курс по платформе Spring+], разработанный Томасом Рисбергом (Thomas Risberg), адаптированный для IDE NetBeans Арулази Дхесиасилан (Arulazi Dhesiaseelan).
Многие возможности модуля Spring среды NetBeans могут применяться и в приложениях платформы Spring, не связанных с Интернетом.
Для ознакомления с другими связанными учебными курсами воспользуйтесь следующими материалами:
* link:../../docs/web/framework-adding-support.html[+Добавление поддержки веб-платформы+]. Базовое руководство, в котором описан процесс добавления поддержки путем установки подключаемого модуля платформы с помощью центра обновления NetBeans.
* link:jsf20-intro.html[+Введение в JavaServer Faces 2.0+]. Показано добавление поддержки JSF 2.0 к существующему проекту, связывание управляемых компонентов и использование шаблонов фейслетов.