다음과 같이 사용자의 이름, 이메일, 나이의 정보를 입력받는 페이지를 만들어봤다. (userform.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="regist">
name : <input type="text" name="name"> <br>
email : <input type="text" name="email"><br>
age : <input type="text" name="age"><br>
<input type="submit" value="제출">
</form>
</body>
</html>
그리고 userform.jsp를 반환해주는 Controller도 작성하였다.
@Controller
public class UserController {
@RequestMapping(method = RequestMethod.GET, path = "/userform")
public String userform() {
return "userform";
}
}
다음으로 제출버튼을 눌렀을 때 보여지는 화면(regist.jsp)의 Controller도 작성하였다.
코드를 보면 파라미터로 이름, 이메일, 나이를 가져와서 ModelMap객체에 삽입하는 것을 볼 수 있다.
package kr.or.connect.mvcexam.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.connect.mvcexam.dto.User;
@Controller
public class UserController {
@RequestMapping(method = RequestMethod.GET, path = "/userform")
public String userform() {
return "userform";
}
@PostMapping(path = "/regist")
public String regist(@RequestParam(name = "name",required = true)String name,
@RequestParam(name = "email",required = true)String email,
@RequestParam(name = "age",required = true)int age, ModelMap model) {
model.addAttribute("name", name);
model.addAttribute("email", email);
model.addAttribute("age", age);
return "regist";
}
}
하지만 이렇게 하면 코드가 길어진다. 그래서 이름, 이메일, 나이를 필드로하는 User DTO를 사용해서 위 부분을 수정하였다. 보다 간결해졌다.
@ModelAttribute는 데이터를 담을 그릇인 User 클래스의 getter와 setter를 사용하여 객체에 정보를 넣어주는 역할을 한다.
아래와 같이 @ModelAttribute("person") 이라고 하면 regist.jsp파일의 EL표기법에서 ${person.name}, ${person.age} 등과 같이 접근가능하다. 또 @ModelAttribute User user라고 선언한 경우 객체명인 ${user.name}, ${user.age}등과 같이 접근이 가능하다.
package kr.or.connect.mvcexam.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.connect.mvcexam.dto.User;
@Controller
public class UserController {
@RequestMapping(method = RequestMethod.GET, path = "/userform")
public String userform() {
return "userform";
}
@PostMapping(path = "/regist")
public String regist(@ModelAttribute("person") User user) {
System.out.println("사용자가 입력한 user정보입니다.");
System.out.println(user);
return "regist";
}
}
사용자 정보를 담기 위해 User 클래스를 만들었다.
주의할 점은 필드명은 userform.jsp에서 각각 매칭되는 name과 이름이 같아야한다.
package kr.or.connect.mvcexam.dto;
public class User {
// 여기서 필드명은 userform.jsp파일의 name명과 일치해야 스프링이 인식할 수 있다.
private String name;
private String email;
private int age;
// 스프링이 접근하기 쉽도록 setter와 getter을 만들어준다..
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", email=" + email + ", age=" + age + "]";
}
}
만약 아래사진과 같이 필드명을 name에서 name2로 지정하게되면, name이 setter에 제대로 담기지 않아 null이 출력된다.
다음은 결과화면인 regist.jsp 파일과 그 출력이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름 : ${person.name} <br>
나이 : ${person.age}
</body>
</html>
'Spring > 공부' 카테고리의 다른 글
[Spring MVC] DataSource 이해하기 (0) | 2021.02.02 |
---|---|
[Spring MVC] ContextLoaderListener 알아보기 (0) | 2021.02.02 |
[Spring MVC] Controller, Mapping 이해하기 (0) | 2021.02.01 |
[Spring MVC] DispatcherServlet을 FrontController로 설정하기 (0) | 2021.01.31 |
[Spring MVC] maven파일 생성 및 초기 설정하기 (0) | 2021.01.30 |