0826 JSP - JavaBean, 회원가입 로그인 페이지 만들기
MySql 워크벤치 DB의 테이블 정보에 맞춰서 이클립스에 저장하기
itwill_member 테이블의 정보를 한번에 저장하는 객체 (테이블 정보와 매칭)
int idx;
String name;
String gender;
int age;
String jumin;
private 추가하기
private int idx;
private String name;
private String gender;
private int age;
private String jumin;
set/get 메서드 생성
alt shift s + r
private int idx;
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJumin() {
return jumin;
}
public void setJumin(String jumin) {
this.jumin = jumin;
}
변수 쓰기
변수를 사용하려면 초기화(Initialize)를 해야 한다.
데이터를 변수(공간)에 집어넣는 과정을 초기화라고 함.
프로그래밍 언어에서 '변수'란 값을 저장할 수 있는 메모리상의 공간을 의미하고, 만들어줘야하기 때문.
생성자
클래스를 초기화하는 메서드
public JavaBean2() {
}
-return이 없다?
원래 void를 써야 return이 없는 것인데.
=> 생성자 라는 메서드 자체가 리턴 타입이 없다!
-메서드이름이 클래스이름과 동일
-그럼 public JavaBean2() { } 의 역할은 무엇일까?
변수를 초기화 하는 역할
package - com.itwillbx.jsp 에 클래스 하나 생성.
초기화 되지 않은 변수 선언하기
package com.itwillbs.javabean;
public class Test {
public static void name(String [] args) {
// 변수 선언
int a;
System.out.println(a);
=> 에러가 나서 못 씀!
int b = 0; 이라는 값을 줬더니, 정상적으로 실행이 되었다.
실습
JavaBean2 객체 정보 확인
JavaBean2 jb2 = new JavaBean2();
System.out.println(jb2.getIdx());
0 이 나옴
어떠한 값도 초기화 하지 않았는데, 0이 나와서 이상한 것
public JavaBean2() { } 을 함으로 써
idx = 0; 이 들어가 있는 것.
기본 값으로 변수를 초기화 했기 때문에, 위의 값에서도 0이 나오는 것이다.
public void setName(String name) {this.name = name;}
객체 안에 있는 set 메서드는 수정하는 역할
1. 전달 정보 저장
insertForm.jsp 생성
insertForm.jsp 정보를 insertBean.jsp 에 전달
<h1>insertForm.jsp</h1>
<h2> 정보입력하는 페이지 </h2>
<form action="insertBean.jsp" method="post">
이름 : <input type = "text" name = "name"><br>
성별 : <input type = "text" name = "gender"><br>
나이 : <input type = "text" name = "age"><br>
주민번호 : <input type = "text" name = "jumin"><br>
<input type = "submit" value = "디비에 저장하기">
</form>
insertBean.jsp 생성
1-1 insertForm.jsp 정보를 전달받아서 DB에 저장
1-2 자바빈 객체 만들기
<h1>insertBean.jsp</h1>
<%
String name = request.getParameter("name");
String gender = request.getParameter("gender");
int age = Integer.parseInt(request.getParameter("age"));
String jumin = request.getParameter("jumin"); %>
<%
JavaBean2 jb2 = new JavaBean2();
jb2.setName(request.getParameter("name"));
jb2.setGender(request.getParameter("gender"));
jb2.setJumin(request.getParameter("jumin"));
jb2.setAge(Integer.parseInt(request.getParameter("age"))); %>
1-3 자바빈 객체 - 액션 태그 (html영역, JSP 코드 작성)
위에 꺼 다 주석처리함
<jsp:useBean id="jb2" class="com.itwillbs.javabean.JavaBean2" />
<jsp:setProperty property="*" name="jb2"/>
2. DB에 정보 저장
2-1. 드라이버 로드
final String DRIVER = "com.mysql.cj.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";
Class.forName(DRIVER);
2. 디비 연결
Connection con = DriverManager.getConnection(DBURL, DBID, DBPW);
3. SQL 작성 & pstmt
String sql = "insert into itwill_member values(?,?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
colomn 은 5개인데, ? 은 4개이다.
idx = Mysql 에서 Autointo(AI) 를 지정했ㄱ 때문 ( 값이 없을 떄 수가 1 씩 증가 되는 것)
pstmt.setString(1,jb2.getName());
=> 박스에 닭다리를 꺼낸 것
pstmt.setString(1,jb2.getName());
pstmt.setInt(2,jb2.getAge());
pstmt.setString(3,jb2.getGender());
pstmt.setString(4,jb2.getJumin());
4. SQL 실행
pstmt.executeUpdate();
갑자기 DB로 넘어감
MySql에서 모든 데이터를 삭제한다.
use jspdb;
delete from itwill_member;
구조에 들어가서 밑에 그림 처럼 수정
apply !
만약에.. 테이블이 안지워지는 에러가 난다면 (Error Code : 1175)
0 | 22 | 10:41:09 | delete from itwill_member | Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. | 0.000 sec |
Editer - > Preferences -> SQL Editor -> 맨 밑으로 내려서 체크박스 풀어주기
WHERE 없이 못쓰게 하는 체크박스를 풀어준다.
DB 테이블 만들기
처음에 DB를 만들어야함.
프로젝트 할 때..클라이언트의 요구사항 명세서를 받을 것임
그걸 보고 DB를 만들어야한다. (ex. ~~~한 프로그램 만들어주세요. 홈페이지에 ~~한 기능 만들어주세요)
그를 토대로 설계하는 작업을 해보려고 함.
회원관리 프로그램 만들기
- 회원 가입
- 회원 로그인 / 로그아웃
- 회원 정보 조회
- 회원 정보 수정
- 회원 정보 삭제
- (관리자) 모든 회원의 정보 조회
insertForm 페이지 만들어준다
ITWILL 회원가입 페이지
<fieldset>
<form action ="insertPro.jsp" method = "post">
아이디 : <input type = "text" name = "id"><br>
비밀번호 : <input type = "password" name = "pw" id = "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>
<hr><hr>
<input type = "submit" value = "회원가입하기">
</form>
</fieldset>
MemberBean 객체 생성
itwill_member 테이블의 정보를 저장하는 객체
private String id;
private String pw;
private String name;
private int age;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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 Timestamp getRegdate() {
return regdate;
}
public void setRegdate(Timestamp regdate) {
this.regdate = regdate;
}
private String gender;
private String email;
private Timestamp regdate;
set(), get() 구현
alt shift s +r
alt shift s + s = generate
@Override
public String toString() {
return "MemberBean [id=" + id + ", pw=" + pw + ", name=" + name + ", age=" + age + ", gender=" + gender
+ ", email=" + email + ", regdate=" + regdate + ", mb=" + mb + "]";
이 객체 안에 뭐가 들어있는지 알수있는 메서드
멤버빈 객체 생성 완료
멤버빈 - insertPro 연결하기
1. 한글 처리
2. MemberBean 객체 생성
3. 전달되는 회원정보를 저장(액션태그)
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="mb" class="com.itwillbs.member.MemberBean" />
<jsp:setProperty property = "*" name = "mb" />
이제 get Property도 넣어줘야 하는데,
오류 발생!!! 밑의 코드는 존재하지 않는다.
<jsp:getProperty property = "*" name = "mb" />
이렇게 써주거나, <%= id%> 같은 식으로 넣어야 한다.
<jsp:getProperty property = "id" name = "mb" />
이런 형태도 가능
<%=mb.toString() %><br>
<%=mb %><br>
mb 객체에 회원정보(시간정보) 추가
mb.setRegdate(new Timestamp(System.currentTimeMillis()));
<%=mb %><br>
컴퓨터의 시간 정보를 가져 오는 것
회원가입 페이지 생성
<% 디비 연결 정보
final String DRIVER = "com.mysql.cj.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";
1.드라이버 로드
Class.forName(DRIVER);
2.디비 연결
Connection con = DriverManager.getConnection(DBURL,DBID,DBPW);
3.SQL 작성 (insert) & psmtm 객체
String sql = "insert into itwill_member(id, pw, name, age, gender, email, regdate) values(?,?,?,?,?,?,?)";
PreparedStatement 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.getRegdate());
4 SQL 구문실행
pstmt.executeUpdate();
System.out.println("회원가입 성공!");
%>
<script type = "text/javascript">
alert('회원가입 성공!');
location.href = "loginForm.jsp";
</script>
MySql DB 로 넘어가서 실행시키기
내가 로그인 한 값이 이렇게 저장된다!
ITWILL 로그인 페이지 생성
로그인 -> 회원가입 페이지로 넘어가기
<fieldset>
<form action ="loginPro.jsp" method = "post">
아이디<input type = "text" name = "id"><br>
비밀번호 <input type = "password" name = "pass"><br>
<input type = "submit" value = "로그인">
<input type = "button" value = "회원가입" onclick ="location.href='insertForm.jsp';">
</form>
</fieldset>
loginpro 페이지 생성
로그인 처리
숙제
<h1>loginPro.jsp</h1>
<%
한글처리
request.setCharacterEncoding("UTF-8");
전달정보 저장 (id,pw) - 액션태그
%>
<jsp:useBean id = "mb" class ="com.itwillbs.member.MemberBean" />
<jsp:setProperty property ="*" name = "mb" />
<%
1.드라이버 로드
final String DRIVER = "com.mysql.cj.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";
Class.forName(DRIVER);
2.디비 연결
Connection con = DriverManager.getConnection(DBURL, DBID, DBPW);
3.SQL 작성(select) & pstmt 객체
String sql = "select pw from itwill_member where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
?? 처리
pstmt.setString(1,mb.getId());
4.SQL 실행
ResultSet rs = pstmt.executeQuery();
5.데이터처리 (로그인 여부 판단)
if(rs.next()){
아이디에 해당하는 비밀번호가 있다 => 회원이다
if(mb.getPw().equals(rs.getString("pw"))){
입력받은 비밀번호랑 디비에 저장된 비밀번호랑 같다.
=> 본인(로그인 성공)
(숙제) main.jsp 페이지로 이동
}else{
입력받은 비밀번호랑 디비에 저장된 비밀번호랑 다름.
=> 비밀번호 오류
(숙제) 페이지 뒤로 가기 구현
}
}else{
아이디에 해당하는 비밀번호가 없다 => 비회원이다
숙제) 페이지 뒤로 가기 구현
}
%>
주말에 숙제 하고 다시 티스토리 수정 할 것