В этой статье мы сделаем еще один шаг навстречу Spring MVC. [ В сторону : PDF от автора термина MVC .] Основываясь на предыдущей статье, давайте добавим код, необходимый для добавления «Контакты» в приложение. Во-первых, нам нужно добавить некоторый компонент пользовательского интерфейса, чтобы начать процесс. Для простоты, пусть это будет простая ссылка.
Файл: /springwebapp001/src/main/webapp/index.jsp
|
1
2
3
4
|
[...] <a href="contacts/addNew.html"> Add new contact.</a> [...] |
Как вы могли заметить, мы указали эту ссылку на «contacts / addNew.html». Это означает, что нам нужно что-то — контроллер и / или метод, который ищет этот запрос. Давайте создадим контроллер, который будет выставлять все запросы, начиная с «контактов».
Файл: src / main / java / org / academy / ui / spring3 / controllers / ContactCtlr.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package org.academy.ui.spring3.controllers; import org.academy.ui.spring3.forms.ContactFrm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping(value = "/contacts") public class ContactCtlr { private final static Logger logger = LoggerFactory .getLogger(ContactCtlr.class); [...] } |
Spring также должен знать, что он должен искать определенный пакет для контроллеров.
Файл: /springwebapp001/src/main/webapp/WEB-INF/spring-servlet.xml
|
1
2
3
|
[...] <context:component-scan base-package="org.academy.ui.spring3.controllers" /> [...] |
Установив это, нам понадобится метод в ContactCtlr для поля запросов GET для /addNew.html. [В сторону: В чем разница между запросами GET и POST? Читайте здесь. ]
Файл: src / main / java / org / academy / ui / spring3 / controllers / ContactCtlr.java
|
1
2
3
4
5
6
7
8
9
|
[...] private final String addNewView = "Contacts/AddNew"; @RequestMapping(value = "/addNew", method = RequestMethod.GET) public String addNewContact() { logger.debug("Display form to add a new contact."); return addNewView; } [...] |
Здесь мы просто направили элемент управления в «Контакты / AddNew», который сводится к /springwebapp001/src/main/webapp/WEB-INF/views/Contacts/AddNew.jsp.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <html> <head> <title>Add New Contact</title> </head> <body> <form:form method="post" commandName="contact" action="addNew.html"> <table> <tr> <td colspan="2">Add a new contact.</td> </tr> <tr> <td><form:label path="firstname">First Name</form:label></td> <td><form:input path="firstname" /></td> </tr> <tr> <td><form:label path="lastname">Last Name</form:label></td> <td><form:input path="lastname" /></td> </tr> <tr> <td><form:label path="email">Email</form:label></td> <td><form:input path="email" /></td> </tr> <tr> <td><form:label path="telephone">Telephone</form:label></td> <td><form:input path="telephone" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="Add Contact" /></td> </tr> </table> </form:form> </body> </html> |
Эта форма должна быть поддержана Java Pojo, который будет содержать все элементы формы, упомянутые в JSP.
Файл: /springwebapp001/src/main/java/org/academy/ui/spring3/forms/ContactFrm.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package org.academy.ui.spring3.forms; public class ContactFrm { private String firstname; private String lastname; private String email; private String telephone; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } } |
Из AddNew.jsp вы можете увидеть, что форма ожидает, что кто-то обработает вызов addNew.html. Как и прежде, давайте вернемся к контроллеру и добавим метод, который обрабатывает запрос POST, в «addNew.html». Обратите внимание, что это запрос POST, а не запрос GET, который мы обрабатывали ранее.
Файл: /springwebapp001/src/main/java/org/academy/ui/spring3/controllers/ContactCtlr.java
|
01
02
03
04
05
06
07
08
09
10
|
[...] @RequestMapping(value = "/addNew", method = RequestMethod.POST) public ModelAndView addNewContact( @ModelAttribute("contact") ContactFrm contactFrm, BindingResult result) { logger.debug("Adding a new contact. {}", contactFrm.getFirstname()); // Some code to work on the data received from the user. return new ModelAndView(addNewView, "contact", new ContactFrm()); } [...] |
И вот, если вы скомпилируете и запустите это приложение в любом контейнере сервлетов, например Tomcat, вы получите ссылку, которая приведет к форме, которая позволит вам вводить данные, которые будут передавать эти данные на контроллер Java по адресу конец сервера, и вернитесь к форме для получения дополнительной информации. Те из зрителей, которые проектировали и разрабатывали веб-приложения до появления фреймворков MVC, наверняка будут иметь влажные глаза. Даже если вы работали с ранними фреймворками для MVC, Struts, чтобы назвать наиболее успешный, потратит много времени на объединение трех компонентов (M, V и C), что теперь мы можем сделать менее чем за 10 минут. Разработка программного обеспечения определенно прошла долгий путь.
В следующем разделе мы добавим модульное тестирование и ведение журнала в это приложение . Удачного кодирования.
Ссылки по теме
- Struts — единственный другой MVC-фреймворк, который я могу порекомендовать
- Разница между GET и POST
- Происхождение термина MVC
Перейдите к проверке формы с помощью Spring 3 MVC
Ссылка: Обработка форм с помощью Spring 3 MVC от нашего партнера по JCG Partho в блоге Tech for Enterprise .