Статьи

Spring MVC Session Tutorial

Управление сессиями является одной из важных частей для каждого веб-приложения. Поскольку Spring MVC является мощной средой для веб-разработки, он имеет собственные инструменты и API для взаимодействия с сессиями. Сегодня я собираюсь показать вам основные способы обработки сессий в приложении Spring MVC. Это означает обработку форм, добавление объектов в сеанс, отображение объектов из сеанса в JSP. Я буду стараться изо всех сил, так что давайте начнем.

Этот учебник Spring MVC Session будет основан на одной из предыдущих публикаций в моем блоге, связанных с обработкой форм . Я собираюсь расширить приложение, добавив логику сеанса к существующей форме студента, создать новую страницу с формой и одним текстовым полем. Текст из поля будет обработан каким-то контроллером

и добавил к сессии. Для проверки функциональности сеанса я буду отображать объекты сеанса на страницах, используя JSTL. Src из учебника вы можете скачать в конце учебника.

Форма с одним текстовым полем

Во-первых, мне нужно создать вид и контроллер. Я начну с создания представления и после этого продемонстрирую соответствующий контроллер с логикой сеанса.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
...
<h2>Adding of a String into the session</h2>
 
<form action="remember.html" method="post">
<table>
<tbody><tr>
<td>To remember:</td>
<td><input name="thoughtParam" type="text"></td>
</tr>
<tr>
<td><input type="submit"></td>
<td></td>
</tr>
</tbody></table>
</form>
<a href="${pageContext.request.contextPath}/">Main page</a>
...

Теперь мне нужно разработать контроллер для обработки формы. Для обработки запросов будет два метода: первый из них отвечает за переход на страницу, второй — за активность сеанса.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
@Controller
@SessionAttributes("thought")
public class SingleFieldController {
 
    @RequestMapping(value="/single-field")
    public ModelAndView singleFieldPage() {
        return new ModelAndView("single-field-page");
    }
     
    @RequestMapping(value="/remember"
    public ModelAndView rememberThought(@RequestParam String thoughtParam) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("thought", thoughtParam);
        modelAndView.setViewName("single-field-page");
        return modelAndView;
    }
     
}

Это простой Spring MVC-контроллер с одной дополнительной аннотацией @SessionAttributes. Это указывает на то, что в методах контроллера могут быть присвоены некоторые значения аргументам аннотации. В этом примере я объявил только один атрибут сеанса с именем « мысль ». Это означает, что я могу поместить некоторый объект в modelAndView с помощью метода addObject (), и он будет добавлен в сеанс, если имя объекта будет таким же, как имя аргумента в @SessionAttributes. Последнее, что мне нужно сделать, это добавить ссылку на новую страницу в index.jsp:

1
2
3
4
5
6
7
8
9
...
    <h1>Home page</h1>
    <p>This is Home page.</p>
    <p>Don't forget: ${thought}</p>
    <p>
        <a href="person-form.html">Person page</a> <br>
        <a href="single-field.html">Single field page</a>
    </p>
...

Чтобы убедиться, что сеанс работает правильно, вам необходимо добавить следующий код в существующие представления (single-field-page.jsp,…):

1
<p>Don't forget: ${thought}</p>

На скриншотах ниже вы можете увидеть результат работы кода:

Обработка сеанса Spring MVC

И результаты:

Результат весенней MVC-сессии

И

Весенний MVC сессия результат JSTL 1

Добавление пользовательского объекта в сессию

В этом разделе я покажу вам, как добавить пользовательский объект в сеанс и как отобразить свойства объекта в JSP. Роль пользовательского объекта будет играть объект Person . Сначала я изменю существующий контроллер лица:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
@Controller
@SessionAttributes("personObj")
public class PersonController {
 
    @RequestMapping(value="/person-form")
    public ModelAndView personPage() {
        return new ModelAndView("person-page", "person-entity", new Person());
    }
     
    @RequestMapping(value="/process-person")
    public ModelAndView processPerson(@ModelAttribute Person person) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("person-result-page");
         
        modelAndView.addObject("pers", person);
        modelAndView.addObject("personObj", person);
         
        return modelAndView;
    }
     
}

По сравнению с последней версией я добавил две новые строки:

1
2
3
4
5
...
@SessionAttributes("personObj")
...
modelAndView.addObject("personObj", person);
...

Результат выполнения кода следующий:

Spring MVC сессионный объект

И

Результат сеанса Spring MVC

Это конец учебника по сеансу Spring MVC. И, как я и обещал ранее, я даю ссылку на источники проекта. Все, что я упомянул в этом посте, является лишь частью того, что вы должны знать о сессиях, позже я напишу пост о различных важных функциях.

Ссылка: Spring MVC: сессия нашего партнера по JCG Алексея Зволинского в блоге заметок Фрузенштейна .