memberBean.java
package magic.member;
import java.sql.Timestamp;
public class MemberBean {
private String mem_uid;
private String mem_pwd;
private String mem_name;
private String mem_email;
private Timestamp mem_regdate;
private String mem_addr;
public String getMem_uid() {
return mem_uid;
}
public void setMem_uid(String mem_uid) {
this.mem_uid = mem_uid;
}
public String getMem_pwd() {
return mem_pwd;
}
public void setMem_pwd(String mem_pwd) {
this.mem_pwd = mem_pwd;
}
public String getMem_name() {
return mem_name;
}
public void setMem_name(String mem_name) {
this.mem_name = mem_name;
}
public String getMem_email() {
return mem_email;
}
public void setMem_email(String mem_email) {
this.mem_email = mem_email;
}
public Timestamp getMem_regdate() {
return mem_regdate;
}
public void setMem_regdate(Timestamp mem_regdate) {
this.mem_regdate = mem_regdate;
}
public String getMem_addr() {
return mem_addr;
}
public void setMem_addr(String mem_addr) {
this.mem_addr = mem_addr;
}
}
SQL DEVELOPER에서
CREATE TABLE MEMBERT
(mem_uid VARCHAR2(15) PRIMARY KEY
,mem_pwd VARCHAR2(15) NOT NULL
,mem_name VARCHAR2(10) NOT NULL
,mem_email VARCHAR2(50)
,mem_regdate DATE
,mem_address VARCHAR2(100)
);
입력하여 테이블 생성
memberDBBean.java
package magic.member;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDBBean {
Connection conn = null;
PreparedStatement pstmt = null;
//1. 전역 MemberDBBean 객체 레퍼런스를 리턴하는 메소드
private static MemberDBBean instance = new MemberDBBean();
//참조변수 instance를 객체로 받아서 사용
public static MemberDBBean getInstance(){
return instance;
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
public Connection getConnection( ) throws Exception{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
//경로 찾기
return ds.getConnection();
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//3. 전달인자로 받은 member를 memberT 테이블에 삽입하는 메소드
public int insertMember(MemberBean member) throws Exception{// MemberBean member(매개변수)객체
int re = -1;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
String sql = "INSERT INTO MEMBERT VALUES (?,?,?,?,?,?)";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
// 내가 한 방법
// conn = ((DataSource)(new InitialContext().lookup("java:comp/env/jdbc/oracle"))).getConnection();
// pstmt = conn.prepareStatement(sql.toString());//pstmt객체로 받음
pstmt.setString(1, member.getMem_uid());
//값을 넣기 위해(세팅하기 위해서)사용
pstmt.setString(2, member.getMem_pwd());
pstmt.setString(3, member.getMem_name());
pstmt.setString(4, member.getMem_email());
pstmt.setTimestamp(5, member.getMem_regdate());
pstmt.setString(6, member.getMem_addr());
pstmt.executeUpdate();//쿼리 실행
//여기서 sql문은 insert문이기 때문에 executeUpdate();를 사용해야함
re=1;//쿼리가 정상적으로 실행되었을때, re =1 이 됨.
} catch(SQLException ex) {
System.out.println("추가 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
//4. 회원 가입시 아이디 중복 확인 할때 사용하는 메소드
public int confirmID(String id) throws Exception{//String id를 받아서 사용
int re = -1;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
ResultSet rs = null;//조회시 결과값받음
String sql ="SELECT * FROM MEMBERT WHERE mem_uid=?";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id ); //PK인 ID가 존재하는지 확인
rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음
//결과를 확인하기 위해서 while 또는 if문 사용
if (rs.next()) {//id를 pk로 삼아 확인하면 되는거이기 때문에 if문 사용
re = 1; //id 조회했을 때 중복인 경우
}else {
re = -1; //id 조회했을 때 중복이 아닌 경우
//아이디(계정)을 삭제한 경우
}
} catch(SQLException ex) {
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
}
server.xml 하단에 아래의 코드가 되도록 수정
<Context docBase="magicWebApp" path="/magicWebApp" reloadable="true" source="org.eclipse.jst.jee.server:magicWebApp">
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/oracle" password="tiger" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:xe" username="scott"/>
</Context></Host>
registerOk.jsp
<%@page import="magic.member.MemberDBBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<jsp:useBean id="mb" class="magic.member.MemberBean"/>
<jsp:setProperty property="*" name="mb"/>
<%
MemberDBBean manager=MemberDBBean.getInstance();
if(manager.confirmID(mb.getMem_uid()) == 1){
%>
<script>
alert("중복되는 아이디가 존재합니다.");
</script>
<%
}else{
int re=manager.insertMember(mb); //정상적으로 실행 되면 re=1이 된다.
if(re == 1){
%>
<script>
alert("회원가입을 축하드립니다.\n회원으로 로그인 해주세요.");
</script>
<%
}else{
%>
<script>
alert("회원가입에 실패했습니다.");
</script>
<%
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
SQL DEVELOPER로 데이터 확인
mem_regdate를 추가(sysdate 변경
최종
<%
session.invalidate();//세션 제거
response.sendRedirect("login.jsp");
//login.jsp로 이동
%>
<%@page import="magic.member.MemberDBBean"%>
<%@page import="magic.member.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("mem_uid");
String pwd = request.getParameter("mem_pwd");
MemberDBBean manager = MemberDBBean.getInstance();
int check = manager.userCheck(id, pwd);
MemberBean mb = manager.getMember(id);
System.out.println(id);
System.out.println(pwd);
System.out.println("d"+check);
System.out.println(mb);
if(mb==null){//id가 null이면
%>
<script>
alert("존재하지 않는 회원");
history.go(-1);//바로 이전페이지로 이동
</script>
<%
}
else{//회원 존재할 시
String name=mb.getMem_name();
if(check ==1){//만약에check =1 이면 맞는 거임 main.jsp로 이동시킴
//세션으로 name과 id를 넘길거임.(메인으로)
session.setAttribute("uid", id);
session.setAttribute("name", name);
//url을 복사해서 브라우저 붙여넣기하면 튕기게 하여 파라미터추가 하는 방법(예전에 했었음)
session.setAttribute("Member", "yes");
//받는 쪽에서 member를 확인 할 수 있음
//main.jsp로 이동
response.sendRedirect("main.jsp");
}else if(check==0){
%>
<script>
alert("비밀번호가 맞지 않습니다.");
history.go(-1);//바로 이전페이지로 이동
</script>
<%
}
else{
%>
<script>
alert("아이디가 맞지 않습니다.");
history.go(-1);//바로 이전페이지로 이동
</script>
<%
}
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
if(session.getAttribute("Member")== null){
response.sendRedirect("login.jsp");
}//loginOk에서 session.setAttribute("Mebmer", "yes");가 아닌경우 login.jsp로 보낸다.(튕기게함)
String uid = (String)session.getAttribute("uid");
String name = (String)session.getAttribute("name");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<form method="post" action ="logOut.jsp">
<tr>
<td>안녕하세요. <%= name %>(<%= uid %>)님 </td>
</tr>
<tr>
<td>
<input type="submit" value="로그아웃">
<input type="button" value="회원정보변경"
onclick="javascript:window.location='memberUpdate.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
###login.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<form method="post" action="loginOk.jsp" >
<tr height="30">
<td width="100">
사용자 ID
</td>
<td width="100">
<input type="text" name="mem_uid">
</td>
</tr>
<tr>
<td width="100">
비밀번호
</td>
<td width="100">
<input type="password" name="mem_pwd" >
</td>
</tr>
<tr>
<td colspan = "2" align="center">
<input type="submit" value="로그인">
<input type="button" value="회원가입" onclick="javascirpt:window.location='register.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
memberDBBean.jsp
package magic.member;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDBBean {
Connection conn = null;
PreparedStatement pstmt = null;
//1. 전역 MemberDBBean 객체 레퍼런스를 리턴하는 메소드
private static MemberDBBean instance = new MemberDBBean();
//참조변수 instance를 객체로 받아서 사용
public static MemberDBBean getInstance(){
return instance;
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
public Connection getConnection( ) throws Exception{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
//경로 찾기
return ds.getConnection();
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//3. 전달인자로 받은 member를 memberT 테이블에 삽입하는 메소드
public int insertMember(MemberBean member) throws Exception{// MemberBean member(매개변수)객체
int re = -1;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
String sql = "INSERT INTO MEMBERT VALUES (?,?,?,?,sysdate,?)";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
pstmt.setString(1, member.getMem_uid());
//값을 넣기 위해(세팅하기 위해서)사용
pstmt.setString(2, member.getMem_pwd());
pstmt.setString(3, member.getMem_name());
pstmt.setString(4, member.getMem_email());
// pstmt.setTimestamp(5, member.getMem_regdate());
pstmt.setString(5, member.getMem_addr());
pstmt.executeUpdate();//쿼리 실행
//여기서 sql문은 insert문이기 때문에 executeUpdate();를 사용해야함
re=1;//쿼리가 정상적으로 실행되었을때, re =1 이 됨.
} catch(SQLException ex) {
System.out.println("추가 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
//4. 회원 가입시 아이디 중복 확인 할때 사용하는 메소드
public int confirmID(String id) throws Exception{//String id를 받아서 사용
int re = -1;//결과값 분기처리하기 위해서 변수 선언
Connection conn = null;//데이터 베이스 접속//dbcp 연결위한 참조변수 선언
PreparedStatement pstmt = null;// DB에 SQL 전달//SQL문 사용하기 위한 참조변수 선언
ResultSet rs = null;//조회시 결과값받음 //쿼리결과값 받기 위해서 참조변수 선언
String sql ="SELECT * FROM MEMBERT WHERE mem_uid = ?";//쿼리를 변수로 사용
try {//DB 처리를 위해서 예외발생을 위한 try~catch문 사용
conn = getConnection();//dbcp 연결해서 conn 참조변수로 받음
pstmt = conn.prepareStatement(sql);
//conn 객체에서 prepareStatment 메소드의 매개변수로 쿼리문 사용
pstmt.setString(1,id); //쿼리 파라미터를 index로 받아서 처리
rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음
//select 조회문은 executeQuery 메소드 처리
//결과를 확인하기 위해서 while(여러개의 결과값) 또는 if문 사용
if (rs.next()) {
re = 1; //id 조회했을 때 중복인 경우
}else {
re = -1; //id 조회했을 때 중복이 아닌 경우
}
} catch(SQLException ex) {//쿼리 조회했다가 오류 발생시
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
//5. 사용자 인증시 사용하는 메소드
public int userCheck(String id, String pwd) throws Exception{
int re = -1;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String db_mem_pwd;
String sql="SELECT MEM_PWD FROM MEMBERT WHERE mem_uid = ?";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);
rs = pstmt.executeQuery();
if (rs.next()) {//아이디가 일치하는 로우 존재
db_mem_pwd = rs.getString("mem_pwd");
if(db_mem_pwd.equals(pwd)) {//패스워드도 일치
re = 1;
}else {//패스워드가 불일치
re = 0;
}
}else {//해당 아이디가 존재하지 않음
re = -1;
}
} catch(SQLException ex) {
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
private String mem_address;
//6. 아이디가 일치하는 멤버의 정보를 얻어오는 메소드
public MemberBean getMember(String id) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT MEM_UID, MEM_PWD, MEM_NAME, MEM_EMAIL, MEM_REGDATE, MEM_ADDRESS"
+"FROM MEMBERT WHERE MEM_UID=?";
//*가 아니라 다 적으면 나중에 수정할때 편함
//재시작하지 않아도 됨.
MemberBean member=null;
try{
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
//while 또는 if
if(rs.next()) {//아이디가 일치하는 로우 존재
member=new MemberBean();
//가지고 와서 값 setting
member.setMem_uid(rs.getString("mem_uid"));
member.setMem_pwd(rs.getString("mem_pwd"));
member.setMem_name(rs.getString("mem_name"));
member.setMem_email(rs.getString("mem_email"));
member.setMem_regdate(rs.getTimestamp("mem_regdate"));
member.setMem_addr(rs.getString("mem_address"));
}
} catch(SQLException ex) {
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
rs.close();
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return member;
}