Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 제네릭
- abstract
- 한국건설관리시스템
- 생성자오버로드
- 객체 비교
- 다형성
- 자바
- 환경설정
- 인터페이스
- cursor문
- 사용자예외클래스생성
- 메소드오버로딩
- 참조형변수
- 추상메서드
- 집합_SET
- 어윈 사용법
- 예외처리
- GRANT VIEW
- oracle
- 정수형타입
- 컬렉션프레임워크
- 오라클
- 자동차수리시스템
- 예외미루기
- exception
- EnhancedFor
- 대덕인재개발원
- Java
- NestedFor
- 컬렉션 타입
Archives
- Today
- Total
거니의 velog
231123_SPRING 2 (2-2) 본문
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.vo;
import lombok.Data;
@Data
public class Member {
private String userId = "a001";
private String userName = "hongkd";
private String password = "1234";
private int coin = 100;
}
package kr.or.ddit.controller.member;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.vo;
import java.util.Date;
import lombok.Data;
@Data
public class Member {
private String userId = "a001";
private String userName = "hongkd";
private String password = "1234";
private int coin = 100;
private Date dateOfBirth;
}
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
}
- http://localhost/registerForm
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect03" method="post">
carList : <br />
<select name="carList" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
}
- http://localhost/registerForm
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect03" method="post">
carList : <br />
<select name="carList" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox01" method="post">
hobby : <br />
<input type="checkbox" name="hobby" value="sports" />Sports<br />
<input type="checkbox" name="hobby" value="music" />music<br />
<input type="checkbox" name="hobby" value="movie" />Movie<br />
<input type="checkbox" name="hobby" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox02" method="post">
hobbyArray : <br />
<input type="checkbox" name="hobbyArray" value="sports" />Sports<br />
<input type="checkbox" name="hobbyArray" value="music" />music<br />
<input type="checkbox" name="hobbyArray" value="movie" />Movie<br />
<input type="checkbox" name="hobbyArray" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox03" method="post">
hobbyList : <br />
<input type="checkbox" name="hobbyList" value="sports" />Sports<br />
<input type="checkbox" name="hobbyList" value="music" />music<br />
<input type="checkbox" name="hobbyList" value="movie" />Movie<br />
<input type="checkbox" name="hobbyList" value="book" />Book<br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
// 9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox01", method = RequestMethod.POST)
public String registerCheckbox01(String hobby) {
log.info("registerCheckbox01() 실행...!");
log.info("hobby : " + hobby);
return "success";
}
// 10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox02", method = RequestMethod.POST)
public String registerCheckbox02(String[] hobbyArray) {
log.info("registerCheckbox02() 실행...!");
log.info("hobbyArray : " + hobbyArray);
if(hobbyArray != null) {
log.info("hobbyArray.length : " + hobbyArray.length);
for(int i = 0; i < hobbyArray.length; i++) {
log.info("hobbyArray["+i+"] : " + hobbyArray[i]);
}
}else {
log.info("hobbyArray is null");
}
return "success";
}
// 11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox03", method = RequestMethod.POST)
public String registerCheckbox03(ArrayList<String> hobbyList) {
log.info("registerCheckbox03() 실행...!");
log.info("hobbyList : " + hobbyList);
if(hobbyList != null && hobbyList.size() > 0) {
log.info("hobbyList.size() : " + hobbyList.size());
for(int i = 0; i < hobbyList.size(); i++) {
log.info("hobbyList.size("+i+") : " + hobbyList.get(i));
}
}else {
log.info("hobbyList is null");
}
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect03" method="post">
carList : <br />
<select name="carList" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox01" method="post">
hobby : <br />
<input type="checkbox" name="hobby" value="sports" />Sports<br />
<input type="checkbox" name="hobby" value="music" />music<br />
<input type="checkbox" name="hobby" value="movie" />Movie<br />
<input type="checkbox" name="hobby" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox02" method="post">
hobbyArray : <br />
<input type="checkbox" name="hobbyArray" value="sports" />Sports<br />
<input type="checkbox" name="hobbyArray" value="music" />music<br />
<input type="checkbox" name="hobbyArray" value="movie" />Movie<br />
<input type="checkbox" name="hobbyArray" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox03" method="post">
hobbyList : <br />
<input type="checkbox" name="hobbyList" value="sports" />Sports<br />
<input type="checkbox" name="hobbyList" value="music" />music<br />
<input type="checkbox" name="hobbyList" value="movie" />Movie<br />
<input type="checkbox" name="hobbyList" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox05" method="post">
foreigner : <br />
<input type="checkbox" name="foreigner" value="true" />Sports<br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
// 9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox01", method = RequestMethod.POST)
public String registerCheckbox01(String hobby) {
log.info("registerCheckbox01() 실행...!");
log.info("hobby : " + hobby);
return "success";
}
// 10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox02", method = RequestMethod.POST)
public String registerCheckbox02(String[] hobbyArray) {
log.info("registerCheckbox02() 실행...!");
log.info("hobbyArray : " + hobbyArray);
if(hobbyArray != null) {
log.info("hobbyArray.length : " + hobbyArray.length);
for(int i = 0; i < hobbyArray.length; i++) {
log.info("hobbyArray["+i+"] : " + hobbyArray[i]);
}
}else {
log.info("hobbyArray is null");
}
return "success";
}
// 11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
// 체크박스도 컬렉션 리스트로는 데이터를 가져올 수 없다.
@RequestMapping(value = "/registerCheckbox03", method = RequestMethod.POST)
public String registerCheckbox03(ArrayList<String> hobbyList) {
log.info("registerCheckbox03() 실행...!");
log.info("hobbyList : " + hobbyList);
if(hobbyList != null && hobbyList.size() > 0) {
log.info("hobbyList.size() : " + hobbyList.size());
for(int i = 0; i < hobbyList.size(); i++) {
log.info("hobbyList.size("+i+") : " + hobbyList.get(i));
}
}else {
log.info("hobbyList is null");
}
return "success";
}
// 13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox05", method = RequestMethod.POST)
public String registerCheckbox05(boolean foreigner) {
log.info("registerCheckbox05() 실행...!");
log.info("foreigner : " + foreigner);
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect03" method="post">
carList : <br />
<select name="carList" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox01" method="post">
hobby : <br />
<input type="checkbox" name="hobby" value="sports" />Sports<br />
<input type="checkbox" name="hobby" value="music" />music<br />
<input type="checkbox" name="hobby" value="movie" />Movie<br />
<input type="checkbox" name="hobby" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox02" method="post">
hobbyArray : <br />
<input type="checkbox" name="hobbyArray" value="sports" />Sports<br />
<input type="checkbox" name="hobbyArray" value="music" />music<br />
<input type="checkbox" name="hobbyArray" value="movie" />Movie<br />
<input type="checkbox" name="hobbyArray" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox03" method="post">
hobbyList : <br />
<input type="checkbox" name="hobbyList" value="sports" />Sports<br />
<input type="checkbox" name="hobbyList" value="music" />music<br />
<input type="checkbox" name="hobbyList" value="movie" />Movie<br />
<input type="checkbox" name="hobbyList" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox05" method="post">
foreigner : <br />
<input type="checkbox" name="foreigner" value="true" />Sports<br />
<button type="submit">전송</button>
</form>
<p>14) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerAddress" method="post">
postCode : <input type="text" name="postCode" /><br />
location : <input type="text" name="location" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
[Address.java]
package kr.or.ddit.vo;
import lombok.Data;
@Data
public class Address {
private String postCode;
private String location;
}
package kr.or.ddit.controller.member;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
// 9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox01", method = RequestMethod.POST)
public String registerCheckbox01(String hobby) {
log.info("registerCheckbox01() 실행...!");
log.info("hobby : " + hobby);
return "success";
}
// 10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox02", method = RequestMethod.POST)
public String registerCheckbox02(String[] hobbyArray) {
log.info("registerCheckbox02() 실행...!");
log.info("hobbyArray : " + hobbyArray);
if(hobbyArray != null) {
log.info("hobbyArray.length : " + hobbyArray.length);
for(int i = 0; i < hobbyArray.length; i++) {
log.info("hobbyArray["+i+"] : " + hobbyArray[i]);
}
}else {
log.info("hobbyArray is null");
}
return "success";
}
// 11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
// 체크박스도 컬렉션 리스트로는 데이터를 가져올 수 없다.
@RequestMapping(value = "/registerCheckbox03", method = RequestMethod.POST)
public String registerCheckbox03(ArrayList<String> hobbyList) {
log.info("registerCheckbox03() 실행...!");
log.info("hobbyList : " + hobbyList);
if(hobbyList != null && hobbyList.size() > 0) {
log.info("hobbyList.size() : " + hobbyList.size());
for(int i = 0; i < hobbyList.size(); i++) {
log.info("hobbyList.size("+i+") : " + hobbyList.get(i));
}
}else {
log.info("hobbyList is null");
}
return "success";
}
// 13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox05", method = RequestMethod.POST)
public String registerCheckbox05(boolean foreigner) {
log.info("registerCheckbox05() 실행...!");
log.info("foreigner : " + foreigner);
return "success";
}
// 14) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerAddress", method = RequestMethod.POST)
public String registerAddress(Address address) {
log.info("registerAddress() 실행...!");
if(address != null) {
log.info("address.postCode : " + address.getPostCode());
log.info("address.location : " + address.getLocation());
}
return "success";
}
}
- http://localhost/registerForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect03" method="post">
carList : <br />
<select name="carList" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox01" method="post">
hobby : <br />
<input type="checkbox" name="hobby" value="sports" />Sports<br />
<input type="checkbox" name="hobby" value="music" />music<br />
<input type="checkbox" name="hobby" value="movie" />Movie<br />
<input type="checkbox" name="hobby" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox02" method="post">
hobbyArray : <br />
<input type="checkbox" name="hobbyArray" value="sports" />Sports<br />
<input type="checkbox" name="hobbyArray" value="music" />music<br />
<input type="checkbox" name="hobbyArray" value="movie" />Movie<br />
<input type="checkbox" name="hobbyArray" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox03" method="post">
hobbyList : <br />
<input type="checkbox" name="hobbyList" value="sports" />Sports<br />
<input type="checkbox" name="hobbyList" value="music" />music<br />
<input type="checkbox" name="hobbyList" value="movie" />Movie<br />
<input type="checkbox" name="hobbyList" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox05" method="post">
foreigner : <br />
<input type="checkbox" name="foreigner" value="true" />Sports<br />
<button type="submit">전송</button>
</form>
<p>14) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerAddress" method="post">
postCode : <input type="text" name="postCode" /><br />
location : <input type="text" name="location" /><br />
<button type="submit">전송</button>
</form>
<p>15) 폼 텍스트 필드 요소값을 중첩된 자바 빈즈 매개변수로 처리한다.</p>
<form action="/registerUserAddress" method="post">
postCode : <input type="text" name="postCode" /><br />
location : <input type="text" name="location" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.vo;
import java.util.Date;
import java.util.List;
import lombok.Data;
@Data
public class Member {
private String userId = "a001";
private String userName = "hongkd";
private String password = "1234";
private int coin = 100;
private Date dateOfBirth;
private String email;
private String gender;
private String hobby;
private String[] hobbyArray;
private List<String> hobbyList;
private boolean foreigner;
private String developer;
private String nationality;
private Address address;
private List<Card> cardList;
private String cars;
private String[] carArray;
private List<String> carList;
private String introduction;
private String birthDay;
}
[Card.java]
package kr.or.ddit.vo;
import java.util.Date;
import lombok.Data;
@Data
public class Card {
private String no;
private Date validMonth;
}
package kr.or.ddit.controller.member;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
// 9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox01", method = RequestMethod.POST)
public String registerCheckbox01(String hobby) {
log.info("registerCheckbox01() 실행...!");
log.info("hobby : " + hobby);
return "success";
}
// 10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox02", method = RequestMethod.POST)
public String registerCheckbox02(String[] hobbyArray) {
log.info("registerCheckbox02() 실행...!");
log.info("hobbyArray : " + hobbyArray);
if(hobbyArray != null) {
log.info("hobbyArray.length : " + hobbyArray.length);
for(int i = 0; i < hobbyArray.length; i++) {
log.info("hobbyArray["+i+"] : " + hobbyArray[i]);
}
}else {
log.info("hobbyArray is null");
}
return "success";
}
// 11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
// 체크박스도 컬렉션 리스트로는 데이터를 가져올 수 없다.
@RequestMapping(value = "/registerCheckbox03", method = RequestMethod.POST)
public String registerCheckbox03(ArrayList<String> hobbyList) {
log.info("registerCheckbox03() 실행...!");
log.info("hobbyList : " + hobbyList);
if(hobbyList != null && hobbyList.size() > 0) {
log.info("hobbyList.size() : " + hobbyList.size());
for(int i = 0; i < hobbyList.size(); i++) {
log.info("hobbyList.size("+i+") : " + hobbyList.get(i));
}
}else {
log.info("hobbyList is null");
}
return "success";
}
// 13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox05", method = RequestMethod.POST)
public String registerCheckbox05(boolean foreigner) {
log.info("registerCheckbox05() 실행...!");
log.info("foreigner : " + foreigner);
return "success";
}
// 14) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerAddress", method = RequestMethod.POST)
public String registerAddress(Address address) {
log.info("registerAddress() 실행...!");
if(address != null) {
log.info("address.postCode : " + address.getPostCode());
log.info("address.location : " + address.getLocation());
}
return "success";
}
// 15) 폼 텍스트 필드 요소값을 중첩된 자바 빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerUserAddress", method = RequestMethod.POST)
public String registerUserAddress(Member member) {
log.info("registerUserAddress() 실행...!");
log.info("member.address.postCode : " + member.getAddress().getPostCode());
log.info("member.address.location : " + member.getAddress().getLocation());
return "success";
}
}
- http://localhost/registerForm
<p>15) 폼 텍스트 필드 요소값을 중첩된 자바 빈즈 매개변수로 처리한다.</p>
<form action="/registerUserAddress" method="post">
postCode : <input type="text" name="address.postCode" /><br />
location : <input type="text" name="address.location" /><br />
<button type="submit">전송</button>
</form>
// 15) 폼 텍스트 필드 요소값을 중첩된 자바 빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerUserAddress", method = RequestMethod.POST)
public String registerUserAddress(Member member) {
log.info("registerUserAddress() 실행...!");
Address address = member.getAddress();
if(address != null) {
log.info("address.postCode : " + address.getPostCode());
log.info("address.location : " + address.getLocation());
}else {
log.info("address is null");
}
return "success";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RegisterForm</title>
</head>
<body>
<h3>REGISTER FORM</h3>
<hr /><br />
<h4>2. 요청 처리</h4>
<hr />
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234">Button1</a>
<br />
<p>2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd">Button2</a>
<br />
<p>
3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.<br />
</p>
<form action="/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<p>
4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.<br />
</p>
<form action="/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<br />
<hr /><br />
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr />
<p>1) URL 경로 상의 경로 변수가 여러 개일 떄, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100">Button3</a><br />
<p>2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>4. 요청 처리 자바빈즈</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
coin : <input type="text" name="coin" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>5. Date 타입 처리</h4>
<hr />
<p>1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환에 실패한다.</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=1234">button1</a><br />
<p>2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018-09-08">button2</a><br />
<p>3) 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=20180908">button3</a><br />
<p>4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet01?userId=hong&dateOfBirth=2018/09/08">button4</a><br />
<p>5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<a href="/registerByGet02?userId=hong&dateOfBirth=20180908">button4</a><br />
<p>6) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/register" method="post">
userId : <input type="text" name="userId" /><br />
password : <input type="text" name="password" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>6. @DateTimeFormat 어노테이션</h4>
<hr />
<p>1) Member 매개변수와 폼 방식 요청으로 전달받은 값이 날짜 문자열 형식으로 설정 시, Date 타입으로 받는가?</p>
<form action="/registerByGet03" method="post">
userId : <input type="text" name="userId" /><br />
dateOfBirth : <input type="text" name="dateOfBirth" /><br />
<button type="submit">전송</button>
</form>
<hr /><br />
<h4>7. 폼 방식 요청 처리</h4>
<hr />
<p>1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerMemberUserId" method="post">
userId : <input type="text" name="userId" /><br />
<button type="submit">전송</button>
</form>
<p>3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerPassword" method="post">
password : <input type="password" name="password" /><br />
<button type="submit">전송</button>
</form>
<p>4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerRadio" method="post">
gender : <br />
<input type="radio" name="gender" value="male" checked="checked" />Male<br />
<input type="radio" name="gender" value="female" />Female<br />
<input type="radio" name="gender" value="other" />Other<br />
<button type="submit">전송</button>
</form>
<p>5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerSelect" method="post">
nationality : <br />
<select name="nationality">
<option value="korea">대한민국</option>
<option value="germany">독일</option>
<option value="austrailia">호주</option>
<option value="canada">캐나다</option>
<option value="usa">미국</option>
</select>
<button type="submit">전송</button>
</form>
<p>6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect01" method="post">
cars : <br />
<select name="cars" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect02" method="post">
carArray : <br />
<select name="carArray" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerMultiSelect03" method="post">
carList : <br />
<select name="carList" multiple="multiple">
<option value="jeep">JEEP</option>
<option value="volvo">VOLVO</option>
<option value="bmw">BMW</option>
<option value="audi">AUDI</option>
</select>
<button type="submit">전송</button>
</form>
<p>9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox01" method="post">
hobby : <br />
<input type="checkbox" name="hobby" value="sports" />Sports<br />
<input type="checkbox" name="hobby" value="music" />music<br />
<input type="checkbox" name="hobby" value="movie" />Movie<br />
<input type="checkbox" name="hobby" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox02" method="post">
hobbyArray : <br />
<input type="checkbox" name="hobbyArray" value="sports" />Sports<br />
<input type="checkbox" name="hobbyArray" value="music" />music<br />
<input type="checkbox" name="hobbyArray" value="movie" />Movie<br />
<input type="checkbox" name="hobbyArray" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox03" method="post">
hobbyList : <br />
<input type="checkbox" name="hobbyList" value="sports" />Sports<br />
<input type="checkbox" name="hobbyList" value="music" />music<br />
<input type="checkbox" name="hobbyList" value="movie" />Movie<br />
<input type="checkbox" name="hobbyList" value="book" />Book<br />
<button type="submit">전송</button>
</form>
<p>13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.</p>
<form action="/registerCheckbox05" method="post">
foreigner : <br />
<input type="checkbox" name="foreigner" value="true" />Sports<br />
<button type="submit">전송</button>
</form>
<p>14) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerAddress" method="post">
postCode : <input type="text" name="postCode" /><br />
location : <input type="text" name="location" /><br />
<button type="submit">전송</button>
</form>
<p>15) 폼 텍스트 필드 요소값을 중첩된 자바 빈즈 매개변수로 처리한다.</p>
<form action="/registerUserAddress" method="post">
postCode : <input type="text" name="address.postCode" /><br />
location : <input type="text" name="address.location" /><br />
<button type="submit">전송</button>
</form>
<p>16) 폼 텍스트 필드 요소값을 중첩된 자바빈즈 매개변수로 처리한다.</p>
<form action="/registerUserCardList" method="post">
카드1 - 번호 : <input type="text" name="cardList[0].no" /><br />
카드1 - 유효년월 : <input type="text" name="cardList[0].validMonth" /><br />
카드2 - 번호 : <input type="text" name="cardList[1].no" /><br />
카드2 - 유효년월 : <input type="text" name="cardList[1].validMonth" /><br />
<button type="submit">전송</button>
</form>
</body>
</html>
package kr.or.ddit.controller.member;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class MemberController {
/*
* [ 5장 : 컨트롤러 요청 처리 ]
*
* 1. 컨트롤러 메서드 매개변수
*
* - Model : 이동 대상에 전달할 데이터를 가지고 있는 인터페이스
* - RedirectAttributes : 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
* - 자바빈즈 클래스 : 요청 파라미터를 가지고 있는 자바빈즈 클래스
* - MultipartFile : 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
* - BindingResult : 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스
* - Locale : 클라이언트 Locale
* - Principal : 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
*/
// 요청 처리 페이지
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
log.info("registerForm() 실행...!");
return "member/registerForm";
}
// 1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
log.info("registerByParameter() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 2) URL 경로 상의 경로 변수로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register/{userId}", method = RequestMethod.GET)
public String registerByPath(@PathVariable String userId) {
// 넘겨 받은 userId를 경로상에서 꺼낼 때, @PathVariable를 이용한다.
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
// 그리고, 매개변수의 위치는 순서에 상관없고 오직 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId, String password) {
log.info("register01() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
return "success";
}
// 4) HTML Form 필드 값이 숫자일 경우에는 숫자로 타입 변환되어 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password, int coin) {
log.info("register02() 실행...!");
log.info("userId : " + userId);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 3. 요청 데이터 처리 어노테이션
*
* - @PathVariable : URL에서 경로 변수 값을 가져오기 위한 어노테이션
* - @RequestParam : 요청 파라미터 값을 가져오기 위한 어노테이션
* - @RequestHeader : 요청 헤더 값을 가져오기 위한 어노테이션
* - @RequestBody : 요청 본문 내용을 가져오기 위한 어노테이션
* - @CookieValue : 쿠키 값을 가져오기 위한 어노테이션
*/
// 1) URL 경로 상의 경로 변수가 여러 개 일때 @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해 준다.
@RequestMapping(value = "/register/{userId}/{coin}", method = RequestMethod.GET)
public String registerByPath(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("registerByPath() 실행...!");
log.info("userId : " + userId);
log.info("coin : " + coin);
return "success";
}
// 2) @RequestParam 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202", method = RequestMethod.POST)
public String register0202(
@RequestParam("userId") String username, String password, int coin
) {
log.info("registerByPath() 실행...!");
log.info("username : " + username);
log.info("password : " + password);
log.info("coin : " + coin);
return "success";
}
/*
* 4. 요청 처리 자바빈즈
*/
// 1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST)
public String registerBeans01(Member member) {
log.info("registerBeans01() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
return "success";
}
// 2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerBeans02(Member member, int coin) {
log.info("registerBeans02() 실행...!");
log.info("mamber.userId : " + member.getUserId());
log.info("mamber.password : " + member.getPassword());
log.info("mamber.coin : " + member.getCoin());
log.info("coin : " + coin);
return "success";
}
/*
* 5. Date 타입 처리
*
* - 스프링 MVC는 Date 타입의 데이터를 처리하는 여러 가지 방법을 제공한다.
* - 클라이언트에서 날짜 데이터를 서버로 보낼 때에는 '년/월/일' 형식에 맞춰서 보내야 한다.
*/
// 1)
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET)
public String registerByGet01(String userId, Date dateOfBirth) {
log.info("registerByGet01() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
// 2)
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member) {
log.info("registerByGet02() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
// 3)
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member) {
log.info("register() 실행...!");
log.info("member.userId : " + member.getUserId());
log.info("member.password : " + member.getPassword());
log.info("member.dateOfBirth : " + member.getDateOfBirth());
return "success";
}
/*
* 6. @DateTimeFormat 어노테이션
*
* - @DateTimeFormat 어노테이션의 pattern 속성 값에 원하는 날짜형식을 지정할 수 있다.
*/
@RequestMapping(value = "/registerByGet03", method = RequestMethod.POST)
public String registerByGet03(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth) {
log.info("registerByGet03() 실행...!");
log.info("userId : " + userId);
log.info("dateOfBirth : " +dateOfBirth);
return "success";
}
/*
* 7. 폼 방식 요청 처리
*/
// 1) 폼 텍스트 필드 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerUserId", method = RequestMethod.POST)
public String registerUserId(String userId) {
log.info("registerUserId() 실행...!");
log.info("userId : " + userId);
return "success";
}
// 2) 폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerMemberUserId", method = RequestMethod.POST)
public String registerMemberUserId(Member member) {
log.info("registerMemberUserId() 실행...!");
log.info("member.userId : " + member.getUserId());
return "success";
}
// 3) 폼 비밀번호 필드 요소 값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerPassword", method = RequestMethod.POST)
public String registerPassword(Member member) {
log.info("registerPassword() 실행...!");
log.info("member.password : " + member.getPassword());
return "success";
}
// 4) 폼 라디오 버튼 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerRadio", method = RequestMethod.POST)
public String registerRadio(String gender) {
log.info("registerRadio() 실행...!");
log.info("gender : " + gender);
return "success";
}
// 5) 폼 셀렉트 박스 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerSelect", method = RequestMethod.POST)
public String registerSelect(String nationality) {
log.info("registerSelect() 실행...!");
log.info("nationality : " + nationality);
return "success";
}
// 6) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect01", method = RequestMethod.POST)
public String registerMultiSelect01(String cars) {
log.info("registerMultiSelect01() 실행...!");
log.info("cars : " + cars);
return "success";
}
// 7) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect02", method = RequestMethod.POST)
public String registerMultiSelect02(String[] carArray) {
log.info("registerMultiSelect02() 실행...!");
log.info("carArray : " + carArray);
if(carArray != null) {
log.info("carArray.length : " + carArray.length);
for(int i = 0; i < carArray.length; i++) {
log.info("carArray["+i+"] : " + carArray[i]);
}
}else {
log.info("carArray is null");
}
return "success";
}
// 8) 복수 선택이 가능한 폼 셀렉트 박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerMultiSelect03", method = RequestMethod.POST)
public String registerMultiSelect03(ArrayList<String> carList) {
// 받는 타입을 List로 하게 되면 No primary or default constructor found for interface java.util.List 에러 발생
// 스프링에서는 List 타입으로 데이터를 받는 데에 문제가 있다. (데이터 바인딩이 안 됨)
// 리스트와 같은 형태의 값을 받으려면 String[]로 여러 데이터를 받아 주거나 객체 안에 있는 List 필드로 받아야 한다.
log.info("registerMultiSelect03() 실행...!");
log.info("carList : " + carList);
if(carList != null && carList.size() > 0) { // 데이터가 존재
log.info("carList.size() : " + carList.size());
for(int i = 0; i < carList.size(); i++) {
log.info("carList.get("+i+") : " + carList.get(i));
}
}else {
log.info("carList is null");
}
return "success";
}
// 9) 폼 체크박스 요소값을 기본 데이터 타입인 문자열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox01", method = RequestMethod.POST)
public String registerCheckbox01(String hobby) {
log.info("registerCheckbox01() 실행...!");
log.info("hobby : " + hobby);
return "success";
}
// 10) 폼 체크박스 요소값을 문자열 배열 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox02", method = RequestMethod.POST)
public String registerCheckbox02(String[] hobbyArray) {
log.info("registerCheckbox02() 실행...!");
log.info("hobbyArray : " + hobbyArray);
if(hobbyArray != null) {
log.info("hobbyArray.length : " + hobbyArray.length);
for(int i = 0; i < hobbyArray.length; i++) {
log.info("hobbyArray["+i+"] : " + hobbyArray[i]);
}
}else {
log.info("hobbyArray is null");
}
return "success";
}
// 11) 폼 체크박스 요소값을 문자열 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.
// 체크박스도 컬렉션 리스트로는 데이터를 가져올 수 없다.
@RequestMapping(value = "/registerCheckbox03", method = RequestMethod.POST)
public String registerCheckbox03(ArrayList<String> hobbyList) {
log.info("registerCheckbox03() 실행...!");
log.info("hobbyList : " + hobbyList);
if(hobbyList != null && hobbyList.size() > 0) {
log.info("hobbyList.size() : " + hobbyList.size());
for(int i = 0; i < hobbyList.size(); i++) {
log.info("hobbyList.size("+i+") : " + hobbyList.get(i));
}
}else {
log.info("hobbyList is null");
}
return "success";
}
// 13) 폼 체크박스 요소값을 기본 데이터 타입인 불리언 타입 매개변수로 처리한다.
@RequestMapping(value = "/registerCheckbox05", method = RequestMethod.POST)
public String registerCheckbox05(boolean foreigner) {
log.info("registerCheckbox05() 실행...!");
log.info("foreigner : " + foreigner);
return "success";
}
// 14) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerAddress", method = RequestMethod.POST)
public String registerAddress(Address address) {
log.info("registerAddress() 실행...!");
if(address != null) {
log.info("address.postCode : " + address.getPostCode());
log.info("address.location : " + address.getLocation());
}
return "success";
}
// 15) 폼 텍스트 필드 요소값을 중첩된 자바 빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerUserAddress", method = RequestMethod.POST)
public String registerUserAddress(Member member) {
log.info("registerUserAddress() 실행...!");
Address address = member.getAddress();
if(address != null) {
log.info("address.postCode : " + address.getPostCode());
log.info("address.location : " + address.getLocation());
}else {
log.info("address is null");
}
return "success";
}
// 16) 폼 텍스트 필드 요소값을 중첩된 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/registerUserCardList", method = RequestMethod.POST)
public String registerUserCardList(Member member) {
log.info("registerUserCardList() 실행...!");
List<Card> cardList = member.getCardList();
if(cardList != null && cardList.size() > 0) {
log.info("cardList.size() : " + cardList.size());
for(int i = 0; i < cardList.size(); i++) {
Card card = cardList.get(i);
log.info("card["+i+"].no : " + card.getNo());
log.info("card["+i+"].validMonth : " + card.getValidMonth());
}
}else {
log.info("cardList is null");
}
return "success";
}
}
- http://localhost/registerForm
'대덕인재개발원 > 대덕인재개발원_웹기반 애플리케이션' 카테고리의 다른 글
231124_SPRING 2 (3-1) (2) | 2023.11.24 |
---|---|
231123_SPRING 2 (2-3) 과제 (0) | 2023.11.23 |
231123_SPRING 2 (2-1) (0) | 2023.11.23 |
231122_SPRING 2 (1-2) (0) | 2023.11.22 |
231122_SPRING 2 (1-1) (0) | 2023.11.22 |