Spring MVC — Hello World, пример приложения. Передача параметров формы

Рассмотрим простой пример приложения Spring MVC с возможностью передачи параметров из формы. В статье будут рассмотрены базовые настройки, дано объяснение как происходит переход между представлениями и как можно сохранить введенную информацию в форме в объект POJO. 

Используемые технологии:

  • Spring MVC 4.1.5
  • JSP
  • Maven 3.2.5
  • IntelliJ IDEA 14.1.4
  • JDK 1.8

1. Структура проекта

SpringMVC_JSPHelloWorld structure

В проекте два представления index.jsp и secondPage.jsp. Имеется один контроллер, а так же модель User.

2. Создаем проект maven

Просто жмем Next

maven start

файл pom.xml

3. Добавляем поддержку фреймворков Spring MVC

SpringMVC_JSPHelloWorld frameWorkSupport

Если в maven все зависимости загрузились успешно, то IDEA предложит использовать библиотеки maven для Spring.

4. Настраиваем web.xml

Комментарии в коде поясняют значения настроек.

Файл application-context.xmlсозданный по умолчанию, оставляем пустым. Для первоначального запуска его можно не настраивать.

dispatcher-servlet.xml

5. Контроллер Spring

При запуске приложения мы попадем в метод main(), т.к. у него стоит параметр в @RequestMapping value = «/» и метод GET. Т.к. мы не указывали какой-либо другой путь при деплое приложения, то будет использоваться путь по умолчанию /.

Теперь нам необходимо записать в модель атрибут, а так же объект, который будет соответствовать этому атрибуту. Здесь используется имя userJSP, который ссылается на модель POJO класса User.class. Здесь специально разделил названия атрибута и модели, т.к. во многих примерах всегда используется model=user, object=user, name=user и т.п.. А потом нельзя понять куда что пишется и на что ссылается..

Далее записываем имя представления index. После return будет обращение в dispatcherServlet.xml вот к этой части:

Этот бин будет искать представление index в пакетах с соответствующим prefix и suffix. Т.е. в нашем случае в /WEB-INF/views/index.jsp.

6. Модель

Создан простенький класс, хранящий имя и пароль:

6. Представление

index.jsp

Создаем форму с использованием тегов от spring (смотрите начало страницы), указываем метод формы (post или get), атрибут модели (используется в контроллере из описания выше) и что произойдет при подтверждении (сабмите) формы (после нажатия на кнопку в нашем случае).

secondPage.jsp

используя имя атрибута можно вытянуть сохраненные (переданные) параметры формы.

7. Запуск приложения

После запуска откроется простая формочка:

SpringMVC_JSPHelloWorld indexPage

После нажатия на кнопку Next Page попадем в контроллер в этот метод:

Обратите внимание, что в аннотации не указано какой метод используется get или post. В этом случае будут проверяться оба.

Итак мы попадаем в этот метод и идет поиск атрибута с именем userJSP, который будет записан в User.class с именем user.

Далее просто указываем новое представление и добавляем в модель объект, который пришел из формы в атрибут с тем же названием (для удобства) userJSP. Этот атрибут потом используем на второй странице, чтобы вытащить данные (см. предыдущий пункт).

Результат:

SpringMVC_JSPHelloWorld secondPage

8. Подробное описание как собрать и запустить проект

В комментариях было указано на сложности в запуске исходных кодов проекта. Распишу всё подробнее.

8.1 Исходный код

Скачиваем проект по ссылке в конце статьи. Если просто разархивировать zip архив, то у вас получиться две папки с одинаковым названием. В IDEA нужно открывать второй уровень:

mvc hello world run1

8.2. Settings, Project Structure

Поскольку в pom.xml не были указаны версии Java, то в IDEA у вас они выставятся по умолчанию на 1.5. Для начала заходите в Settings(alt+ctrl+s) и меняйте в пункте Java Compiler версию на 1.8.

mvc hello world run2

Теперь в Project Structure (alt+ctrl+shift+s) меняем в Module уровень языка с 5 на 8.

mvc hello world run3

8.3. Tomcat

Сначала создаем артефакт в том же месте где меняли уровень языка (Project Structure):

mvc hello world run4

Теперь настроем сервер и запустим приложение.

mvc hello world run5

Заходим в настройки запуска приложения (цифра 1). Выбираем ‘+’ и там Tomcat Local (у вас он должен быть скачан, например в папку program files). Далее под цифрой 3 указываем папку с томкатом. Во вкладке deployment нужно добавить артефакт, который создается чуть выше. Нажимаем значек плей и приложение откроется в браузере!

 

*как исправить кривой результат для русских символов смотрите в статье ниже.

Может быть интересно

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5

Spring MVC – исправление проблем с русской кодировкой. Кодировка передачи параметров формы

Исходные коды

SpringMVC_JSPHelloWorld — исходные коды

Share Button
46
44376 Total Views 3 Views Today

24 thoughts on “Spring MVC — Hello World, пример приложения. Передача параметров формы

  1. Виталий:

    Спасибо большущее!

    Работает!

    Правда есть пара моментов, не описанные в статье, на которые я, как чайник, наткнулся и немного помучился. Но это касается только полных чайников и, возможно, и не должно быть отражено в статье (чтоб не утяжелять её).

    1. Nick:

      А вы расскажите. Другим, думаю, будет интересно и сэкономит время. А может и в статью имеет смысл добавить, если что-то совсем не очевидное.

      1. Виталий:

        Я думаю, надо сказать о двух моментах (слов-то немного и пара скриншотов):
        1) В Project Settings – Artifact в правой её части «Available Elements» выделить все библиотеки и в контекстном меню выбоать Put into WEB-INF\lib
        2) Создать Run Configuration

        1. Антон:

          Спасибо большое за подсказку. Только после того, как сделал пункт 1, всё заработало.

        2. Антон:

          А нет, не всё. Уже непосредственно в браузере вылез
          HTTP Status 500 — An exception occurred processing JSP page /index.jsp at line 21

  2. JohnSnow:

    опишите так же в деталях, как это запустить, плз. начиная с того, в какой папке проект создается, куда собирается, на какой версии какого сервера, что нужно настроить. А то выглядит, будто это само собой разумеющееся. У меня по этой статье ничего запустить не получилось. Приложение не разворачивается на сервере, выдает ранзые ошибки одну за другой….

    1. UPDATE: Обновил статью для вас.
      На самом деле так и есть — просто запустить. Вы скачивали проект, который находится в конце статьи? Попроую кратко описать:
      Открывается Idea, добавляете Tomcat. В нем указывается артефакт (он задается в Project Structure). Нажимаете запустить — всё должно работать.
      вот здесь JSF Hello World в картинках есть описание как сервер добавить и запустить (Настройка веб контейнера для приложения).

      1. Антон:

        Подскажите пожалуйста, в чём может быть проблема?

        //admin: тут был скриншот с стектрейсом о не найденном объекте userJSP

        1. не видит переменную в запросе (request).

          1. Антон:

            Извините за глупый вопрос, но как это исправить?

          2. При построении страницы нужно, чтобы объект userJSP был доступен в ответе от сервера. В этом учебном проекте он добавляется в модели addObject(«userJSP»). Где он у вас теряется и в этом ли точная ошибка подсказать не смогу.

  3. Марк:

    Как решить проблему с кодировкой? Если в поля вводить русские символы они уходят вдругую кодировку.

  4. Артем:

     Добрый день, скажите пожалуйста назначение это строчки:

     <mvc:resources mapping=«/resources/**» location=«/resources/» />

    1. resources стандартная папка для maven проекта. Этой записью можно указать путь где физически лежат ресурсы по отношению к запросам вида /resources/**. И можно легко менять их, например записью location=»/resources/my-new-theme/». В этом случае все запросы пойдут в папку my-new-theme.

  5. Алексей:

    Большое спасибо за хороший урок. Но у меня возник вопрос — Когда удаляю:

    в файле web.xml приложение работает. Получается чти параметры являются необязательными? Спасибо!

    1. просто начинают грузится дефолтные настройки. В приложении такого масштаба как это вы не заметите разницу:)

  6. Андрей:

    Привет! Подскажите пожалуйста. У меня в Идее 2016.2.5 нет меню Add Frameworks Support. Я в структуре проекта в меню Modules добавляю Spring, потом по нему + SpringMVC  и тогда выходит такое окно как у Вас Use Library или Download. Я выбираю Use , ОК. Но структура проекта у меня не меняется. Не появляется пакет web. Я правильно понял, что он должен сам появиться после добавления SpringMVC?

  7. Андрей:

    Получилось. На названии проекта правой кнопкой мыши, там будет Add frameworks support

  8. Владимир:

    Здравствуйте,

    пытаюсь запустить проект, который я сам и создал по вашему уроку в итоге веб сервер выдает страничку:

    <html>
    <head>
    <title>$Title$</title>
    </head>
    <body>
    $END$
    </body>
    </html>

    А если я запускаю ваш проект, то все получается как нужно.

    1. Антон К:

      Такая же фигня. заработало следующим образом:

      Взял пример с oracle netbeans spring mvc:

      добавил в web.xml

      в index.jsp убрал / в path

      создал WEB-INF/redirect.jsp

      1. Николай:

        У вас в проекте два файла index.jsp. Удалите один и все норм будет.

  9. java:

    Когда в jsp добавляешь

    то сервер выдает ошибку, как ее решить?
    HTTP Status 500 — java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.index_jsp

    type Exception report

    message java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.index_jsp

    description The server encountered an internal error that prevented it from fulfilling this request.

    exception

    root cause

    note The full stack trace of the root cause is available in the Apache Tomcat/8.5.9 logs.
    Apache Tomcat/8.5.9

    Я просто хочу передать объект и сделать foreach

  10. Alex:

    Добрый день!

    При запуске приложения вываливается страница приветствия TomCat. Тоже самое и на других подобных приложениях. Не знаю куда копать.
    ___________
    (((((( сутки почти потратил на эту проблему … порты менял… на них в логе Tomcat  ругался. Оказывается Томкат нужно было поставить, а службу соответствующую остановить. С запущенной  службой целый букет ошибок:
    фев 15, 2017 4:58:15 PM org.apache.catalina.core.StandardServer await
    SEVERE: StandardServer.await: create[localhost:8005]:
    java.net.BindException: Address already in use: JVM_Bind

Добавить комментарий