JSP에서 Oracle을 연결하기 위해 DBCP를 이용하려면 ojdbc8.jar를 이용해야한다.
https://jamesyleather.tistory.com/369
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
반응형
'JSP, Servlet > JSP를 이용하여 회원관리 페이지 만들기' 카테고리의 다른 글
[JSP] 회원관리 페이지 만들기 - 회원등록 페이지 (0) | 2020.09.09 |
---|---|
[JSP] 회원관리 페이지 만들기 - 메인페이지와 회원수정페이지 (0) | 2020.09.04 |
[JSP] 회원관리 페이지 만들기 - 로그인 폼 만들기 (0) | 2020.09.03 |