MemberController.java / registerForm.jsp
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
// 5장 . 컨트롤러 요청 처리
// 1. 컨트롤러 메서드 매개변수 / 2. 요청처리
// 컨트롤러 요청 처리를 위한 registerForm시작점(시작 페이지)
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
logger.info("registerForm");
return "member/registerForm";
}
주요 매개 변수
[요청과 처리]
요청 : /register?userId=hongkd&password=1234 (a태그를 이용)
처리 : registerByparameter(String userId, String password)
[요청과 처리]
요청 : /register/hongkd (a태그를 이용)
처리 : String registerByPath(String userId)
[요청과 처리]
요청 : /register01 (form 태그를 이용)
처리 : String register01(String userId)
[요청과 처리]
요청 : /register02 (form 태그를 이용)
처리 : String register02(String userId, String password)
[요청과 처리]
요청 : /register03 (form 태그를 이용)
처리 : String register03(String password, String userId)
[요청과 처리]
요청 : /register04 (form 태그를 이용)
처리 : String register04(String userId, String password, String coin)
[요청과 처리]
요청 : /register05 (form 태그를 이용)
처리 : String register05(String userId, String password, int coin)
<h1>register Form</h1>
<hr/>
<!-- 5장. 컨트롤러 요청 처리 -->
<!-- 1. 컨트롤러 메서드 매개변수 & 요청처리 -->
<!-- 1) -->
<p>1) URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register?userId=hongkd&password=1234" >/register?userId=hongkd&password=1234</a>
<hr/>
<!-- 2) -->
<p>2) URL 경로 상의 경로 변수로 부터 요청 데이터를 취득할 수 <font style="color: red;">없다.</font></p>
<a href="/register/hongkd" >/register/hongkd</a>
<hr/>
<!-- 3) -->
<p>3) HTML Form 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.</p>
<form action="/register01" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register01"/> </p>
</form>
<hr/>
<!-- 4) -->
<p>4) HTML Form 필드가 여러개일 경우에도 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.</p>
<form action="/register02" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register02"/> </p>
</form>
<hr/>
<!-- 5) -->
<p>5) HTML Form 필드가 여러개일 경우에 컨트롤러 매개변수의 위치는 상관없다.</p>
<form action="/register03" method="post">
<p>uid : <input type="text" name="uid" value="50"/> </p>
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register03"/> </p>
</form>
<hr/>
<!-- 6) -->
<p>6) HTML Form 필드값이 숫자일 경우에는 컨트롤러 매개변수 타입이 문자열이면 그대로 문자열 형태로 요청 데이터를 취득한다.</p>
<form action="/register04" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register04"/> </p>
</form>
<hr/>
<!-- 7) -->
<p>7) HTML Form 필드값이 숫자일 경우에는 컨트롤러 매개변수 타입이 숫자형이면 숫자로 타입변환하여 요청 데이터를 취득한다.</p>
<form action="/register05" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register05"/> </p>
</form>
<hr/>
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
// 5장 . 컨트롤러 요청 처리
// 1. 컨트롤러 메서드 매개변수 / 2. 요청처리
// 컨트롤러 요청 처리를 위한 registerForm시작점(시작 페이지)
@RequestMapping(value = "/registerForm", method = RequestMethod.GET)
public String registerForm() {
logger.info("registerForm");
return "member/registerForm";
}
// 1)
// URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerByParameter(String userId, String password) {
logger.info("registerByParameter");
logger.info("userId : " + userId);
logger.info("password : " + password);
return "success";
}
// 2)
// URL 경로상의 경로 변수로부터 요청 데이터르 취득할 수 없다.
@RequestMapping(value = "/register/{userId}")
public String registerByPath(String userId) { //public String registerByPath(@PathVariable String userId) { 이거면 null아니고 받을 수 있음
// userId가 null로 표시됩니다.
// 넘겨받은 id를 위와 같은 형태로 받을려면
// @PathVariable 를 이용한다.
// 경로상의 특정값{userId}을 가져오고 싶을때 @PathVariable 어노테이션을 이용해서 경로상에 들어온 특정 값을 값으로 인식
logger.info("registerByPath");
logger.info("userId : " + userId);
return "success";
}
// 3)
// HTML 폼 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register01", method = RequestMethod.POST)
public String register01(String userId) {
logger.info("register01");
logger.info("userId : " + userId);
return "success";
}
// 4)
// HTML 폼 필드가 여러개일 경우에도 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득할 수 있다.
@RequestMapping(value = "/register02", method = RequestMethod.POST)
public String register02(String userId, String password) {
logger.info("register02");
logger.info("userId : " + userId);
logger.info("password : " + password);
return "success";
}
// 5)
// HTML 폼 필드가 여러개일 경우에 컨트롤러 매개변수의 위치는 상관없다.
@RequestMapping(value = "/register03", method = RequestMethod.POST)
public String register03(String password, String userId) {
logger.info("register03");
logger.info("userId : " + userId);
logger.info("password : " + password);
return "success";
}
// 6)
// HTML Form 필드 값이 숫자일 경우에는 컨트롤러 매개변수 타입이 문자열이면 그대로 문자열 형태로 요청 데이터를 취득한다.
@RequestMapping(value = "/register04", method = RequestMethod.POST)
public String register04(String userId, String password, String coin) {
logger.info("register04");
logger.info("userId : " + userId);
logger.info("password : " + password);
logger.info("coin : " + coin);
return "success";
}
// 7)
// HTML Form 필드 값이 숫자일 경우에는 컨트롤러 매개변수 타입이 숫자형이면 숫자로 타입변환하여 요청 데이터를 취득한다.
@RequestMapping(value = "/register05", method = RequestMethod.POST)
public String register05(String userId, String password, int coin) {
logger.info("register05");
logger.info("userId : " + userId);
logger.info("password : " + password);
logger.info("coin : " + coin);
return "success";
}
@PathVariable
- URL에서 경로 변수 값을 가져오기 위한 어노테이션
@RequestParam
- 요청 파라미터 값을 가져오기 위한 어노테이션 // ( 키값은거 ) 폼에서 변수명이 다를 때 사용
@RequestHeader
- 요청 헤더 값을 가져오기 위한 어노테이션
@RequestBody
- 요청 본문 내용을 가져오기 위한 어노테이션
@CookieValue
- 쿠키 값을 가져오기 위한 어노테이션
[요청과 처리]
요청 : /register/hongkd (a 태그를 이용)
처리 : String registerByPath(@PathVariable String userId)
[요청과 처리]
요청 : /register/hongkd/100 (a 태그를 이용)
처리 : String registerByPath(@PathVariable("userId") String userId, @PathVariable("coin") int coin)
[요청과 처리]
요청 : /register0101 (form 태그를 이용 - id name 설정 : userId)
처리 : String register0101(String userId)
[요청과 처리]
요청 : /register0201 (form 태그를 이용 - id name 설정 : userId)
처리 : String register0201(String username)
[요청과 처리]
요청 : /register0202 (form 태그를 이용 - id name 설정 : userId)
처리 : String register0202(@RequestParam("userId") String username)
<!-- 3. 요청 데이터 처리 어노테이션 -->
<h4>3. 요청 데이터 처리 어노테이션</h4>
<hr/>
<p>1) URL 경로 상의 경로 변수로 부터 요청 데이터를 취득할 수 있다.</p>
<a href="/register/hongkd" >/register/hongkd</a><br/>
<p>2) URL 경로 상의 경로 변수가 여러 개일때 @PathVariable어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.</p>
<a href="/register/hongkd/100" >/register/hongkd/100</a><br/>
<p>3) URL 폼의 필드명과 컨트롤러 매개변수명이 일치하면 요청을 처리할 수 있다.</p>
<form action="/register0101" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register0101"/> </p>
</form><br/>
<p>4) URL Form 필드명과 컨트롤러 매개변수명이 일치(대소문자구분)하지않으면 요청을 처리할 수 없다.</p>
<form action="/register0201" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register0201"/> </p>
</form><br/>
<p>5) @RequestParms 어노테이션을 사용하여 특정한 HTML form의 필드명을 지정하여 요청을 처리한다.</p>
<form action="/register0202" method="post">
<p>userId : <input type="text" name="userId" value="hongkd"/> </p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="register0202"/> </p>
</form><br/>
// 3. 요청 데이터 처리 어노테이션
// 1) register/100 위에서 이미 요청 처리를 했기 때문에 여기선 처리를 하지 않습니다!!
// 2)
// URL 경로 상의 변수가 여러 개일때, @PathVariable 어노테이션을 사용하여 특정한 경로 변수명을 지정해준다.
@RequestMapping(value = "/register/{userId}/{coin}")
public String registerByPath(@PathVariable("userId") String userId, @PathVariable("coin") int coin) {
logger.info("registerByPath - @PathVariable");
logger.info("userId : " + userId);
logger.info("coin : " + coin);
return "success";
}
// 3)
// HTML 폼의 필드명과 컨트롤러 매개변수명이 일치하면 요청을 처리할 수 있다.
@RequestMapping(value = "/register0101",method = RequestMethod.POST)
public String register0101(String userId) {
logger.info("register0101");
logger.info("userId : " + userId);
return "success";
}
// 4)
// HTML 폼의 필드명과 컨트롤러 매개변수명이 일치(대소문자구분)하지 않으면 요청을 처리할 수 없다.
@RequestMapping(value = "/register0201",method = RequestMethod.POST)
public String register0201(String username) {
logger.info("register0201");
logger.info("username : " + username);
return "success";
}
// 5)
// @RequestParms 어노테이션을 사용하여 특정한 HTML Form의 필드명을 지정하여 요청을 처리한다.
@RequestMapping(value = "/register0202",method = RequestMethod.POST)
public String register0202(@RequestParam("userId") String username) {
logger.info("register0202");
logger.info("username : " + username);
return "success";
}
[요청과 처리]
요청 : /beans/register01 (form 태그를 이용)
처리 : String registerJavaBeans01(Member member)
[요청과 처리]
요청 : /beans/register02 (from 태그를 이용)
처리 : String registerJavaBeans02(Member member, int coin)
[요청과 처리]
요청 : /beans/registerJavaBeans03(int uid, Member member)
처리 : String registerJavaBeans03(int uid, Member member)
<h4>4. 요청처리 자바빈즈</h4>
<hr/>
<p>1) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.</p>
<form action="/beans/register01" method="post">
<p>userId : <input type="text" name="userId" value="honkd"/></p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="registerJavaBeans01"/> </p>
</form><br/>
<p>2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.</p>
<form action="/beans/register02" method="post">
<p>userId : <input type="text" name="userId" value="honkd"/></p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="registerJavaBeans02"/> </p>
</form><br/>
<p>3) 여러개의 폼 텍스트 필드 요소값을 매개변수 순서와 상관없이 매개변수명을 기준으로 처리한다.</p>
<form action="/beans/register03" method="post">
<p>uid : <input type="text" name="uid" value="50"/></p>
<p>userId : <input type="text" name="userId" value="honkd"/></p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>coin : <input type="text" name="coin" value="100"/> </p>
<p><input type="submit" value="registerJavaBeans03"/> </p>
</form><br/>
// 4. 요청 처리 자바빈즈
// 1)
// 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리한다.
@RequestMapping(value = "/beans/register01", method = RequestMethod.POST) ///beans/register01 이 url 타입으로
public String registerJavaBeans01(Member member){ // () 안의 매개변수를 받는데 어찌 받는지 방법론 기억하기
logger.info("registerJavaBeans01");
logger.info("member.getUserId() : " + member.getUserId());
logger.info("member.getPassword() : " + member.getPassword());
logger.info("member.getCoin() : " + member.getCoin());
return "success";
}
// 2)
// 폼 텍스트 필드 요소값을 자바빈즈 매개변수와 기본 데이터 타입인 정수 타입 매개변수로 처리한다.
@RequestMapping(value = "/beans/register02", method = RequestMethod.POST)
public String registerJavaBeans02(Member member, int coin){ // () 매개변수 받을 때 => 맵은 예외 어노테이션 무조건 써야하고 그외는 이름이 같으면 자동바인딩 됨
logger.info("registerJavaBeans02");
logger.info("member.getUserId() : " + member.getUserId());
logger.info("member.getPassword() : " + member.getPassword());
logger.info("coin : " + coin);
return "success";
}
// 3)
// 여러개의 폼 텍스트 필드 요소값을 매개변수 순서와 상관없이 매개변수명을 기준으로 처리한다.
@RequestMapping(value = "/beans/register03", method = RequestMethod.POST)
public String registerJavaBeans03(Member member, int uid){
logger.info("registerJavaBeans03");
logger.info("uid : " + uid);
logger.info("member.getUserId() : " + member.getUserId());
logger.info("member.getPassword() : " + member.getPassword());
logger.info("member.getCoin() : " + member.getCoin());
return "success";
}
[요청과 처리]
요청 : /registerByGet01?userId=hongkd&dateOfBirth=1234
처리 : registerByGet01(String userId, Date dateOfBirth)
[요청과 처리]
요청 : /registerByGet01?userId=hongkd&dateOfBirth=2022-11-28
처리 : registerByGet01(String userId, Date dateOfBirth)
[요청과 처리]
요청 : /registerByGet01?userId=hongkd&dateOfBirth=20221128
처리 : registerByGet01(String userId, Date dateOfBirth)
[요청과 처리]
요청 : /registerByGet01?userId=hongkd&dateOfBirth=2022/11/28
처리 : registerByGet01(String userId, Date dateOfBirth)
[성공!!]
[요청과 처리]
요청 : /registerByGet02?userId=hongkd&dateOfBirth=20221128
처리 : String registerByGet02(Member member)
[요청과 처리]
요청 : /register (form 태그 이용 - dataOfBirth 값을 20221128 설정)
처리 : String register(Member member)
<h4>5. Date 타입 처리</h4>
<hr/>
<p>
1) 쿼리 파라미터(dateOfBirth=1234)로 전달 받은 값이 날짜 문자열 형식에 맞지 않아 Date타입으로 변환에 실패한다<br/>
<font style="color: red;">400-Bad Request 에러발생</font>
</p>
<a href="/registerByGet01?userId=hongkd&dateOfBirth=1234" >
/registerByGet01?userId=hongkd&dateOfBirth=1234
</a><br/>
<p>
2) 쿼리 파라미터(dateOfBirth=2018-09-08)로 전달 받은 값이 날짜 문자열 형식에 맞지 않아 Date타입으로 변환에 실패한다<br/>
<font style="color: red;">400-Bad Request 에러발생</font>
</p>
<a href="/registerByGet01?userId=hongkd&dateOfBirth=2018-09-08" >
/registerByGet01?userId=hongkd&dateOfBirth=2018-09-08
</a><br/>
<p>
3) 쿼리 파라미터(dateOfBirth=20180908)로 전달 받은 값이 날짜 문자열 형식에 맞지 않아 Date타입으로 변환에 실패한다<br/>
<font style="color: red;">400-Bad Request 에러발생</font>
</p>
<a href="/registerByGet01?userId=hongkd&dateOfBirth=20180908" >
/registerByGet01?userId=hongkd&dateOfBirth=20180908
</a><br/> <!-- @DateTimeFormat(pattern = "yyyyMMdd") 이걸 컨트롤러에 추가해서 이제 됩니당 -->
<p>
4) 쿼리 파라미터(dateOfBirth=2018/09/08)로 전달 받은 값이 날짜 문자열 형식에 맞아 Date타입으로 변환에 성공한다<br/>
<font style="color: green;">성공</font>
</p>
<a href="/registerByGet01?userId=hongkd&dateOfBirth=2018/09/08" >
/registerByGet01?userId=hongkd&dateOfBirth=2018/09/08
</a><br/>
<p>
5) Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달 받은 값이 날짜 문자열 형식에 맞지 않아 Date타입으로 변환에 실패한다<br/>
<font style="color: red;">400-Bad Request 에러발생</font>
</p>
<a href="/registerByGet02?userId=hongkd&dateOfBirth=20180908" >
/registerByGet02?userId=hongkd&dateOfBirth=20180908
</a><br/>
<p>폼 형식으로 요청</p>
<form action="/register" method="post">
<p>userId : <input type="text" name="userId" value="honkd"/></p>
<p>password : <input type="text" name="password" value="1234"/> </p>
<p>dateOfBirth : <input type="text" name="dateOfBirth" value="20180908"/> </p>
<p><input type="submit" value="register"/> </p>
</form><br/>
// 5. Date 타입 처리
// 1)
// 쿼리 파라미터(dateOfBirth=1234)로 전달 받은 값이 날짜 문자열 형식에 맞지 않아 Date타입으로 변환에 실패한다
@RequestMapping(value = "/registerByGet01", method = RequestMethod.GET) // a태그로 요청했으니 get이겠죠
public String registerByGet01(String userId, @DateTimeFormat(pattern = "yyyyMMdd") Date dateOfBirth){
logger.info("registerByGet01");
logger.info("userId : " + userId);
logger.info("dateOfBirth : " + dateOfBirth);
return "success"; // 404 떠야함 ㅎㅎㅎ
}
// 5)
// Member 매개변수와 쿼리 파라미터(dateOfBirth=20180908)로 전달 받은 값이 날짜 문자열 형식에 맞지 않아 Date타입으로 변환에 실패한다
@RequestMapping(value = "/registerByGet02", method = RequestMethod.GET)
public String registerByGet02(Member member){
logger.info("registerByGet02");
logger.info("member.getUserId() : " + member.getUserId());
logger.info("member.getDateOfBirth() : " + member.getDateOfBirth());
return "success";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(Member member){
logger.info("register");
logger.info("member.getUserId() : " + member.getUserId());
logger.info("member.getPassword() : " + member.getPassword());
logger.info("member.getDateOfBirth() : " + member.getDateOfBirth());
return "success";
}
[요청과 처리]
요청: 5번 항목에 해당하는 요청 주를 이용하여 테스트 시, 날짜형식 패턴이 'yyyyMMdd'와 같은 형식으로 요청한 경우,
[성공]으로 정상적인 날짜 데이터를 확인할 수 있다.
처리 : 5번항목 참고