Spring MVC - 커맨드 객체(Bean 객체를 통한 전달)

2020. 9. 8. 20:59Java/Spring

반응형

커맨드 객체

- 클라이언트가 전달해 주는 파라미터 데이터를 주입 받기 위해 사용하는 객체

- 커맨드 객체는 HttpServletRequest 객체에 자동으로 담기고 jsp로 전달된다.

- 이 때, HttpServletRequest 객체에 저장되는 이름은 클래스의 이름으로 결정된다.

 

index.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 action="test1" method="post">
	<input name="data1" />
	<input name="data2" />
	<button type="submit">확인</button>
</form>
</body>
</html>

 

커맨드객체 

public class DataBean {

	private String data1;
	private String data2;
	
	
	public String getData1() {
		return data1;
	}
	public void setData1(String data1) {
		this.data1 = data1;
	}
	public String getData2() {
		return data2;
	}
	public void setData2(String data2) {
		this.data2 = data2;
	}
	
	
}

Controller 객체

@Controller
public class TestController {
	@PostMapping("/test1")
	public String test1(@ModelAttribute DataBean bean) {
		return "test1";
	}
	
}

HttpServletRequest 객체에 DataBean이 자동으로 담겨서 전달된다.

위 메소드에서 @ModelAttribute는 생략되어도 된다.

 

test1.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>
data1: ${requestScope.dataBean.data1}
data1: ${requestScope.dataBean.data2}
</body>
</html>

전달 받는 jsp에서 해당 값을 사용 할 때 requestScope에 커맨드객체의 이름으로 값이 전달되는데 이때 커맨드 객체의 첫 글자는 소문자로 시작한다.

 


위에서 전달되는 커맨드 객체의 이름을 설정 가능하다.

 

- HttpServletRequest에 저장되는 이름을 지정하고 싶다면 ModelAttribute 어노테이션에 지정하면 된다.

 

@PostMapping("/test2")
public String test2(@ModelAttribute("testdata") DataBean bean) {
	return "test2";
}

위와 같이 저장시 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>
data1: ${requestScope.testdata.data1}
data1: ${requestScope.testdata.data2}
</body>
</html>
반응형