SPRING

[SPRING] 커맨드 객체

예나부기 2021. 7. 20.

커맨드 객체란?

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

Request 객체를 통해 전달

  • 커맨드 객체는 HttpServletRequest 객체에 자동으로 담기고 jsp로 전달된다.
  • 이 때, HttpServletRequest 객체에 저장되는 이름은 클래스의 이름으로 결정

예제

1)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'>
		data1 : <input type='text' name='data1'/><br/>
		data2 : <input type='text' name='data2'/><br/>
		<button type='submit'>확인</button>
	</form>

</body>
</html>

2) 커맨드 객체 생성하기 

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;
	}
	
}

-커맨드 객체에 정의된 프로퍼티와 동일한 이름의 파라미터를 찾아 set매소드를 통해 자동으로 담아준다.

3) TestController 생성해서 컨트롤러로 전달되는지 확인

@Controller
public class TestController {
	
	@PostMapping("/test1")
	public String test1(DataBean bean) { 
		System.out.printf("data1 : %s\n", bean.getData1());
		System.out.printf("data2 : %s\n", bean.getData2());
		
		return "test1";
	}
	
}

-파라미터를 담아 세팅 된 DataBean을 매개변수에 담아주고, 출력해보면 data1과 data2가 잘 넘어온 것을 확인 가능

-@ModelAttribute는 생략 가능! (@ModelAttribute DataBean bean)과 동일

-jsp로 전달 할 때 bean을 따로(직접) request에 담아 줄 필요가 없음. ModelAttribute를 통해 자동으로 request에 담아져

jsp에 전달됨 

4) test1.jsp 생성해서 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>
	<h1>test1</h1>
	<h3>data1 : ${requestScope.dataBean.data1 }</h3>
	<h3>data2 : ${requestScope.dataBean.data2 }</h3>
</body>
</html>

-request에 담겨져 오기 때문에 requestScope를 사용 (requestScope)

-어떠한 이름으로 저장될 까? >> bean의 클래스 이름의 camelCase  (.dataBean)

-.dataBean이 아닌 다른 이름을 쓰고 싶다면 어떻게 해야할까?

저장되는 이름 설정하기

  • HttpServletRequest에 저장되는 이름을 클래스명과 다르게 지정하고 싶다면
  • ModelAttribute 어노테이션에 지정하면 된다.
  • 이 때는 @ModelAttribute 생략하면 안 됨!

예제

1) 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='test2' method='post'>
		data1 : <input type='text' name='data1'/><br/>
		data2 : <input type='text' name='data2'/><br/>
		<button type='submit'>확인</button>
	</form>
    
</body>
</html>

2) TestController 생성하기

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

3. test2.jsp 생성해서 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>
	<h1>test2</h1>
	<h3>data1 : ${requestScope.testData.data1 }</h3>
	<h3>data2 : ${requestScope.testData.data2 }</h3>
</body>
</html>

 

'SPRING' 카테고리의 다른 글

[SPRING] FORM TAG 요소 - 1  (0) 2021.07.21
[SPRING] Form 커스텀 태그  (0) 2021.07.20
[SPRING] View Resolver 뷰리졸버  (0) 2021.07.19
[SPRING] 객체로 파라미터 주입 받기  (0) 2021.07.19
[SPRING] 파라미터 추출하기  (0) 2021.07.19

댓글