blob: e0d3b527b3c7e3f06f953a084eeb6abbd28d8d0a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="description" content="An introduction to using the Spring Framework
in NetBeans IDE">
<meta name="keywords" content="NetBeans, IDE, integrated development environment,
Spring framework, frameworks, MVC, Model View Controller, web application">
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
<title>Введение в Spring Web MVC - учебный курс по IDE NetBeans</title>
</head>
<body>
<!--
Copyright (c) 2009, 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-->
<h1>Введение в веб-модель MVC Spring</h1>
<p>В этом документе показано создание простого веб-приложения <a href="http://www.oracle.com/technetwork/articles/javase/index-142890.html">MVC</a> с помощью <a href="http://www.springframework.org/">платформы Spring</a>. В приложении пользователь может ввести свое имя в текстовом поле, и после нажатия кнопки &quot;ОК&quot; это имя отображается на второй странице вместе с приветствием.</p>
<p>Платформа Spring &ndash; популярная платформа приложений с открытым кодом, предназначенная для упрощения разработки для J2EE. Она состоит из контейнера, платформы управления элементами и набора интегрируемых служб для веб-интерфейсов пользователя, транзакций и сохранения состояния. В состав платформы Spring входит Spring Web MVC &ndash; расширяемая платформа MVC для создания веб-приложений.</p>
<p>В IDE реализована встроенная поддержка платформ Spring 4.x и 3.x. Библиотеки платформ упакованы в IDE и автоматически добавляются в путь к классу при выборе платформы. Предоставляются параметры настройки, например название и сопоставление Spring Web MVC <code>DispatcherServlet</code>. При создании проекта можно зарегистрировать библиотеку JSTL. Также предоставляется поддержка файлов настройки XML компонента, в том числе следующие функциональные возможности:</p>
<ul>
<li><strong>Автозавершение кода</strong>. Вызывается в файлах настройки XML Spring для классов Java и ссылок на компоненты.</li>
<li><strong>Переходы</strong>. Гиперссылки на классы Java и свойства, указанные в определениях компонентов Spring, а также гиперссылки на описания других компонентов.</li>
<li><strong>Реорганизация кода</strong>. Переименование ссылок на классы Java в файлах настройки XML Spring.</li>
</ul>
<p>Для получения дополнительных сведений об платформе Spring посетите веб-сайт <a href="http://www.springsource.org/">http://www.springsource.org/</a>. Более подробное пояснение поведения артефактов платформы Spring и их взаимодействия с другими объектами в приложении приведено на официальном сайте<a href="http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/">Spring Framework Reference Documentation</a> и в документации <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/">Spring Framework API</a>.</p>
<p><strong>Содержание</strong></p>
<img alt="Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0">
<ul class="toc">
<li><a href="#setting">Создание проекта с поддержкой веб-модели MVC Spring</a>
<ul>
<li><a href="#creating">Создание схемы проекта с поддержкой веб-модели MVC Spring</a></li>
<li><a href="#running">Выполнение схемы проекта</a></li>
</ul></li>
<li><a href="#overview">Обзор приложения</a></li>
<li><a href="#service">Реализация службы</a></li>
<li><a href="#controller">Реализация контроллера и модели</a></li>
<li><a href="#view">Реализация представлений</a></li>
<li><a href="#seeAlso">Дополнительные сведения</a></li>
</ul>
<p><strong>Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.</strong></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Программное обеспечение или материал</th>
<th class="tblheader" scope="col">Требуемая версия</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">IDE NetBeans</a></td>
<td class="tbltd1">7.2, 7.3, 7.4, 8.0, Java EE</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Комплект для разработчика на языке Java (JDK)</a></td>
<td class="tbltd1">версия 7 или 8</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://glassfish.dev.java.net/public/downloadsindex.html">Сервер GlassFish</a></td>
<td class="tbltd1">3.x, 4.x</td>
</tr>
</tbody>
</table>
<p><strong class="notes">Примечания:</strong></p>
<ul>
<li>При установке среды IDE Java позволяет дополнительно установить сервер GlassFish и зарегистрировать его в среде IDE.</li>
<li>Если необходимо сравнить проект с работающим решением, можно <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%2520Web%252FHelloSpring69.zip">загрузить демонстрационное приложение</a>.</li>
</ul>
<h2 id="setting">Создание проекта с поддержкой веб-модели MVC Spring</h2>
<ul>
<li><a href="#creating">Создание схемы проекта с поддержкой веб-модели MVC Spring</a></li>
<li><a href="#running">Выполнение схемы проекта</a></li>
</ul>
<div class="indent">
<h3 id="creating">Создание схемы проекта с поддержкой веб-модели MVC Spring</h3>
<p>Начните с создания проекта веб-приложения с поддержкой платформы Spring.</p>
<ol>
<li>Выберите New Project (&quot;Создать проект&quot;) (Ctrl-Shift-N; &amp;#8984-Shift-N на Mac) из меню File (&quot;Файл&quot;) среды IDE. Выберите категорию &quot;Java Web&quot;, затем выберите проект &quot;Веб-приложение&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В поле &quot;Имя проекта&quot; введите <strong>HelloSpring</strong>. Нажмите кнопку &quot;Далее&quot;.</li>
<li>На третьем экране &quot;Сервер и параметры настройки&quot; отключите параметр &quot;Enable Contexts and Dependency Injection&quot;, поскольку в данном учебном курсе не используется спецификация <a href="http://jcp.org/en/jsr/detail?id=299">JSR-299</a>.</li>
<li>Убедитесь, что в разворачивающемся списке 'Сервер' выбран сервер GlassFish. Нажмите кнопку &quot;Далее&quot;.
<p>Версия Java EE зависит от версии выбранного сервера. Если выбран сервер GlassFish Server 4.0, в качестве версии Java EE по умолчанию указывается Java EE 7 Web.
</p></li>
<li>На четвертом экране мастера на панели &quot;Frameworks&quot; выберите &quot;Spring Web MVC&quot;.</li>
<li>Выберите <strong>Spring Framework 3.x</strong> в списке "Библиотека Spring". <br> <img alt="Spring Web MVC отображается на панели палтформы" class="margin-around b-all" src="../../../images_www/articles/80/web/spring/frameworks-window.png" title="Spring Web MVC отображается на панели палтформы">
<p class="alert">
Обратите внимание, что IDE позволяет добавить библиотеку Spring 4.x в проект, но в данном учебном курсе используется компонент SimpleFormController, не поддерживаемый на платформе Spring 4.x. Кроме того, если выбран вариант Spring Web MVC, следует помнить, что во время создания проекта в путь к классу по умолчанию добавляется библиотека JSTL (JavaServer Pages Standard Tag Library). Отключите этот параметр (как показано на снимке экрана), поскольку в этом учебном курсе не требуется JSTL. </p></li>
<li>Выберите вкладку &quot;Настройка&quot; и обратите внимание, что в мастере можно настроить имя и отображение сервлета обработчика Spring. <br> <img alt="Варианты настройки Spring" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/spring-configuration.png" title="Укажите имя и сопоставление сервлета Spring Dispatcher на вкладке &apos;Конфигурация&apos;"></li>
<li>Нажмите кнопку &quot;Завершить&quot;. В результате создается проект для всего приложения, в т.ч. все метаданные, а также сценарий сборки проекта Ant, с которым можно ознакомиться в окне &quot;Файлы&quot; (сочетание клавиш CTRL+2; &amp;#8984+2 в Mac OS). Структуру шаблона можно просмотреть в окне &quot;Проекты&quot; (сочетание клавиш CTRL+1; &amp;#8984+1 в Mac OS). Также следует отметить, что по умолчанию в редакторе среды IDE открываются четыре файла: <code>dispatcher-servlet.xml</code>, <code>applicationContext.xml</code>, <code>redirect.jsp</code> и <code>index.jsp</code>.</li>
<li>В окне 'Проекты' разверните узел 'Библиотеки' нового проекта и обратите внимание, что файлы JAR Spring включены в путь к классу проекта. <br> <img alt="Файлы JAR Spring указаны в узле &apos;Библиотеки&apos; проекта" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/spring-libraries.png" title="Файлы JAR Spring указаны в узле &apos;Библиотеки&apos; проекта">
</li>
</ol>
<h3 id="running">Выполнение схемы проекта</h3>
<p>Перед изменением файлов проекта следует попытаться запустить созданный проект в среде IDE:</p>
<ol>
<li>Нажмите кнопку 'Запустить проект' (<img alt="Кнопка &apos;Выполнить проект&apos;" src="../../../images_www/articles/72/web/spring/run-project-btn.png">) на главной панели инструментов IDE. В среде IDE автоматически запускается сервер GlassFish, если он не был запущен, проект компилируется и развертывается на сервере. Обратите внимание на данные, отображаемые в окне &quot;Вывод&quot; среды IDE (сочетание клавиш CTRL+4; &amp;#8984+4 в Mac OS). В конце этих данных отображается сообщение <code>BUILD SUCCESSFUL</code>. <br> <img alt="В окне вывода отображаются сведения при запуске проекта" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/output.png" title="В окне вывода отображаются сведения при запуске проекта"> <br> В среде IDE запускается браузер по умолчанию, и отображается содержимое представления страницы приветствия (<code>/WEB-INF/jsp/index.jsp</code>). <br> <img alt="Выходные данные страницы приветствия отображаются в браузере" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/browser-output.png" title="Выходные данные страницы приветствия отображаются в браузере" width="668"></li>
</ol>
<p class="tips">При выполнении проекта в среде IDE он компилируется и развертывается на сервере, а затем открывается в браузере по умолчанию. Более того, среда IDE предоставляет возможность &quot;Развертывание при сохранении&quot;, которая включена по умолчанию для веб-проектов. При сохранении файлов в редакторе проект автоматически компилируется и развертывается на сервере. Для просмотра изменений достаточно просто обновить страницу в браузере.</p>
<p>Ключ к пониманию произошедших событий представлен в дескрипторе развертывания проекта (<code>web.xml</code>). Чтобы открыть этот файл в редакторе исходного кода щелкните правой кнопкой мыши узел <code>WEB-INF</code> > <code>web.xml</code> в окне 'Проекты' и выберите 'Правка'. Точка входа для приложения по умолчанию — <code>redirect.jsp</code>:</p>
<div class="indent">
<pre class="examplecode">
&lt;welcome-file-list&gt;
&lt;welcome-file&gt;redirect.jsp&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;</pre>
</div>
<p>В файле <code>redirect.jsp</code> содержится оператор перенаправления, направляющий все запросы в <code>index.htm</code>:</p>
<div class="indent">
<pre class="examplecode">&lt;% response.sendRedirect(&quot;index.htm&quot;); %&gt;</pre>
</div>
<p>Обратите внимание, что в дескрипторе развертывания все шаблоны URL-адресов, соответствующие выражению <code>*.htm</code> отображаются на <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html"><code>DispatcherServlet</code></a> Spring.</p>
<div class="indent">
<pre class="examplecode">
&lt;servlet&gt;
&lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;
&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
&lt;url-pattern&gt;*.htm&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;</pre>
</div>
<p class="tips">Полностью определенное имя сервлета диспетчера сервлета <code>org.springframework.web.servlet.DispatcherServlet</code>. Это класс из библиотеки Spring, которая была добавлена в путь к классам проекта при его создании. Чтобы проверить это, разверните узел &quot;Библиотеки&quot; в окне &quot;Проекты&quot;. Найдите файл <code>spring-webmvc-3.1.1.RELEASE.jar</code>, затем разверните его и найдите <code>org.springframework.web.servlet</code> &gt; <code>DispatcherServlet</code>.</p>
<p><code>DispatcherServlet</code> обрабатывает входящие запросы на основе параметров настройки из файла <code>dispatcher-servlet.xml</code>. Откройте файл <code>dispatcher-servlet.xml</code>, щелкнув его вкладку в редакторе. Обратите внимание на следующий код.</p>
<div class="indent">
<pre class="examplecode">
&lt;bean id=&quot;urlMapping&quot; class=&quot;org.springframework.web.servlet.handler.<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/handler/SimpleUrlHandlerMapping.html">SimpleUrlHandlerMapping</a>&quot;&gt;
&lt;property name=&quot;mappings&quot;&gt;
&lt;props&gt;
&lt;prop key=&quot;/index.htm&quot;&gt;indexController&lt;/prop&gt;
&lt;/props&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id=&quot;viewResolver&quot;
class=&quot;org.springframework.web.servlet.view.<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/InternalResourceViewResolver.html">InternalResourceViewResolver</a>&quot;
p:prefix=&quot;/WEB-INF/jsp/&quot;
p:suffix=&quot;.jsp&quot; /&gt;
&lt;bean name=&quot;indexController&quot;
class=&quot;org.springframework.web.servlet.mvc.<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/ParameterizableViewController.html">ParameterizableViewController</a>&quot;
p:viewName=&quot;index&quot; /&gt;</pre>
</div>
<p>В этом файле определены три компонента: <code>indexController</code>, <code>viewResolver</code> и <code>urlMapping</code>. Когда <code>DispatcherServlet</code> получает запрос, соответствующий выражению <code>*.htm</code>, например, <code>index.htm</code>, выполняется поиск контроллера внутри <code>urlMapping</code>, способного обработать этот запрос. Выше можно заметить, что существует свойство <code>mappings</code>, связывающее <code>/index.htm</code> с <code>indexController</code>.</p>
<p>Среда выполнения выполняет поиск определения компонента <code>indexController</code>, предоставляемого схемой проекта. Обратите внимание, что класс <code>indexController</code> расширяет класс <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/ParameterizableViewController.html"><code>ParameterizableViewController</code></a>. Это еще один класс инфраструктуры Spring, который просто возвращает представление. Также обратите внимание, что <code>p:viewName=&quot;index&quot;</code> указывает логическое имя представления, которое разрешается с помощью <code>viewResolver</code> путем добавления <code>/WEB-INF/jsp/</code> слева и добавления <code>.jsp</code> справа. Это позволяет среде выполнения найти файл в папке приложения и предоставить в ответ представление страницы приветствия (<code>/WEB-INF/jsp/index.jsp</code>).</p>
</div>
<h2 id="overview">Обзор приложения</h2>
<p>Создаваемое приложение состоит из двух страниц JSP (которые называются <em>представлениями</em> в терминологии <a href="http://www.oracle.com/technetwork/articles/javase/index-142890.html">MVC</a>). Первое представление содержит форму HTML с полем, в которое пользователь вводит свое имя. Второе представление — страница, на которой отображается приветственное сообщение с именем пользователя.</p>
<p>Представления управляются <em>контроллером</em>, который получает запросы к приложению и принимает решение, какие представления вернуть. Также он передает в представления информацию, которая требуется для их отображения (она называется <em>моделью</em>). Контроллер этого приложения называется <code>HelloController</code>.</p>
<p>В сложном веб-приложении бизнес-логика не размещается непосредственно в контроллере. Вместо этого контроллером используется другой объект — <em>служба</em> — при каждом обращении к бизнес-логике. В этом приложении бизнес-логика ограничена обработкой приветственного сообщения, и для этой цели создается служба <code>HelloService</code>. <a name="service"></a>
<h2>Реализация службы</h2>
<p>Теперь, после проверки правильности настроек среды, можно начать расширение схемы проекта в соответствии с имеющимися требованиями. Начните с создания класса <code>HelloService</code>.</p>
<ol>
<li>Нажмите кнопку 'Создать файл' (<img alt="Кнопка &apos;Создать файл&apos;" src="../../../images_www/articles/72/web/spring/new-file-btn.png">) на панели инструментов IDE. (В качестве альтернативы нажмите Ctrl-N; ⌘-N в Mac.)</li>
<li>Выберите категорию <strong>Java</strong>, затем <strong>Класс Java</strong> и нажмите кнопку &quot;Далее&quot;.</li>
<li>В мастере создания класса Java введите имя класса <strong>HelloService</strong>, затем введите имя пакета <strong>service</strong>, чтобы создать для класса новый пакет.</li>
<li>Нажмите кнопку &quot;Завершить&quot;. В среде IDE создается и открывается в редакторе новый класс.</li>
</ol>
<p>Класс <code>HelloService</code> предоставляет очень простую службу. Он принимает в качестве параметра имя и подготавливает и возвращает <code>строку String</code>, содержащую это имя. Создайте в редакторе следующий метод <code>sayHello()</code> для этого класса (изменения помечены <strong>полужирным шрифтом</strong>).</p>
<div class="indent">
<pre class="examplecode">
public class HelloService {
<strong>public static String sayHello(String name) {
return &quot;Hello &quot; + name + &quot;!&quot;;
}</strong>
}</pre></div>
<h2 id="controller">Реализация контроллера и модели</h2>
<p>Для обработки пользовательских данных и выбора представления для возврата можно использовать <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html"><code>SimpleFormController</code></a>.</p>
<p class="notes"><strong>Примечание: </strong> SimpleFormController устарел в Spring 3.x. Он используется в этом учебном руководстве для выполнения задач демонстрации. Однако следует использовать контроллер с аннотациями вместо файлов XML.</p>
<ol>
<li>Откройте мастер создания файлов, нажав Ctrl-N (⌘-N в Mac). Выберите категорию <strong>Spring Framework</strong> и тип файла <strong>Simple Form Controller</strong>. <br> <img alt="Мастер создания файлов - категория &apos;Платформа Spring&apos;" class="b-all margin-around" src="../../../images_www/articles/72/web/spring/simple-form-controller.png" style="width:668px" title="IDE NetBeans обеспечивает шаблоны для различных артефактов Spring"> <br> <span class="tips">IDE NetBeans обеспечивает шаблоны для различных артефактов Spring, включая файл конфигурации Spring XML, <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/AbstractController.html"><code>AbstractController</code></a> и <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html"><code>SimpleFormController</code></a>.</span>
</li>
<li>Нажмите кнопку &quot;Далее&quot;.</li>
<li>Назовите класс <strong>HelloController</strong> и создайте для него новый пакет, для этого введите в поле &quot;Package&quot; текст <strong>controller</strong>. Нажмите кнопку &quot;Завершить&quot;. В среде IDE создается и открывается в редакторе новый класс.</li>
<li>Укажите свойства контроллера, раскомментировав методы установки, отображаемые шаблоном класса по умолчанию. Чтобы раскомментировать фрагмент кода, выделите его, как показано на рисунке, и нажмите сочетание клавиш CTRL+/ (&amp;#8984+/ в Mac OS). <br> <img alt="Фрагмент кода. выделенный в редакторе" class="b-all margin-around" src="../../../images_www/articles/72/web/spring/comment-out.png" title="Выделите фрагменты кода, затем нажмите Ctrl-/ для переключения комментариев"> <br> <span class="tips">Нажатие сочетания клавиш CTRL+/ (&amp;#8984+/ в Mac OS) переключает комментарии в редакторе.</span>
</li>
<li>Внесите следующие изменения (показаны <strong>полужирным шрифтом</strong>).
<pre class="examplecode">
public HelloController() {
<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/BaseCommandController.html#setCommandClass(java.lang.Class)">setCommandClass</a>(<strong>Name</strong>.class);
<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/BaseCommandController.html#setCommandName(java.lang.String)">setCommandName</a>(&quot;<strong>name</strong>&quot;);
<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html#setSuccessView(java.lang.String)">setSuccessView</a>(&quot;<strong>hello</strong>View&quot;);
<a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html#setFormView(java.lang.String)">setFormView</a>(&quot;<strong>name</strong>View&quot;);
}</pre>
<p>Параметр <code>FormView</code> позволяет задать имя представления, используемого для отображения формы. Это страница, содержащая текстовое поле для ввода имени пользователя. Параметр <code>SuccessView</code> аналогичным образом позволяет задать имя представления, отображаемого при успешной передаче данных. Параметр <code>CommandName</code> задает имя команды в модели. В данном случае, команда — это объект формы со связанными параметрами запроса Параметр <code>CommandClass</code> определяет имя класса команды. Экземпляр этого класса заполняется и проверяется на допустимость при каждом запросе.</p>
<p>Обратите внимание, что для <code>Name</code> в методе <code>setCommandClass()</code> отображается ошибка:</p>
<img alt="В редакторе отображается ошибка для setCommandClass()" class="b-all margin-around" src="../../../images_www/articles/72/web/spring/set-command-class.png" title="Метка ошибки отображается для setCommandClass()">
<p>
Требуется создать класс <code>Name</code> в качестве простого компонента, хранящего данные каждого запроса.</p></li>
<li>В окне 'Проекты', щелкните правой кнопкой мыши узел проекта и выберите 'Создать' > 'Класс Java'. Отображается мастер создания класса Java.</li>
<li>Введите имя класса <strong>Name</strong> и выберите в выпадающем списке пакет <strong>controller</strong>.</li>
<li>Нажмите кнопку &quot;Завершить&quot;. Класс <code>Name</code> будет создан и открыт в редакторе.</li>
<li>В классе <code>Name</code> создайте поле <code>value</code>, затем создайте методы доступа (т.е. методы получения и установки) для этого поля. Сначала объявите поле <code>value</code>:
<pre class="examplecode">
public class Name {
<strong>private String value;</strong>
}</pre>
<p class="tips">Чтобы быстро ввести &quot;<code>private</code>&quot;, можно ввести &quot;<code>pr</code>&quot; и затем нажать клавишу TAB. Автоматически добавляется модификатор доступа &quot;<code>private</code>&quot;. Это пример использования шаблонов кода редактора. Полный список шаблонов кода можно просмотреть, выбрав в меню &quot;Справка&quot; пункт &quot;Таблица сочетаний клавиш&quot;.</p>
<br><a name="createAccessors"></a> В среде IDE предусмотрена возможность автоматического создания методов доступа. В редакторе щелкните правой кнопкой мыши в <code>value</code> и выберите 'Вставить код' (или нажмите Alt-Insert; Ctrl-I в Mac). Во всплывающем меню выберите пункт &quot;Методы получения и установки&quot;. <br> <img alt="Всплывающее меню создания кода отображается в редакторе" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/generate-code.png" title="Всплывающее меню создания кода позволяет настроить методы доступа"></li>
<li>В диалоговом окне выберите параметр <code>value : String</code> и нажмите кнопку &quot;ОК&quot;. Методы <code>getValue()</code> и <code>setValue()</code> добавляются к классу <code>Name</code>:
<pre class="examplecode">
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}</pre></li>
<li>Нажмите сочетание клавиш CTRL+TAB и выберите <code>HelloController</code>, чтобы переключиться обратно к классу <code>HelloController</code>. Обратите внимание, что значок ошибки исчез, поскольку класс <code>Name</code> теперь существует. </li>
<li>Удалите метод <code>doSubmitAction()</code> и раскомментируйте метод <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/mvc/SimpleFormController.html#setFormView(java.lang.String)"><code>onSubmit()</code></a>. Метод <code>onSubmit()</code> позволяет создать собственный <code>ModelAndView</code>, что требуется здесь. Внесите следующие изменения:
<pre class="examplecode">@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;
}</pre>
Как указано выше, <code>command</code> приводится к объекту <code>Name</code>. Создается экземпляр <code>ModelAndView</code> и с помощью метода получения в <code>SimpleFormController</code> создается представление. После этого модель заполняется данными. Единственный элемент модели в данном случае — приветственное сообщение, получаемое из ранее созданной службы <code>HelloService</code>. Для добавления к модели приветственного сообщения можно использовать метод <code>addObject()</code> под именем <code>helloMessage</code>.</li>
<li>Исправьте ошибки импорта, щелкнув правой кнопкой мыши в редакторе и выбрав 'Исправить ошибки' (Ctrl-Shift-I; ⌘-Shift-I в Mac). <br> <img alt="Диалоговое окно &apos;Исправить все выражения импорта&apos;" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/fix-imports70.png" title="Нажмите Ctrl-Shift-I, чтобы исправить выражения импорта в файле">
<p class="notes"><strong>Примечание.</strong> Убедитесь, что <strong><tt>org.springframework.validation.BindException</tt></strong> и <strong><tt>org.springframework.web.servlet.ModelAndView</tt></strong> выбраны в диалоговом окне 'Исправить все выражения импорта'.</p></li>
<li>Нажмите кнопку &quot;ОК&quot;. В начало файла добавляется следующий оператор импорта:
<pre class="examplecode">import <a href="http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/ModelAndView.html">org.springframework.web.servlet.ModelAndView</a>;</pre>
Как указано в документации API, этот класс &quot;представляет модель и представление, возвращаемые контроллером для разрешения <code>DispatcherServlet</code>. Представление может принимать форму имени представления <code>String</code>, которое должно быть разрешено объектом <code>ViewResolver</code>; в качестве альтернативы объект <code>View</code> может быть указан непосредственно. Модель — это объект <code>Map</code>, что позволяет использовать несколько объектов, выбираемых по имени.&quot; <br><br> Обратите внимание, что на данном этапе исправлены не все ошибки, поскольку класс по-прежнему не может определить класс <code>HelloService</code> и использовать его метод <code>sayHello()</code>.</li>
<li>Внутри <code>HelloController</code> объявите частное поле <code>HelloService</code>:
<pre class="examplecode">private HelloService helloService;</pre>
Затем создайте для поля общедоступный метод установки:
<pre class="examplecode">public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}</pre>
Наконец, щелкните правой кнопкой мыши в редакторе и выберите 'Исправить выражения импорта' (Ctrl-Shift-I; ⌘-Shift-I в Mac). В начало файла добавляется следующий оператор импорта:
<pre class="examplecode">import service.HelloService;</pre>
Все ошибки исправлены.</li>
<li>Зарегистрируйте <code>HelloService</code> в файле <code>applicationContext.xml</code>. Откройте в редакторе файл <code>applicationContext.xml</code> и введите следующее определение компонента:
<pre class="examplecode">
&lt;bean name=&quot;helloService&quot; class=&quot;service.HelloService&quot; /></pre>
<div class="tips">В состав поддержки Spring в среде IDE входит автозавершение кода в файлах настройки XML для классов Java и ссылок на компоненты. Для вызова автозавершения кода нажмите сочетание клавиш CTRL+ПРОБЕЛ в редакторе: <br> <img alt="Автозавершение кода вызывается при нажатии Ctrl-Space" class="b-all margin-around" src="../../../images_www/articles/72/web/spring/code-completion.png" title="Автозавершение кода вызывается при нажатии Ctrl-Space"></div></li>
<li>Зарегистрируйте <code>HelloController</code> в файле <code>dispatcher-servlet.xml</code>. Откройте в редакторе файл <code>dispatcher-servlet.xml</code> и введите следующее определение компонента:
<pre class="examplecode">
&lt;bean class=&quot;controller.HelloController&quot; p:helloService-ref=&quot;helloService&quot;/&gt;</pre></li>
</ol>
<h2 id="view">Реализация представлений</h2>
<p>Для реализации представлений в проекте требуется создать две страницы JSP. Первая из них, <code>nameView.jsp</code>, служит страницей приветствия и позволяет пользователю ввести имя. На второй, <code>helloView.jsp</code>, отображается приветственное сообщение с введенным именем. Сначала создайте <code>helloView.jsp</code>.</p>
<ol>
<li id="create-jsp">В окне 'Проекты' щелкните правой кнопкой мыши узел WEB-INF > <code>jsp</code> и выберите 'Создать' > JSP. Откроется мастер &quot;New JSP File&quot;. Введите имя файла <strong>helloView</strong>.</li>
<li>Нажмите кнопку &quot;Завершить&quot;. Страница JSP создается в папке <code>jsp</code> и открывается в редакторе.</li>
<li>В редакторе измените заголовок файла на <code>Hello</code> и измените выходное сообщение для получения <code>helloMessage</code> объекта <code>ModelandView</code>, созданного в <code>HelloController</code>.
<pre class="examplecode">
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;title&gt;<strong>Hello</strong>&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;<strong>${helloMessage}</strong>&lt;/h1&gt;
&lt;/body&gt;
</pre></li>
<li><a href="#create-jsp">Тем же способом</a> создайте вторую страницу JSP и назовите ее <code>nameView</code>.</li>
<li>В редакторе добавьте следующее определение библиотеки тегов Spring к <code>nameView.jsp</code>.
<pre class="examplecode">&lt;%@taglib uri=&quot;http://www.springframework.org/tags&quot; prefix=&quot;spring&quot; %&gt;</pre>
При этом импортируется <a href="http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html">библиотека тегов Spring</a>, содержащая полезные теги для реализации представлений как страниц JSP.
<li>Измените содержимое тегов <code>&lt;title&gt;</code> и <code>&lt;h1&gt;</code> на <code>Enter Your Name</code>.</li>
<li>После тега <code>&lt;h1&gt;</code> введите следующий код:
<pre class="examplecode">
&lt;spring:nestedPath path=&quot;name&quot;&gt;
&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
Name:
&lt;spring:bind path=&quot;value&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;${status.expression}&quot; value=&quot;${status.value}&quot;&gt;
&lt;/spring:bind&gt;
&lt;input type=&quot;submit&quot; value=&quot;OK&quot;&gt;
&lt;/form&gt;
&lt;/spring:nestedPath&gt;
</pre>
<a href="http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html#spring.tld.bind">spring:bind</a> позволяет привязать свойство компонента. Тег привязки обеспечивает состояние и значение привязки, которые используются в качестве имени и значения поля ввода. Таким образом, при передаче формы платформе Spring будет известен способ извлечения переданного значения. Здесь командный класс (<code>controller.Name</code>) имеет свойство <code>value</code>, поэтому нужно установить <code>path</code> равным <code>value</code>. <br><br> <a href="http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html#spring.tld.nestedPath">spring:nestedPath</a> позволяет добавить к компоненту слева определенный путь. Поэтому при использовании вместе с <code>spring:bind</code> путь к компоненту становится равным <code>name.value</code>. Как уже указывалось, имя команды <code>HelloController</code><code>name</code>. Поэтому этот путь ссылается на свойство <code>value</code> компонента <code>name</code> в контексте страницы.
<li>Измените относительную точку входа для приложения. В настоящий момент точка входа по-прежнему <code>index.htm</code>, что в соответствии с разделом <a href="#running">Выполнение схемы проекта</a> перенаправляется на <code>WEB-INF/jsp/index.jsp</code>. Можно указать точку входа для проекта после его развертывания и запуска. В окне 'Проекты', щелкните правой кнопкой мыши узел проекта и выберите 'Свойства'. Открывается диалоговое окно &quot;Свойства проекта&quot;. В области &quot;Категории&quot; выберите &quot;Выполнить&quot;. В поле &quot;Относительный URL-адрес&quot; введите <code>/hello.htm</code> и нажмите кнопку &quot;ОК&quot;. <br><br> Возникает вопрос: где же располагается отображение <code>hello.htm</code> на <code>HelloController</code>? Отображение не добавлялось к компоненту <code>urlMapping</code>, как в случае страницы приветствия схемы проекта <code>index.htm</code>. Такая возможность обеспечивается средствами автоматизации платформы Spring, предоставляемыми следующим определением компонента <code>dispatcher-servlet.xml</code>:
<pre class="examplecode">&lt;bean class=&quot;org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping&quot;/&gt;</pre>
Этот компонент отвечает за автоматическое создание отображения URL-адресов для всех зарегистрированных в файле контроллеров. Из полностью определенного имени контроллера (в данном случае <code>controller.HelloController</code>) удаляется имя пакета и суффикс <code>Controller</code>, и затем результат используется как образец URL-адреса. Таким образом, для <code>HelloController</code> создается отображение <code>hello.htm</code>. Это средство, однако, не срабатывает для контроллеров, включенных в платформу Spring, например, <code>ParameterizableViewController</code>. Для них требуется явное отображение.</li>
<li>В окне 'Проекты' щелкните правой кнопкой мыши узел проекта и выберите 'Выполнить'. Проект компилируется, развертывается и выполняется. Открывается браузер по умолчанию и отображается <code>hello.htm</code> как <code>nameView</code> проекта: <br> <img alt="nameView отображается в браузере" class="b-all margin-around" src="../../../images_www/articles/72/web/spring/name-view.png" title="nameView отображается в браузере"> <br> Введите имя в текстовом поле и нажмите ENTER. Отображается <code>helloView</code> с приветственным сообщением: <br> <img alt="helloView отображается в браузере" class="b-all margin-around" src="../../../images_www/articles/72/web/spring/hello-view.png" title="helloView отображается в браузере"></li>
</ol>
<div class="feedback-box">
<a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Introduction%20to%20Spring">Мы ждем ваших отзывов</a></div>
<br style="clear:both;">
<h2 id="seeAlso">Дополнительные сведения</h2>
<p>На этом завершается введение в платформу Spring в IDE NetBeans. В этом документе описывается создание простого веб-приложения MVC в IDE NetBeans с помощью платформы Spring и описывается интерфейс IDE для разработки веб-приложений.</p>
<p>Пользователям рекомендуется продолжить изучение платформы Spring путем изучения других учебных курсов в IDE NetBeans, таких как <a href="http://sites.google.com/site/springmvcnetbeans/step-by-step/">Пошаговая разработка приложения MVC платформы Spring с помощью NetBeans и сервера GlassFish</a>. Это официальный <a href="http://static.springframework.org/docs/Spring-MVC-step-by-step/">учебный курс по платформе Spring</a>, разработанный Томасом Рисбергом (Thomas Risberg), адаптированный для IDE NetBeans Арулази Дхесиасилан (Arulazi Dhesiaseelan).</p>
<p>Многие возможности модуля Spring среды NetBeans могут применяться и в приложениях платформы Spring, не связанных с Интернетом.
<p>Для ознакомления с другими связанными учебными курсами воспользуйтесь следующими материалами:</p>
<ul>
<li><a href="../../docs/web/framework-adding-support.html">Добавление поддержки веб-платформы</a>. Базовое руководство, в котором описан процесс добавления поддержки путем установки подключаемого модуля платформы с помощью центра обновления NetBeans.</li>
<li><a href="jsf20-intro.html">Введение в JavaServer Faces 2.0</a>. Показано добавление поддержки JSF 2.0 к существующему проекту, связывание управляемых компонентов и использование шаблонов фейслетов.</li>
</ul>
</body>
</html>