본문 바로가기

JSP,Servlet

JSP/jdbc- 회원가입 실습문제

https://javadb.tistory.com/entry/JSP-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%8B%A4%EC%8A%B5

 

JSP - 회원가입/로그인 만들기 실습

<!DOCTYPE html> Insert title here 로그인 HTML 파일코드 <%@page import="java.net.URLEncoder"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>..

javadb.tistory.com

앞에서 만드거에 이어서 jdbc를 이용하여 완성시키는 문제


우선 sql문 작성 

id pw nickname 순서 기억!

 

model1 -  view와 controller  모두 jsp에서 작성

model2 - JSP 표현식만 사용


Join HTML 파일 코드 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- form태그 이용해서 id, pw , name  -->
<fieldset align ="center">
<legend>회원가입</legend>
	<form action="ex15joinProgram.jsp" method="post"> <!--get방식은 url에 정보노출   -->
		
	        	ID: <input type ="text"  name="id"><br>
	        	PW: <input type ="password"  name="pw"><br>
	        	Name: <input type ="text"  name="name"><br>
	        	
	        	<input type= "submit"  value="회원가입">
		
	</form>
</fieldset>

</body>
</html>

 

form action="joinProgram.jsp" 로 !!

 


DB에서 필요한 

joinProgram.jsp 파일 코드

길어서 나눠서 설명

 

-method = post 방식으로 받았기 때문에 제일 먼저 인코딩부터 해줘야함!!!

 

-그리고 파라미터로 값들을 받아온다.

 

-DB접근위해 URL, dbid , dbpw 값 입력해야하는데 

 여기서 url 값은 아래 사진대로 찾아가보시면 나옵니다!

 

 

 

-?는 아까 위에 sql문에 id, pw, nickname 위한 변수 

-Update : select구문을 제외한 다른 구문, int형 반환

-Query : select구문에서 사용, Resultset형태로 반환

 

-DB문은 꼭 닫아주어야 한다 !!!!!!!

-순서는 역순!!!!! 중요합니다~!!

 

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.net.ConnectException"%>
<%@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>Insert title here</title>
</head>
<body>
<%
	//0. 인코딩
	request.setCharacterEncoding("UTF-8");
	
	// 1. id, pw, name 파라미터 받아오기
	// Ctrl + D :해당 줄 삭제
	// Ctrl + Alt + 방향키 : 해당 방향으로 복사
	// Alt + 방향키 : 해당 방향으로 줄 이동
	// 블록 : shift + home
	String id=request.getParameter("id");
	String pw=request.getParameter("pw");
	String name=request.getParameter("name");
	
	// 2. DB연결을 위해서 사용할 Class찾기
	Class.forName("oracle.jdbc.driver.OracleDriver");
	
	// 3 . DB에 접근하기 위해 url, dbid, dbpw 변수에 넣기
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbid = "hr";
	String dbpw = "hr";
	
	// 4. DB연결 - Connection 객체 반환
	Connection conn = DriverManager.getConnection(url,dbid,dbpw);
	
	// 5. SQL문 작성
	String sql = "insert into jdbc_member values(?, ?, ?)"; //"?"하면 안됨 문자열이 되니깐 오류꼭보셈(오류:부적합한 열 인덱스)
	
	// 6. preparestatement 메소드 사용해 spl문을 DB에 전달
	PreparedStatement psmt =conn.prepareStatement(sql);
	
	// 7. ?에 값 넣기
	psmt.setString(1, id);
	psmt.setString(2, pw);
	psmt.setString(3, name);
	
	// 8. 실행
	// Update : select구문을 제외한 다른 구문, int형태로 반환
	// Query : select 구문에서 사용, Resultset형태로 반환
	int cnt = psmt.executeUpdate();
	
	// 9. DB문 닫아주기
	psmt.close();
	conn.close();
	
	// 10. 결과값에 따라서 다른 페이지로 이동
	// 성공했을 때 : ex14login.html 0보다 크면 어떤행에 변화가 생김 
	
	String moveURL = null;
	if(cnt>0){
		System.out.println("회원가입 성공");
		moveURL = "ex14login.html";
	}
	
	// 실패했을 때 : ex15join.html
	else{
		System.out.println("회원가입 실패");
		moveURL = "ex15join.html";
	}
	response.sendRedirect(moveURL);
%>
</body>
</html>

우선 DAO와 VO 만들기전 기본 개념부터 알고 가자 !!

먼저 MemberVO 작성

package Model;

public class MemberVO {
	
	// field 변수명이 table의 컬럼이름과 같아야한다.
	private String id;
	private String pw;
	private String nickname;
	
	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 getNickname() {
		return nickname;
	}
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	//생성자 만드는 단축기 alt shift s
	public MemberVO(String id, String pw, String nickname) {
		super();
		this.id = id;
		this.pw = pw;
		this.nickname = nickname;
	}
		
}

VO클래스는 sql에서 작성한 DB테이블 컬럼명과 동일한 Member변수를 갖는다

 

getter와 setter를 만들어서 변수에 접근

 

단축키 alt + shift + s를 눌러서 (단축기 잘 까먹음)

Getters and Setters 눌러서 만들어준다!!!

 


DAO 생성!!!!!!!!

package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DAO {
				//login(바인드 변수에 넣어줄걸 넣어줌)
	public MemberVO login(String id, String pw) {
		
		
		MemberVO vo = null; // 지역변수라서 선언 해줘야 젤 밑에return 오류 안남
		//로그인 성공 여부 판단
		try{
			 //1. jar파일 집어놓고, Class 동적로딩
			 Class.forName("oracle.jdbc.driver.OracleDriver"); //통로 Class : OracleDriver
			
			 //2. Connection 객체 생성 java.sql로 자동완성
			 String url = "jdbc:oracle:thin:@localhost:1521:xe";
			 String dbid = "hr";
			 String dbpw = "hr";
			 Connection conn = DriverManager.getConnection(url, dbid, dbpw);//db연결
			
			 //3. sql문 작성
			 String sql = "select*from jdbc_member where id = ? and pw = ?";
			 
			 //4. 실행 준비
			PreparedStatement psmt =conn.prepareStatement(sql);
			 
			 //5. ?(바인드변수) 채우기
			psmt.setString(1, id);
			psmt.setString(2, pw);
			
			//6. 실행
			// insert, update, delete : excuteUpdate()--> int 리턴 (db에 얼만큼 몇개의 행이 변화 하였는가)
			// select : executeQuery()--> ResultSet 리턴 
			ResultSet rs=psmt.executeQuery();
			
			// 7. 성공여부 판단
			// rs.next(); --> 커서를 한칸 내리고 값이 있는지 없는지를 리턴
			// rs.next(); == true : 해당하는 값이 있다.
			// rs.next(); == false : 해당하는 값이 없다.
			String nickname =null; // 전역변수로 선언
			if(rs.next()){
				//ResultSet(rs)객체에서 column명이 nickname 값을 가지고 와서 nickname이라는 변수에 담아두기
				//rs.getString("컬럼명");
				//rs.getString(컬럼의 인덱스번호);
				//select*from jdbc_member;
				String uid =rs.getString(1);
				String upw =rs.getString("pw");
				
				nickname =rs.getString("nickname");// nick name변수에 재할당
				
				
				// 결과를 MemberVO로 묶어주기
				vo = new MemberVO(uid, upw, nickname);
				
				
				
			}
			 //8. DB 문 닫아주기 (역순으로 닫는다)
			rs.close();
			psmt.close();
			conn.close();
			
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return vo; //MemberVO 지역변수 잘봐 오류나면
	}
	// 로그인=======
}