< 로그인 페이지 만들기 >
* 로그인 창 만들기 [login.jsp] : html
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
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login.jsp</title>
</head>
<body>
<form action="loginOk2.jsp" name="frm" method="post">
<table>
<tr>
<th>ID</th>
<td><input type="text" name="id" id="id" /></td>
</tr>
<tr>
<th>PW</th>
<td><input type="password" name="pwd" id="" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="로그인" id="btn1" />
<input type="button" value="회원가입" id="btn2" />
</td>
</tr>
</table>
</form>
</body>
</html>
|
cs |
- 로그인 정보 확인해 보는 창 : [loginOk.jsp]
> loginOk과 login 연결시키려면 login.jsp 코드의 action="loginOk2.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
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
73
74
|
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>LoginOk.jsp</title>
</head>
<body>
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
out.println("<h3> ID : "+id+"</h3>");
out.println("<h3> PW : "+pwd+"</h3>");
/* db에 가서 존재하는지 여부를 확인 > 있으면 로그인, 없으면 실패
*/
// JDBC 연결 8가지 순서
// 1. 환경 변수
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
Connection conn ;
PreparedStatement pstmt ;
ResultSet rs ;
StringBuffer sb = new StringBuffer();
// 2. JDBC 드라이버 로딩
Class.forName(driver);
// 3. Connection
conn = DriverManager.getConnection(url, user, password);
System.out.println("conn : " + conn);
// 4. SQL 문장
sb.append("SELECT * FROM member WHERE id = ? and pw = ?");
// 5. 문장 객체 생성
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, id); // 물음표 값 채우기
pstmt.setString(2, pwd);
// 6. 실행(SELECT ==> ResultSet)
rs = pstmt.executeQuery();
// 7. 레코드 별로 로직 처리
boolean isExists = rs.next();
String name = rs.getString("name"); // 입력값에 맞는 '이름' 가져와 출력할 수 있도록
// 8. 자원 반납
if(rs!= null) rs.close();
if(pstmt!= null) pstmt.close();
if(conn!= null) conn.close();
%>
<%
if(isExists){
out.println("<h1>" + name + "님 환영합니다. </h1>");
} else {
out.println("<h1> 로그인 실패 </h1>");
}
%>
</body>
</html>
|
cs |
>> 해당 코드의 jdbc 연결 8가지 단계를 재사용할 수 있도록, vo와 dao 생성
- [MemberVO] : 값을 담는 객체인 VO 먼저 생성
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
// Value Object (vo), Java Bean, POJO(Plain Old Java Object)
//// outline에서 추가되는 내용들 확인 가능
//@Getter
//@Setter
//@ToString
@Data // Data 하나로 getter, setter, tostring 등등 다 생성
@NoArgsConstructor // 기본생성자 추가
@AllArgsConstructor // 매개변수 생성자 추가
// vo-[TestMain.java]에서 실행!
public class MemberVO {
// 멤버변수 : 컬럼명
int no;
String id;
String pw;
String name;
String gender;
String motive;
// toString 사용하면 아래 내용 없어도 자동으로 실행
// @Override
// public String toString() {
// String msg = "MemberVO( id="
// + this.id+ ", pw = " + this.pw + ", name = "
// + this.name + ", gender = " + this.gender +
// ", motive " + this.motive + ")";
//
// return msg;
// }
// // 기본 생성자, 매개변수 있는 생성자
// public MemberVO() {
// }
//
// public MemberVO(int no, String id, String pw, String name, String gender, String motive) {
// super();
// this.no = no;
// this.id = id;
// this.pw = pw;
// this.name = name;
// this.gender = gender;
// this.motive = motive;
// }
//
// // setter, getter
// public int getNo() {
// return no;
// }
//
// public void setNo(int no) {
// this.no = no;
// }
//
// public String getId() {
// return id;
// }
//
// public void setId(String id) {
// this.id = id;
// }
//
// public String getPw() {
// return pw;
// }
//
// public void setPw(String pw) {
// this.pw = pw;
// }
//
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public String getGender() {
// return gender;
// }
//
// public void setGender(String gender) {
// this.gender = gender;
// }
//
// public String getMotive() {
// return motive;
// }
//
// public void setMotive(String motive) {
// this.motive = motive;
// }
}
|
cs |
- [MemberDAO] : getOne(), selectAll(), add, update, delete, close 추가
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import vo.MemberVO;
public class MemberDAO {
// 기본 생성자 1~3
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
Connection conn ;
PreparedStatement pstmt ;
ResultSet rs ;
StringBuffer sb = new StringBuffer();
public MemberDAO() {
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
System.out.println("conn : "+conn);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패");
} catch (SQLException e) {
System.out.println("DB 연결 실패");
}
} // 기본생성자 end
// id와 pw 입력하면 vo 객체를 리턴하는 메서드
public MemberVO getOne(String id, String pwd) {
// 4. SQL문장
sb.append("SELECT * FROM member WHERE id = ? and pw = ?");
MemberVO vo = null; // 선언은 밖에 해두기
// 5. 문장객체
try {
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, id); // 물음표 채우기
pstmt.setString(2, pwd);
// 6. 실행 (SELECT ==> ResultSet
rs = pstmt.executeQuery();
// 7. 레코드별 로직 처리
while(rs.next()) {
int no = rs.getInt("no");
String name = rs.getString("name");
String gender = rs.getString("gender");
String motive = rs.getString("motive");
vo = new MemberVO(no, id, pwd, name, gender, motive);
}
} catch (SQLException e) {
e.printStackTrace();
}
return vo;
} // getOne() end
// 전체조회
public ArrayList<MemberVO> selectAll() {
ArrayList<MemberVO> list = new ArrayList<MemberVO>();
// 4. SQL문장
sb.setLength(0); // 길이를 0으로(기존의 값 지우기)
sb.append("SELECT * FROM member ");
// System.out.println("sb : " + sb);
// 5. 문장객체
try {
pstmt = conn.prepareStatement(sb.toString());
// 6. 실행 (SELECT ==> ResultSet
rs = pstmt.executeQuery();
// 7. 레코드별 로직 처리
while(rs.next()) {
int no = rs.getInt("no");
String id = rs.getString("id");
String pwd = rs.getString("pw");
String name = rs.getString("name");
String gender = rs.getString("gender");
String motive = rs.getString("motive");
MemberVO vo = new MemberVO(no, id, pwd, name, gender, motive);
list.add(vo);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
} //selectAll() end
public void addOne(MemberVO vo) {
// 4. SQL 문장
sb.setLength(0);
sb.append("INSERT INTO member ");
sb.append("VALUES(mem_no_seq.nextval, ?, ?, ?, ?, ?)");
try {
// 5. 문장 객체
pstmt = conn.prepareStatement(sb.toString());
// pstmt.setInt(1, vo.getNo());
pstmt.setString(1, vo.getId());
pstmt.setString(2, vo.getPw());
pstmt.setString(3, vo.getName());
pstmt.setString(4, vo.getGender());
pstmt.setString(5, vo.getMotive());
// 6. 실행 (SELECT ==> ResultSet
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}// addOne() end
public void updateOne(MemberVO vo) {
// 4. SQL 문장
sb.setLength(0);
sb.append("UPDATE member ");
sb.append("SET motive = ? ");
sb.append("WHERE id = ? ");
try {
// 5. 문장 객체
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, vo.getMotive());
pstmt.setString(2, vo.getId());
// 6. 실행 (SELECT ==> ResultSet
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // updateOne end
public void deleteOne(String id) {
// 4. 문장 객체
sb.setLength(0);
sb.append("DELETE FROM member ");
sb.append("WHERE id = ? ");
try {
// 5. 문장 객체
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, id);
// 6. 실행 (SELECT ==> ResultSet
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // deleteOne end
public void close() {
// 자원반납
try {
if(rs!= null) rs.close();
if(pstmt!= null) pstmt.close();
if(conn!= null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // close end
} // class end
|
cs |
** 데이터베이스에 테이블 생성 **
=> jdbc 드라이버 연결
1. ojdbc6
dev - myDriver - ojdbc6 파일을
webapp- WEB-INF - lib에 복사
2. lombok
* lombok 다운로드
https://projectlombok.org/download
파일 다운받아 - dev 폴더에 저장
- 실행 (cmd창)
C:\Users\jhta>d:
D:\>cd dev
D:\dev>java -jar lombok.jar
- 창 열리면 specify location으로 D:\dev\eclipse 지정 > 설치
> 이클립스 재부팅 > web-webapp- web-inf - lib에도 lombok.jar 복사
>> @Getter, @Setter 라는 annotation으로 간편하게 사용 가능
- member dao, vo 사용 : [loginOk2.jsp]
> login.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
31
|
<%@page import="vo.MemberVO"%>
<%@page import="dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginOk2.jsp</title>
</head>
<body>
<%
// 파라미터값 가져오기
String id = request.getParameter("id");
String pw = request.getParameter("pwd");
// db 연결
MemberDAO dao = new MemberDAO();
MemberVO vo = dao.getOne(id, pw);
// System.out.println("vo : " + vo);
if(vo!= null) { // 로그인 성공했으면
out.println("<h3>" + vo.getName() + "님 환영합니다.</h3>");
} else {
response.sendRedirect("login.jsp"); // 일치하지 않으면 다시 원래 페이지로
// out.println("<h3> 아이디 또는 비밀번호가 일치하지 않습니다.</h3>");
}
%>
</body>
</html>
|
cs |
+[TestMain.java] : 테스트해보기!!
>> memberdao에 getOne(), selectAll(), addOne(), updateOne(), deleteOne(), close() 확인
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
|
package vo;
import java.util.ArrayList;
import dao.MemberDAO;
public class TestMain {
public static void main(String[] args) {
MemberVO vo = new MemberVO();
// System.out.println(vo);
// System.out.println(vo.toString());
MemberDAO dao = new MemberDAO();
MemberVO vo2 = dao.getOne("aaa", "bbb");
System.out.println(vo2.getName());
ArrayList<MemberVO> list = dao.selectAll();
for(MemberVO vo3 : list) {
System.out.println(vo3.getId() + " : " + vo3.getPw() + " : " + vo3.getName());
}
System.out.println("----------------");
MemberVO vo4 = new MemberVO(98, "fff", "ccc", "홍길순", "여", "인터넷검색");
dao.addOne(vo4); // 홍길순 추가되었는지 확인
vo4.setMotive("친구추천");
dao.updateOne(vo4); // 가입동기가 친구추천으로 변경되었는지 확인
dao.deleteOne("fff"); // id가 fff인 멤버 삭제되었는지 확인
dao.close(); // db 자원 반납
}
}
|
cs |
'web' 카테고리의 다른 글
[jsp] jspService의 지역 변수 / forward&redirect / 로그인, 회원가입 페이지 만들기 (1) | 2023.04.30 |
---|---|
[JSP] 데이터베이스 파일(DEPT) 가져와서 출력<VO/DAO> (0) | 2023.04.30 |
[jsp] jsp (jsp의 스크립트 요소/button/text/for문/request&response) (0) | 2023.04.23 |
[web] Servlet(GenericServlet / HTTPServlet) (0) | 2023.04.23 |
[web] Servlet (0) | 2023.04.23 |