Управление сессиями является одной из важных частей для каждого веб-приложения. Поскольку 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> |
На скриншотах ниже вы можете увидеть результат работы кода:
И результаты:
И
Добавление пользовательского объекта в сессию
В этом разделе я покажу вам, как добавить пользовательский объект в сеанс и как отобразить свойства объекта в 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. И, как я и обещал ранее, я даю ссылку на источники проекта. Все, что я упомянул в этом посте, является лишь частью того, что вы должны знать о сессиях, позже я напишу пост о различных важных функциях.