본문 바로가기

JSP, Servlet/JSP를 이용하여 회원관리 페이지 만들기

[JSP] 회원관리 페이지 만들기 - 데이터 설정 및 데이터 연결

JSP에서 Oracle을 연결하기 위해 DBCP를 이용하려면 ojdbc8.jar를 이용해야한다.

https://jamesyleather.tistory.com/369

 

[JSP] DBCP 소개

 DBCP(Database Connection Pool)의 약자로 데이터베이스와 연결을 맺고 있는 객체를 관리하는 역할을 수행.  JDBC의 단점  데이터베이스 연결 시 마다, DB접속을 위한 JDBC 드라이버 로드하고 Conn

jamesyleather.tistory.com

Oracle페이지에서 ojdbc8.jar를 다운로드 받아 Webcontent > WEB-INF > lib에 추가한다.

그리고 Servers > server.xml 맨 아래에 우리가 작성하고 있는 웹 프로젝트에 

<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxIdle="10" maxTotal="20" maxWaitMillis="-1" name="jdbc/myoracle" password="ora123" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:xe" username="ora_user" />

을 추가한다. <context>끝에 슬래쉬를 없애주고 end tag</context>를 새로 추가하여 그 안에 붙여넣는다.

이 때, username과 password와 url을 본인의 데이터베이스에 맞춰서 수정한다.

 

그리고 데이터베이스를 접근하고 종료하는 클래스를 만들어서 따로 운영한다.

<DBManager.java>

package util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBManager {

	// Connection oracle Using DBCP(Database Connection Pool)
	public static Connection getConnection() throws Exception {
		Connection conn = null;

		Context initContext = new InitialContext();
		Context envContext = (Context) initContext.lookup("java:/comp/env");
		DataSource ds = (DataSource) envContext.lookup("jdbc/myoracle");
		conn = ds.getConnection();

		return conn;
	}

	// 조회할 때 사용하는 close()
	// 입력 매개변수 : Connection, Statement, ResultSet
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if (stmt != null) {
				stmt.close();
			}
			if (rs != null) {
				rs.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// insert, update, delete 할 때 사용하는 close()
	// 입력 매개변수 : Connection, Statement
	public static void close(Connection conn, Statement stmt) {

		try {
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

 


그리고 데이터를 저장할 VO객체 클래스를 생성한다.

<EmployeeVO.java>

package employee;

import java.util.Date;

public class EmployeeVO {
	private String id;
	private String pass;
	private String name;
	private String lev;
	private Date enter;
	private String gender;
	private String phone;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getLev() {
		return lev;
	}

	public void setLev(String lev) {
		this.lev = lev;
	}

	public Date getEnter() {
		return enter;
	}

	public void setEnter(Date enter) {
		this.enter = enter;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	@Override
	public String toString() {
		return "EmployeeVO [id=" + id + ", pass=" + pass + ", name=" + name + ", lev=" + lev + ", enter=" + enter
				+ ", gender=" + gender + ", phone=" + phone + "]";
	}

}

 


데이터 접근 클래스를 만들어 로그인에 필요한 메소드를 생성한다.

그리고 데이터 접근 클래스는 무작위로 생성되면 안되므로 private로 하나의 객체만 생성할 수 있게 한다.

<EmployeeDAO.java>

package com.green.dao;

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

import employee.EmployeeVO;
import util.DBManager;

/*
 * DAO class는 싱글콘 클래스로 생성*/
public class EmployeeDAO {
	// 외부에서 접근할 수 있는 static 변수를 생성
	private static EmployeeDAO instance = new EmployeeDAO();

	// 생성자를 private 제어자로 설정
	private EmployeeDAO() {
	}

	// 외부 클래스에서 EmployeeDAO 객체를 참조하도록 하는 메소드
	public static EmployeeDAO getInstance() {
		return instance;
	}

	// 반환값 : 아이디가 존재하지 않으면 > -1, 비밀번호가 맞지 않으면 > 0, 아이디, 레벨이 맞지 않으면 > 1, 관리자
	// 레벨로 로그인 했으면 > 2, 일반회원으로 로그인하면 > 3
	public int checkUser(String userid, String pass, String lev) {
		int result = -1; // 조회결과 저장
		Connection conn = null;
		PreparedStatement pstmt = null; // ready for select Query
		ResultSet rs = null;

		String sql = "select * from employees where id = ?";

		try {
			// Connection Database
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userid);

			rs = pstmt.executeQuery();

			if (rs.next()) { // 조회한 데이터가 존재하므로 아이디는 존재한다는 의미
				String db_pass = rs.getString("pass");
				String db_level = rs.getString("lev");

				if (pass.equals(db_pass)) { // 비밀번호가 일치하는지
					if (lev.equalsIgnoreCase(db_level)) { // lev != null
						if (lev.equalsIgnoreCase("B")) { // member
							result = 3;
						} else if (lev.equalsIgnoreCase("A")) {
							result = 2;
						}
					} else {
						result = 1; // 입력한 레벨이 맞지 않을 경우
					}
				} else {
					result = 0; // not equal password
				}
			} else {
				result = -1;
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt, rs);
		}

		return result;
	}

	// 아이디를 조건으로 회원정보를 죄회해 온다.
	public EmployeeVO getEmployee(String id) {
		Connection conn = null;
		PreparedStatement pstmt = null; // ready for select Query
		ResultSet rs = null;
		EmployeeVO employee = null;

		String sql = "select * from employees where id = ?";

		try {
			// Connection Database
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);

			rs = pstmt.executeQuery();

			if (rs.next()) { // 조회한 데이터가 존재하므로 아이디는 존재한다는 의미
				employee = new EmployeeVO();
				employee.setId(rs.getString("id"));
				employee.setPass(rs.getString("pass"));
				employee.setName(rs.getString("name"));
				employee.setLev(rs.getString("lev"));
				employee.setEnter(rs.getDate("enter"));
				employee.setGender(rs.getString("gender"));
				employee.setPhone(rs.getString("phone"));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt, rs);
		}
		
		return employee;
	}
}

 

여기서 회원정보가 유효한지 메소드를 작성했다.

// 반환값 : 아이디가 존재하지 않으면 > -1, 비밀번호가 맞지 않으면 > 0, 아이디, 레벨이 맞지 않으면 > 1, 관리자
	// 레벨로 로그인 했으면 > 2, 일반회원으로 로그인하면 > 3
	public int checkUser(String userid, String pass, String lev) {
		int result = -1; // 조회결과 저장
		Connection conn = null;
		PreparedStatement pstmt = null; // ready for select Query
		ResultSet rs = null;

		String sql = "select * from employees where id = ?";

		try {
			// Connection Database
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userid);

			rs = pstmt.executeQuery();

			if (rs.next()) { // 조회한 데이터가 존재하므로 아이디는 존재한다는 의미
				String db_pass = rs.getString("pass");
				String db_level = rs.getString("lev");

				if (pass.equals(db_pass)) { // 비밀번호가 일치하는지
					if (lev.equalsIgnoreCase(db_level)) { // lev != null
						if (lev.equalsIgnoreCase("B")) { // member
							result = 3;
						} else if (lev.equalsIgnoreCase("A")) {
							result = 2;
						}
					} else {
						result = 1; // 입력한 레벨이 맞지 않을 경우
					}
				} else {
					result = 0; // not equal password
				}
			} else {
				result = -1;
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt, rs);
		}

		return result;
	}

 

그리고 회원정보를 조회하는 메소드를 작성한다.

// 아이디를 조건으로 회원정보를 조회해 온다.
	public EmployeeVO getEmployee(String id) {
		Connection conn = null;
		PreparedStatement pstmt = null; // ready for select Query
		ResultSet rs = null;
		EmployeeVO employee = null;

		String sql = "select * from employees where id = ?";

		try {
			// Connection Database
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);

			rs = pstmt.executeQuery();

			if (rs.next()) { // 조회한 데이터가 존재하므로 아이디는 존재한다는 의미
				employee = new EmployeeVO();
				employee.setId(rs.getString("id"));
				employee.setPass(rs.getString("pass"));
				employee.setName(rs.getString("name"));
				employee.setLev(rs.getString("lev"));
				employee.setEnter(rs.getDate("enter"));
				employee.setGender(rs.getString("gender"));
				employee.setPhone(rs.getString("phone"));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt, rs);
		}
		
		return employee;
	}
728x90
반응형