BackEnd/Java

0826 JSP - JavaBean, 회원가입 로그인 페이지 만들기

jeoniee 2022. 8. 26. 13:05
728x90
반응형
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;

 

구조에 들어가서 밑에 그림 처럼 수정

MySql - 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 없이 못쓰게 하는 체크박스를 풀어준다. 

 

Safe Updates ~ 체크박스 해제

 


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>

컴퓨터의 시간 정보를 가져 오는 것 

 

Timestamp

회원가입 페이지 생성

 

<% 디비 연결 정보 
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{
		아이디에 해당하는 비밀번호가 없다 => 비회원이다
		숙제) 페이지 뒤로 가기 구현 
	}
	
	
	%>

주말에 숙제 하고 다시 티스토리 수정 할 것 

728x90
반응형