다음과 같이 사용자의 이름, 이메일, 나이의 정보를 입력받는 페이지를 만들어봤다. (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>

 

 

 

+ Recent posts