본문 바로가기

강의 정리/JSP & Servlet (Seoul Wiz)

19. Oracle 데이버 베이스 (3)

1. Oracle SQL Developer 설치

- 오라클에서 제공하는 데이터 베이스 전용 GUI툴

 

 

 

 

 

① 오라클 홈페이지에서 다운로드

 

 

 

 

② 다운받은 파일의 압축을 풀고 sqldeveloper.exe 실행

 

 

 

 

③ JAVA JDK 설치 경로 지정

 

 

 

 

 

④ 설치가 완료되고 Developer가 실행된 모습

 

 

⑤ DB 접속 정보 설정

 

 

 

⑥ 오라클DB 접속에 성공한 모습

 

 

 

 

 

 

2. 회원가입 및 회원정보 수정 프로그래밍

 

 

- 전체적인 프로그램의 흐름도이다. 확장자가 없는 것은 servlet 파일이다.

- 우선 View와 Controler가 통합되어 있는 MVC1 모델로 구현한다.

프로그램 흐름도

 

 

(1) DB 구성

 

① Developer에서 sql문을 작성하고 Ctrl + Enter 를 눌러 sql문을 실행한다

SQL문 작성

 

생성된 테이블

 

테이블 구성에 이상이 없다면 commit하여 적용

 

 

 

 

 

 

데이터명은 작은 따옴표로 감싸서 넣어야 한다

 

 

 

(2) 회원가입 기능 구현

 

① join.html (회원가입 페이지) : 회원 정보를 입력 받는다

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원 가입 페이지</title>
</head>
<body>
	
	<!-- 회원가입 정보 입력 폼 -->
	<form action="JoinOK" method="post">
		이름 : <input type="text" name="name" size="10"><br/>
		아이디 : <input type="text" name="id" size="10"><br/>
		비밀번호 : <input type="password" name="pw" size="10"><br/>
		전화번호 : <select name="phone1">
			<option value="010">010</option>
			<option value="011">011</option>
			<option value="016">016</option>
			<option value="017">017</option>
			<option value="018">018</option>
			<option value="019">019</option>
		</select> -
		<input type="text" name="phone2" size="5"> - <input type="text" name="phone3" size="5"><br/>
		성별 : <input type="radio" name="gender" value="man">남 &nbsp;<input type="radio" name="gender" value="wonman">여<br/>
		<input type="submit" value="회원가입"> <input type="reset" value="취소">
	</form>
</body>
</html>

 

 

② JoinOK.java 페이지 : 입력된 회원정보를 받아와서 DB에 입력한다

package com.javalec.join;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class JoinOK
 */
@WebServlet("/JoinOK")
public class JoinOK extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private Connection con;
	private Statement stmt;
	
	private String name, id, pw, phone1, phone2, phone3, gender;
	
    /**
     * Default constructor. 
     */
    public JoinOK() {
    	super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("doGet");
		actionDO(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		actionDO(request, response);
	}
	
	private void actionDO(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("EUC-KR"); // 한글 인코딩
		
		// join.html에서 폼에 입력한 값 받아와 변수에 저장
		name = request.getParameter("name");
		id = request.getParameter("id");
		pw = request.getParameter("pw");
		phone1 = request.getParameter("phone1");
		phone2 = request.getParameter("phone2");
		phone3 = request.getParameter("phone3");
		gender = request.getParameter("gender");
		
		// SQL문 작성
		String query = "insert into member values('" + name + "', '" + id + "', '" + pw + "', '" + phone1 + "', '" + phone2 + "', '" + phone3 + "', '" + gender + "')";
		
		// JDBC를 이용해 DB에 접속하고 SQL문 실행
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver"); // JDBC 드라이버 로드
			con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger"); // DB연결
			stmt = con.createStatement(); // connection에 statement 생성
			int i = stmt.executeUpdate(query); // statement 객체로 SQL문 실행
			if(i == 1) { // 가입 성공시 가입 결과 확인 페이지로 이동 
				System.out.println("insert success");
				response.sendRedirect("joinResult.jsp");
			} else { // 가입 실패시 가입 폼 화면으로 다시 이동
				System.out.println("insert fail");
				response.sendRedirect("join.html");
			}
			
		} catch (Exception e) { // 에러 발생시
			e.printStackTrace();
			
		} finally { // 최종 작업
			
			try {
				if(stmt != null) stmt.close(); // statement 종료
				if(con != null) con.close(); // connection 종료
				
			} catch (Exception e) {}
		}
		
	}

}

 

 

 

③ 회원가입 기능 작동 확인

 

회원가입 페이지

 

 

회원 가입이 완료된 모습

 

입력한 회원 정보가 DB에 입력된 모습

 

 

 

 

(3) 로그인 기능 구현

 

① login.html (로그인 페이지) : 로그인 정보를 입력받는다

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그인 화면</title>
</head>
<body>
	
	<!-- 로그인 폼 -->
	<form action="LoginOK" method="post">
		아이디 : <input type="text" name="id"><br />
		비밀번호 : <input type="password" name="pw"><br />
		<input type="submit" value="로그인">	
	</form>
	
</body>
</html>

 

② LoginOK.java : 입력된 로그인 정보를 DB에 저장된 회원정보와 비교하여 로그인 과정을 처리한다

package com.javalec.join;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.ws.Response;

/**
 * Servlet implementation class LoginOK
 */
@WebServlet("/LoginOK")
public class LoginOK extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	// 변수 초기화	
	private Connection connection;
	private Statement stmt;
	private ResultSet resultSet;
	
	private String name, id, pw, phone1, phone2, phone3, gender;
		
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginOK() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		actionDo(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		actionDo(request, response);
	}
	
	
	private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		// post로 사용자가 폼에 입력한 아이디와 비밀번호 값 받아오기
		id = request.getParameter("id");
		pw = request.getParameter("pw");
		
		// 입력한 아이디&비밀번호와 일치하는 회원이 존재하는지 DB에서 검색하는 SQL문
		String query = "select * from member where id = '" + id + "' and pw = '" + pw + "'";
		
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger");
			stmt = connection.createStatement();
			resultSet = stmt.executeQuery(query);
			
			// 아이디&비밀번호가 일치할 경우 DB에서 해당 회원의 정보를 불러옴
			while (resultSet.next()) {
				name = resultSet.getString("name");
				id = resultSet.getString("id");
				pw = resultSet.getString("pw");
				phone1 = resultSet.getString("phone1");
				phone2 = resultSet.getString("phone2");
				phone3 = resultSet.getString("phone3");
				gender = resultSet.getString("gender");
			}
			
			// 세션 생성
			HttpSession httpSession = request.getSession();
			httpSession.setAttribute("name", name);
			httpSession.setAttribute("id", id);
			httpSession.setAttribute("pw", pw);
			
			// 로그인 결과 페이지로 리다이렉트
			response.sendRedirect("loginResult.jsp");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			
		// 자원해제
		} finally {
			try {
				if(resultSet != null) resultSet.close();
				if(resultSet != null) stmt.close();
				if(resultSet != null) connection.close();
			} catch (Exception e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
		}
				

	}

}

 

③ loginResult.jsp : 로그인 성공시 이동하는 초기화면

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    
    <!-- 변수 선언 -->
    <%!
    	String name, id, pw;
    %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그인 결과 화면</title>
</head>
<body>
	
	<!-- 세션 값 변수에 넣기 -->
	<%
		name = (String)session.getAttribute("name");
		id = (String)session.getAttribute("id");
		pw = (String)session.getAttribute("pw");
	%>
	
	<!-- 변수의 값 출력 -->
	<%= name %>님 안녕하세요<br /><br />
	<a href="modify.jsp">회원정보 수정</a>
</body>
</html>

 

 

④ 로그인 기능 작동 확인

 

로그인 폼

 

로그인 성공

 

 

 

(3) 회원정보 수정 기능 구현

 

① modify.jsp (회원정보 수정 페이지) : 수정할 회원 정보를 입력 받는다

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
	
	<!-- 변수 선언 -->
	<%!
		Connection con;
		Statement stmt;
		ResultSet reset;
		
		String name, id, pw, phone1, phone2, phone3, gender;
	%>

<title>회원정보 수정 화면</title>
</head>
<body>
	
	<!-- DB에 연결하여 회원정보를 받아와 변수에 저장 -->
	<%
		id = (String)session.getAttribute("id");
	
		String query = "select * from member where id = '" + id + "'";
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger");
		stmt = con.createStatement();
		reset = stmt.executeQuery(query);
		
		while(reset.next()) {
			name = reset.getString("name");
			pw = reset.getString("pw");
			phone1 = reset.getString("phone1");
			phone2 = reset.getString("phone2");
			phone3 = reset.getString("phone3");
			gender = reset.getString("gender");
		}
	%>
	
	<!-- 회원정보 수정 입력 폼 -->
	<form action="ModifyOK" method="post">
		이름 : <input type="text" name="name" size="10" value=<%=name %>><br />
		아이디 : <%=id %><br />
		비밀번호 : <input type="password" name="pw" size="10"><br />
		전화번호 : <select name="phone1">
			<option value="010">010</option>
			<option value="016">016</option>
			<option value="017">017</option>
			<option value="018">018</option>
			<option value="019">019</option>
			<option value="011">011</option>
		</select> - 
		<input type="text" name="phone2" size="5" value=<%=phone2 %>> - <input type="text" name="phone3" size="5" value=<%=phone3 %>> <br />
		<% 
			if(gender.equals("man")) {
		%>
		성별구분 : <input type="radio" name="gender" value="man" checked="checked">남 &nbsp;<input type="radio" name="gender" value="woman">여<br />
		<% 
			} else { 
		%>
		성별구분 : <input type="radio" name="gender" value="man">남 &nbsp;<input type="radio" name="gender" value="woman" checked="checked">여<br />
		<%
			}
		%>
		<input type="submit" value="정보수정"> <input type="reset" value="취소">
	</form>
	
</body>
</html>

 

② ModifyOK.java : 회원정보 수정을 처리

package com.javalec.join;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class ModifyOK
 */
@WebServlet("/ModifyOK")
public class ModifyOK extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	// 변수 선언
	private Connection con;
	private Statement stmt;
	
	private String name, id, pw, phone1, phone2, phone3, gender;
	
	HttpSession httpSession;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ModifyOK() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		actionDo(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		actionDo(request, response);
	}
	
	// 회원정보 수정 과정을 처리하는 메소드 정의
	private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		request.setCharacterEncoding("EUC-KR");
		httpSession = request.getSession();
		
		// 세션에서 회원 정보를 불러옴
		name = request.getParameter("name");
		id = request.getParameter("id");
		pw = request.getParameter("pw");
		phone1 = request.getParameter("phone1");
		phone2 = request.getParameter("phone2");
		phone3 = request.getParameter("phone3");
		gender = request.getParameter("gender");
		
		// 실제 수정 처리 과정
		if(pwConfirm()) {
			System.out.println("OK");
			
			String query = "update member set name= '" + name + "', phone1= '" + phone1 + "', phone2= '" + phone2 + "', phone3= '" + phone3 + "', gender= '" + gender + "'";
			System.out.println(query);
			
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger");
				stmt = con.createStatement();
				
				int i = stmt.executeUpdate(query);
				
				if (i == 1) {
					System.out.println("update success");
					httpSession.setAttribute("name", name);
					response.sendRedirect("modifyResult.jsp");
				} else {
					System.out.println("update fail");
					response.sendRedirect("modify.jsp");
				}
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			} finally {
				
				try {
					if (stmt != null) stmt.close();
					if (con != null) con.close();
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}
		} else {
			System.out.println("NG");
		}
		

	}
	
	// 비밀번호가 일치하면  정보 수정처리르 허용하고, 일치하지 않으면 처리 거부
	private boolean pwConfirm() {
		// TODO Auto-generated method stub
		
		boolean rs = false;
		
		String sessionPw = (String)httpSession.getAttribute("pw");
		
		if (sessionPw.equals(pw)) {
			rs = true;
		} else {
			rs = false;
		}
		
		return rs;
	}

}

 

③ modifyResult.jsp : 회원정보 수정 처리 성공시 출력 화면

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 수정 결과 화면</title>
</head>
<body>
<%= session.getAttribute("name") %>님의 회원정보 수정이 정상 처리 되었습니다. <br /><br />
<a href="logout.jsp">로그아웃</a> &nbsp;&nbsp; <a href="modify.jsp">정보수정</a>
</body>
</html>

 

④ 회원정보 수정 기능 작동 확인

 

회원정보 수정 폼

 

회원정보 수정 완료

 

 

 

 

 

 

(4) 로그아웃 기능 구현

 

logout.jsp : 세션을 종료하고 로그인 페이지로 돌아감

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그아웃 처리</title>
</head>
<body>
	<%
		session.invalidate();
		response.sendRedirect("login.html");
	%>
</body>
</html>

'강의 정리 > JSP & Servlet (Seoul Wiz)' 카테고리의 다른 글

21. 회원 인증 프로그래밍  (0) 2019.08.20
20. 커넥션 풀  (0) 2019.08.19
18. Oracle 데이터 베이스 2  (0) 2019.08.14
17. Oracle 데이터 베이스 1  (0) 2019.08.14
16. JAVA Bean  (0) 2019.08.14