[ITWILL : JSP]Javabean 1 : 회원가입페이지만들기

ITWILL학원 : 23강 JSP기초 BY 정규태강사

자바빈 프로젝트 1 : 회원가입페이지만들기
자바빈 프로젝트 2 : 로그인 및 로그아웃페이지만들기
자바빈 프로젝트 3 : 회원정보조회 및 수정페이지만들기

자바빈(JavaBean)을 이용한 회원가입 폼 작성(p261~)

1. 자바빈 클래스 생성 : MemberBean.java 클래스 생성

  • 자바빈클래스를 만들때는 자바빈설계규약을 꼭 지켜야한다
  • toString()을 하는 이유는 MemberBean클래스의 데이터 전체를 가져다 쓰고 싶기 때문이다.
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
32
33
34
35
36
//자바빈 -> 회원정보를 저장해서 이동시키기 위한 객체
//DTO(데이터 전송 객체)로도 불린다.

//1. 클래스는 public
public class MemberBean {


//2. DB의 테이블의 컬럼을 자바빈의 private 멤버 변수로 생성
private String id;
private String pw;
private String name;
private int age;
private String gender;
private String email;
private Timestamp reg_date; //import필수


//4. 디폴트생성자 public MemberBean(){} 생략

//3. getter 와 setter생성 : alt+shift+s에서 getter and setter 클릭 -> 자동생성
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
(이하 생략)

//5. toString생성 : alt+shift+s에서 toString클릭 -> 자동생성
@Override
public String toString() {
return "멤버 [id=" + id + ", pw=" + pw + ", name=" + name + ", age=" + age + ", gender=" + gender + ", email="
+ email + ", reg_date=" + reg_date + "]";
}

}

2. insertForm.jsp만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<fieldset>
<legend>회원가입</legend>
<form action="insertProM.jsp" method="post" name="fr">
아이디 <input type="text" name="id" required><br>
비밀번호 <input type="password" name="pw"><br>
이름 <input type="text" name="name"><br>
나이 <input type="text" name="age"><br>
성별
<input type="radio" name="gender" value="여"> 여성
<input type="radio" name="gender" value="남"> 남성<br>
이메일 <input type="text" name="email"><br>
<input type="submit" value="회원가입하기">
</form>
</fieldset>

3. insertProM.jsp 페이지 만들기

  • 파라미터값을 저장할때 가입일자의 경우 사용자의 입력값을 받아오지 않고 시스템의 시간을 넣는다. 따라서 별도로 파라미터값을 설정해줘야한다.
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
<%
//1. 한글처리
request.setCharacterEncoding("UTF-8");
%>

<!-- 2. 액션태그 이용 : 전달되는 파라미터 정보저장
2-1. 자바빈 객체 생성
-->
<jsp:useBean id="mb" class="com.itwillbs.member.MemberBean" />

<!-- 2-2. 파라미터 값 저장 , 가입일자는 별도로 직접 저장-->
<jsp:setProperty property="*" name="mb"/>
<%
System.out.println(mb);
mb.setReg_date(new Timestamp(System.currentTimeMillis()));
System.out.println(mb);

//3. DB로 값 전달해서 회원가입 처리
//3-1. MeberDAO객체 생성
MemberDAO mdao = new MemberDAO();

//3-2. 회원가입메서드호출
mdao.insertMember(mb);

//4. 성공시 -> login페이지로 이동
%>
<script type="text/javascript">
alert("회원가입성공!")
location.href="loginForm.jsp"
</script>

4. MemberDAO.java 페이지 만들기

  • DAO (데이터 처리 객체) -> DB처리 모든 것은 이 페이지에서 한다
  • DB 데이터 생성, 조회, 수정은 여기서 진행 / 다른페이지는 출력만 함
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class MemberDAO {
//1. DB변수 생성 : 일부러 멤버변수로 선언함. 메서드에서 멤버변수 호출해서 사용할 예정
Connection con = null;
String sql = "";
PreparedStatement pstmt = null;
ResultSet rs = null;

//2. DB연결 메서드 생성: 리턴해도되고 안해도 됨
private Connection getCon(){
//2-1. 드라이브로드 & DB연결
final String DRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";

//2-2. Class.forName(DRIVER);면 에러메세지가 뜨는데 거기서 try catch구문의 해결방법을 누른다
try {
Class.forName(DRIVER);
System.out.println("드라이버 로드 성공!");
con = DriverManager.getConnection(DBURL, DBID, DBPW);
//getConnection() 에러메세지가 뜨는데 거기서 try catch구문의 해결방법을 누른다
System.out.println("DB 연결 성공!" + con);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패!");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("DB 연결 실패!");
e.printStackTrace();
}
return con;
}

//4. 자원해제 메서드 구현
public void closeDB(){
try{
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

//3. 회원가입처리 (외부에서 접근가능해야하니까 public)
public void insertMember(MemberBean mb){ //파라미터로 정보를 받아서 DB에 저장
try {
//3-1. DB연결메서드 불러오기
con = getCon();
//3-2. SQL & pstmt 생성 & 실행
sql = "insert into itwill_member value(?,?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, mb.getId());
pstmt.setString(2, mb.getPw());
pstmt.setString(3, mb.getName());
pstmt.setInt(4, mb.getAge());
pstmt.setString(5, mb.getGender());
pstmt.setString(6, mb.getEmail());
pstmt.setTimestamp(7, mb.getReg_date());
//insertForm에는 reg_date를 입력하는 란이 없기에 mb에 따로 넣어줘야한다.
//즉, 파라미터로 전달되지 않는 정보는 insertForm에서 직접생성
pstmt.executeUpdate();
System.out.println("회원가입성공");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("회원가입실패");
e.printStackTrace();
} finally {
//자원해제로 DB 효율성을 높일수있다.
closeDB();
}
}
}