2022.08.29 JSP 사용자 관리

sofia·2022년 9월 4일
0

JAVA

목록 보기
23/27
post-thumbnail

사용자 관계 1단계 - 2PPT

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 DEVELOPE

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;
	}
}

사용자 관계 1단계 - 3PPT

1. server.xml

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 변경


최종

logOut.jsp

<%
	session.invalidate();//세션 제거
	response.sendRedirect("login.jsp");
//login.jsp로 이동
 %>

loginOK.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>

main.jsp

<%@ 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="로그아웃">
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			<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="로그인">
         			 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
         			<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;
	  }

0개의 댓글