09009
[Spring] 예제1 - 회원 DTO 작성 및 회원가입 폼 수정 본문
DB를 정의하는 순간, DTO도 생성하여야 한다.
회원가입 페이지에서 '회원가입' 버튼을 클릭하는 순간 회원가입 process로 이동해야 한다.
시나리오 참고: https://velog.io/@s001lec
form에서 submit이나 button 태그를 클릭하는 순간 action쪽에 request하게 된다.
✍ views/member/registerPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>회원 가입</h1>
<form action="./registerProcess">
ID: <input type="text"><br>
PW: <input type="password"><br>
nickname: <input type="text"><br>
gender:
<input type="radio">남
<input type="radio">여 <br>
email: <input type="text"><br>
생년월일: <input type="date"><br>
전화번호: <input type="text"><br>
<button>회원가입</button>
</form>
<a href="./loginPage">로그인 페이지로 이동</a>
</body>
</html>
'회원가입' 버튼을 누르는 순간 웹 브라우저가 registerProcess를 호출하도록 코드를 작성한다.


✍ member.controller\MemberController.java
@RequestMapping("registerProcess")
public String registerProcess() {
System.out.println("registerProcess called");
return "";
}

클라이언트에 값을 전송하려면 jsp 파일의 input 태그에서 name 속성에 값을 지정해주어야 한다.
name 속성에 값을 지정해주지 않으면 클라이언트에서 입력한 값이 서버로 넘어가지 않는다.
name 속성에는 데이터베이스 필드명 그대로 작성하는 것이 좋다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>회원 가입</h1>
<form action="./registerProcess">
ID: <input type="text" name="user_id"><br>
PW: <input type="password" name="user_pw"><br>
nickname: <input type="text" name="nickname"><br>
gender:
<input type="radio" name="gender" value="M">남
<input type="radio" name="gender" value="W">여 <br>
email: <input type="text" name="email"><br>
생년월일: <input type="date" name="birth"><br>
전화번호: <input type="text" name="phone"><br>
<button>회원가입</button>
</form>
<a href="./loginPage">로그인 페이지로 이동</a>
</body>
radio 버튼
둘 다 클릭되지 않고 하나만 선택되게 하려면 name 속성 값을 같게 작성해주면 된다.
*Tip
radio, checkbox, select: value를 지정해주어야 한다.
get방식, post방식
-get 방식
값이 쿼리스트링 형태로 링크에 저장되어서 넘어간다.
한글 값을 보낼 수 없다.
링크에 값이 노출된다.
길이에 제한이 있다.

-post 방식
값이 링크에 저장되서 넘어가지 않는다.
한글도 넘어갈 수 있다.
링크에 노출되지 않는다.
버퍼 크기의 제한을 받지 않는다.
insert 작업은 무조건 post방식으로 사용한다고 생각하면 된다.
https://haaland09009.tistory.com/99
[JSP] get 방식, post 방식
클라이언트가 서버에 요청하는 방식 get 방식 : 주소 창을 타고 넘어가므로 서버로 보내는 데이터를 사용자가 그대로 확인 가능 → 보안에 취약, 255자 이하의 적은 양의 데이터 전송 post 방식 : htm
haaland09009.tistory.com
서버에 값을 전달했으면 받을 수 있는 방법
✍ member.controller\MemberController.java
@RequestMapping("registerProcess")
public String registerProcess(String user_id, String user_pw) {
System.out.println("registerProcess called");
System.out.println("user_id");
System.out.println("user_pw");
return "";
}
코드 수정
✍ dto\MemberDto.java
package com.ja.finalproject.dto;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
public class MemberDto {
private int id;
private String user_id;
private String user_pw;
private String nickname;
private String gender;
private String email;
@DateTimeFormat(pattern = "yyyy-MM-dd ")
private Date birth;
private String phone;
private Date reg_date;
public MemberDto() {
super();
}
public MemberDto(int id, String user_id, String user_pw, String nickname, String gender, String email, Date birth,
String phone, Date reg_date) {
super();
this.id = id;
this.user_id = user_id;
this.user_pw = user_pw;
this.nickname = nickname;
this.gender = gender;
this.email = email;
this.birth = birth;
this.phone = phone;
this.reg_date = reg_date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUser_pw() {
return user_pw;
}
public void setUser_pw(String user_pw) {
this.user_pw = user_pw;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
}
✍ member.controller\MemberController.java
코드 수정
@RequestMapping("registerProcess")
public String registerProcess(MemberDto params) {
System.out.println("registerProcess called");
System.out.println(params.getUser_id());
System.out.println(params.getUser_pw());
System.out.println(params.getNickname());
return "";
}
date형의 필드에 어노테이션 붙이는 이유
@DateTimeFormat(pattern = "yyyy-MM-dd ")
private Date birth;
위와 같은 형식으로 어노테이션을 지정해주지 않으면
클라이언트에서 전송한 값(1996-06-05)을 서버에서는 (java.util.date) 1996/06/05로 받는다. 그래서 변환해주는 것이다.
웹 브라우저에서 파라미터로 날라오는 것은 yyyy-MM-dd이다.
파라미터로 날라오는 값을 변환해주어야 하는 경우는 @DateTimeFormat(pattern = "yyyy-MM-dd ")를 작성해주어야 한다.
'Back-End > Spring' 카테고리의 다른 글
[Spring] 예제 1 - 회원 서비스 작성 (0) | 2023.05.16 |
---|---|
[Spring] 예제 1 내용 정리 - 230515 (0) | 2023.05.15 |
[Spring] 예제1 - 테이블 설계 및 생성 (0) | 2023.05.15 |
[Spring] 예제1 - 로그인, 회원가입 페이지 제작 (0) | 2023.05.15 |
[Spring] 예제 1 - 설정 (0) | 2023.05.15 |