| <!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>. В приложении пользователь может ввести свое имя в текстовом поле, и после нажатия кнопки "ОК" это имя отображается на второй странице вместе с приветствием.</p> |
| |
| <p>Платформа Spring – популярная платформа приложений с открытым кодом, предназначенная для упрощения разработки для J2EE. Она состоит из контейнера, платформы управления элементами и набора интегрируемых служб для веб-интерфейсов пользователя, транзакций и сохранения состояния. В состав платформы Spring входит Spring Web MVC – расширяемая платформа 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 ("Создать проект") (Ctrl-Shift-N; &#8984-Shift-N на Mac) из меню File ("Файл") среды IDE. Выберите категорию "Java Web", затем выберите проект "Веб-приложение". Нажмите кнопку "Далее".</li> |
| |
| <li>В поле "Имя проекта" введите <strong>HelloSpring</strong>. Нажмите кнопку "Далее".</li> |
| |
| <li>На третьем экране "Сервер и параметры настройки" отключите параметр "Enable Contexts and Dependency Injection", поскольку в данном учебном курсе не используется спецификация <a href="http://jcp.org/en/jsr/detail?id=299">JSR-299</a>.</li> |
| |
| <li>Убедитесь, что в разворачивающемся списке 'Сервер' выбран сервер GlassFish. Нажмите кнопку "Далее". |
| <p>Версия Java EE зависит от версии выбранного сервера. Если выбран сервер GlassFish Server 4.0, в качестве версии Java EE по умолчанию указывается Java EE 7 Web. |
| </p></li> |
| |
| <li>На четвертом экране мастера на панели "Frameworks" выберите "Spring Web MVC".</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>Выберите вкладку "Настройка" и обратите внимание, что в мастере можно настроить имя и отображение сервлета обработчика Spring. <br> <img alt="Варианты настройки Spring" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/spring-configuration.png" title="Укажите имя и сопоставление сервлета Spring Dispatcher на вкладке 'Конфигурация'"></li> |
| |
| <li>Нажмите кнопку "Завершить". В результате создается проект для всего приложения, в т.ч. все метаданные, а также сценарий сборки проекта Ant, с которым можно ознакомиться в окне "Файлы" (сочетание клавиш CTRL+2; &#8984+2 в Mac OS). Структуру шаблона можно просмотреть в окне "Проекты" (сочетание клавиш CTRL+1; &#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 указаны в узле 'Библиотеки' проекта" class="margin-around b-all" src="../../../images_www/articles/72/web/spring/spring-libraries.png" title="Файлы JAR Spring указаны в узле 'Библиотеки' проекта"> |
| </li> |
| </ol> |
| |
| |
| <h3 id="running">Выполнение схемы проекта</h3> |
| |
| <p>Перед изменением файлов проекта следует попытаться запустить созданный проект в среде IDE:</p> |
| |
| <ol> |
| <li>Нажмите кнопку 'Запустить проект' (<img alt="Кнопка 'Выполнить проект'" src="../../../images_www/articles/72/web/spring/run-project-btn.png">) на главной панели инструментов IDE. В среде IDE автоматически запускается сервер GlassFish, если он не был запущен, проект компилируется и развертывается на сервере. Обратите внимание на данные, отображаемые в окне "Вывод" среды IDE (сочетание клавиш CTRL+4; &#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 предоставляет возможность "Развертывание при сохранении", которая включена по умолчанию для веб-проектов. При сохранении файлов в редакторе проект автоматически компилируется и развертывается на сервере. Для просмотра изменений достаточно просто обновить страницу в браузере.</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"> |
| <welcome-file-list> |
| <welcome-file>redirect.jsp</welcome-file> |
| </welcome-file-list></pre> |
| </div> |
| |
| <p>В файле <code>redirect.jsp</code> содержится оператор перенаправления, направляющий все запросы в <code>index.htm</code>:</p> |
| |
| <div class="indent"> |
| <pre class="examplecode"><% response.sendRedirect("index.htm"); %></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"> |
| <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></pre> |
| </div> |
| |
| <p class="tips">Полностью определенное имя сервлета диспетчера сервлета <code>org.springframework.web.servlet.DispatcherServlet</code>. Это класс из библиотеки Spring, которая была добавлена в путь к классам проекта при его создании. Чтобы проверить это, разверните узел "Библиотеки" в окне "Проекты". Найдите файл <code>spring-webmvc-3.1.1.RELEASE.jar</code>, затем разверните его и найдите <code>org.springframework.web.servlet</code> > <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"> |
| <bean id="urlMapping" class="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>"> |
| <property name="mappings"> |
| <props> |
| <prop key="/index.htm">indexController</prop> |
| </props> |
| </property> |
| </bean> |
| |
| <bean id="viewResolver" |
| class="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>" |
| p:prefix="/WEB-INF/jsp/" |
| p:suffix=".jsp" /> |
| |
| <bean name="indexController" |
| class="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>" |
| p:viewName="index" /></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="index"</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="Кнопка 'Создать файл'" src="../../../images_www/articles/72/web/spring/new-file-btn.png">) на панели инструментов IDE. (В качестве альтернативы нажмите Ctrl-N; ⌘-N в Mac.)</li> |
| |
| <li>Выберите категорию <strong>Java</strong>, затем <strong>Класс Java</strong> и нажмите кнопку "Далее".</li> |
| |
| <li>В мастере создания класса Java введите имя класса <strong>HelloService</strong>, затем введите имя пакета <strong>service</strong>, чтобы создать для класса новый пакет.</li> |
| |
| <li>Нажмите кнопку "Завершить". В среде 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 "Hello " + name + "!"; |
| }</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="Мастер создания файлов - категория 'Платформа Spring'" 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>Нажмите кнопку "Далее".</li> |
| |
| <li>Назовите класс <strong>HelloController</strong> и создайте для него новый пакет, для этого введите в поле "Package" текст <strong>controller</strong>. Нажмите кнопку "Завершить". В среде IDE создается и открывается в редакторе новый класс.</li> |
| |
| <li>Укажите свойства контроллера, раскомментировав методы установки, отображаемые шаблоном класса по умолчанию. Чтобы раскомментировать фрагмент кода, выделите его, как показано на рисунке, и нажмите сочетание клавиш CTRL+/ (&#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+/ (&#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>("<strong>name</strong>"); |
| <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>("<strong>hello</strong>View"); |
| <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>("<strong>name</strong>View"); |
| }</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>Нажмите кнопку "Завершить". Класс <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">Чтобы быстро ввести "<code>private</code>", можно ввести "<code>pr</code>" и затем нажать клавишу TAB. Автоматически добавляется модификатор доступа "<code>private</code>". Это пример использования шаблонов кода редактора. Полный список шаблонов кода можно просмотреть, выбрав в меню "Справка" пункт "Таблица сочетаний клавиш".</p> |
| |
| <br><a name="createAccessors"></a> В среде IDE предусмотрена возможность автоматического создания методов доступа. В редакторе щелкните правой кнопкой мыши в <code>value</code> и выберите 'Вставить код' (или нажмите Alt-Insert; Ctrl-I в Mac). Во всплывающем меню выберите пункт "Методы получения и установки". <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> и нажмите кнопку "ОК". Методы <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="Диалоговое окно 'Исправить все выражения импорта'" 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>Нажмите кнопку "ОК". В начало файла добавляется следующий оператор импорта: |
| |
| <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, этот класс "представляет модель и представление, возвращаемые контроллером для разрешения <code>DispatcherServlet</code>. Представление может принимать форму имени представления <code>String</code>, которое должно быть разрешено объектом <code>ViewResolver</code>; в качестве альтернативы объект <code>View</code> может быть указан непосредственно. Модель — это объект <code>Map</code>, что позволяет использовать несколько объектов, выбираемых по имени." <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"> |
| <bean name="helloService" class="service.HelloService" /></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"> |
| <bean class="controller.HelloController" p:helloService-ref="helloService"/></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. Откроется мастер "New JSP File". Введите имя файла <strong>helloView</strong>.</li> |
| |
| <li>Нажмите кнопку "Завершить". Страница JSP создается в папке <code>jsp</code> и открывается в редакторе.</li> |
| |
| <li>В редакторе измените заголовок файла на <code>Hello</code> и измените выходное сообщение для получения <code>helloMessage</code> объекта <code>ModelandView</code>, созданного в <code>HelloController</code>. |
| |
| |
| <pre class="examplecode"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <title><strong>Hello</strong></title> |
| </head> |
| <body> |
| <h1><strong>${helloMessage}</strong></h1> |
| </body> |
| </pre></li> |
| |
| <li><a href="#create-jsp">Тем же способом</a> создайте вторую страницу JSP и назовите ее <code>nameView</code>.</li> |
| |
| <li>В редакторе добавьте следующее определение библиотеки тегов Spring к <code>nameView.jsp</code>. |
| |
| <pre class="examplecode"><%@taglib uri="http://www.springframework.org/tags" prefix="spring" %></pre> |
| |
| При этом импортируется <a href="http://static.springframework.org/spring/docs/2.5.x/reference/spring.tld.html">библиотека тегов Spring</a>, содержащая полезные теги для реализации представлений как страниц JSP. |
| |
| <li>Измените содержимое тегов <code><title></code> и <code><h1></code> на <code>Enter Your Name</code>.</li> |
| |
| <li>После тега <code><h1></code> введите следующий код: |
| |
| <pre class="examplecode"> |
| <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> |
| </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>. Можно указать точку входа для проекта после его развертывания и запуска. В окне 'Проекты', щелкните правой кнопкой мыши узел проекта и выберите 'Свойства'. Открывается диалоговое окно "Свойства проекта". В области "Категории" выберите "Выполнить". В поле "Относительный URL-адрес" введите <code>/hello.htm</code> и нажмите кнопку "ОК". <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"><bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/></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&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> |