티스토리 뷰
화면으로 부터 사용자가 입력한 정보를 Controller가 넘겨받을 때 보통 HttpServletRequest 객체를 이용하거나 @RequestParam어노테이션을 이용한다. 이후 model 객체를 활용해 view단으로 데이터를 전송해 사용자에게 보여진다.
model 객체와 HttpServletRequest 객체를 활용해 입력한 정보를 받고 해당 정보를 view로 보내는 과정을 진행해보고, 그로인해 발생할 수 있는 단점(단순반복코드)을 스프링에서 제공하는 커맨드 객체를 이용해 보완해보겠다.
커맨드 객체
HttpServletRequest를 통해 들어온 RequestParameter들을 setter를 이용해 객체에 정의되어있는 변수에 값이 바인딩 되는 객체를 의미한다.
커맨드 객체를 활용하기 위해선 HttpServletRequest를 통해 들어온 RequestParameter의 key값과 커맨드 객체의 변수명이 같아야하며, setter를 가지고 있어야한다. 즉, memberJoin.html에서 넘어오는 name 속성의 값이 Member.java(DTO)에 정의된 변수명이 일치해야하며, setter가 정의되어있어야한다.
화면 흐름
Member.java - DTO
public class Member {
private String memId;
private String memPw;
private String memMail;
private String memPhone1;
private String memPhone2;
private String memPhone3;
//getter and setter
}
회원정보 데이터베이스 정보이다. 아이디, 패스워드, 이메일, 전화번호(010-1234-1234) 표현을 위한 변수가 지정되어있으며, getter와 setter를 포함한다.
MemberJoin.html - 회원가입 페이지
<body>
<h1>Member Join</h1>
<form action="/pjt/memJoin" method="post">
ID : <input type="text" name="memId" ><br />
PW : <input type="password" name="memPw" ><br />
MAIL : <input type="text" name="memMail" ><br />
PHONE : <input type="text" name="memPhone1" size="5"> -
<input type="text" name="memPhone2" size="5"> -
<input type="text" name="memPhone3" size="5"><br />
<input type="submit" value="Join" >
<input type="reset" value="Cancel" >
</form>
</body>
html로 작성된 회원가입 폼이다. 회원정보이기 때문에 POST 방식을 활용해 전달되며, name 속성에 에 지정되어있는 값을 활용해 Controller에서 request를 처리한다.
Controller - HttpServletRequest
@Autowired
MemberService service;
@RequestMapping(value="/memJoin", method=RequestMethod.POST)
public String memJoin(Model model, HttpServletRequest request) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
String memMail = request.getParameter("memMail");
String memPhone1 = request.getParameter("memPhone1");
String memPhone2 = request.getParameter("memPhone2");
String memPhone3 = request.getParameter("memPhone3");
service.memberRegister(memId, memPw, memMail, memPhone1, memPhone2, memPhone3);
model.addAttribute("memId", memId);
model.addAttribute("memPw", memPw);
model.addAttribute("memMail", memMail);
model.addAttribute("memPhone", memPhone1 + " - " + memPhone2 + " - " + memPhone3);
return "memJoinOk";
}
HttpServletRequest를 이용해 회원가입시 작성된 값들을 불러와 service, dao 단에서 회원가입을 처리한 뒤, model 객체를 활용해 view단에 request 받은 값들을 넘겨준다.
memJoinOk.jsp
<body>
<h1> memJoinOk </h1>
ID : ${memId}<br />
PW : ${memPw}<br />
Mail : ${memMail} <br />
Phone : ${memPhone} <br />
</body>
커맨드 객체 활용
위의 방식을 이용하더라도 동작에 문제는 없지만, 사용자 요청을 처리하는 과정에서 Controller 단 코드가 길어지고 값을 가져오고 view단으로 보내는 단순한 코드가 반복된다. 스프링이 지원하는 커맨드 객체를 이용하면 이러한 과정에서 작성되는 코드량을 줄일 수 있다.
Controller - 커맨드 객체
@RequestMapping(value="/memJoin", method=RequestMethod.POST)
public String memJoin(Member member) {
service.memberRegister(member.getMemId(), member.getMemPw(), member.getMemMail()
, member.getMemPhone1(), member.getMemPhone2(), member.getMemPhone3());
return "memJoinOk";
}
매개변수로 Member(DTO)를 받음으로써 getter와 setter메소드를 활용해 값을 설정할 수 있다.
회원가입시 사용자가 작성한 값들이 넘어오면 Memeber.java 변수명과 일치하는 name속성에 대해 setter가 적용되어 넘어온 값들을 받아준다.
service 단으로 넘길 때 인자는 getter를 활용하며, view에서도 커맨드 객체를 이용할 수 있어졌기 때문에 데이터를 view 단으로 넘길 때 필요한 model 객체 또한 필요없어졌다.
memJoinOk.jsp
<body>
<h1> memJoinOk </h1>
ID : ${member.memId}<br />
PW : ${member.memPw}<br />
Mail : ${member.memMail} <br />
Phone : ${member.memPhone1} ${member.memPhone2} ${member.memPhone3}<br />
</body>
Controller 단에서 선언된 객체명은 member.변수명 을 입력하면 getter를 활용해 view에서도 값을 가져올 수 있다.
만약, view로 넘어오는 객체 명을 변경하고 싶다면, Controller에서 @ModelAttribute 어노테이션을 이용하면 된다.
출처 : [인프런] 자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
'Programming > Spring' 카테고리의 다른 글
스프링 세션(Session)과 쿠키(Cookie) 활용 및 차이점 (0) | 2022.04.12 |
---|---|
스프링 @ModelAttribute 활용 (0) | 2022.04.11 |
스프링 MVC 패턴과 DispatcherServlet (0) | 2022.04.02 |
Java파일 (어노테이션)을 이용한 스프링 컨테이너 설정 (0) | 2022.03.22 |
스프링 컨테이너와 Bean객체의 생명주기 (0) | 2022.03.19 |
- Total
- Today
- Yesterday
- JVM
- 오라클
- Java
- CS
- 데이터베이스
- 이클립스
- 부트스트랩
- CSS
- 오류
- HeidiSQL
- Thymeleaf
- JSP
- 스프링부트
- SQL
- 백준
- 네트워크
- svn
- C
- 넥사크로
- Open API
- 프로그래머스
- 스프링
- 인턴
- 개발용어
- C++
- 국비교육
- 환경설정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |