본문 바로가기
웹 프로그래밍(풀스택-->java)/웹프로그래밍(백엔드-->java)

25. Jsp와 데이터베이스 연동 10

by 백엔드개발자0107 2021. 12. 1.

자 오늘은 멤버업데이트에서 기존에 있던 패스워드를 불러가지고 와서 내가 업데이트폼에서 

 

작성한 패스워드값과 일치가 되느냐 안되느냐 까지 수업을 진행하였다.

 

<%@page import="java.io.PrintWriter"%>
<%@page import="db.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
request.setCharacterEncoding("UTF-8");
%>

<jsp:useBean id="mbean" class="db.MemberBean">
<jsp:setProperty name="mbean" property = "*"/>
</jsp:useBean><!-- 
기존에 있는 데이터만 데이터가들어가고 mbean에 없는 데이터는 null만 들어간다. -->

<%
String id = request.getParameter("id");
MemberDAO mdao = new MemberDAO();
//스트링 타입으로 저장되어있는 패스워드를 가져옴 (데이터베이스에서 가져온 pass 값이 저장 )
String pass = mdao.getPass(id);

//수정하기 위해서 작성한 패스워드값과 기존데이터베이스에서 가져온패스워드 값을 비교 
if(mbean.getPass1().equals(pass)){//기존 패스와 데이터베이스패스가 같다면 member테이블을 수정 

	
	
	
}else{
	
		PrintWriter script  = response.getWriter();
		script.println("<script>");
		script.println("alert('패스워드가 맞지 않습니다 다시 확인해주세요')");
		script.println("history.go(-1)");
		script.println("</script>");
		
}

%>



</body>
</html>

 

오늘 배울 jsp이다.

 


<jsp:useBean id="mbean" class="db.MemberBean">
<jsp:setProperty name="mbean" property = "*"/>
</jsp:useBean><!-- 
기존에 있는 데이터만 데이터가들어가고 mbean에 없는 데이터는 null만 들어간다. -->

팁: 예전부터 이 jsp디렉티브가 뭘 나타내는 건지 궁금하고 의아해했었다.

그 결과 , 위 코드를 해석해서 자바코드로 풀이하자면,

db.MemberBean mbean = new db.MemberBean()

mbean.setProperty("*"); 이정도로 해석하면 될듯하다.

 


자 회원수정파트이다.

 

MemberUpdateForm.jsp

 

<%@page import="db.MemberBean"%>
<%@page import="db.MemberDAO"%>
<%@page import="db.MemberBean"%>
<%@page import="db.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
		0. memberList에서 넘긴 id를 받아줌. 
	    1. 데이터베이스에서 한 회원의 정보를 가져온다. 
  -->
  
  <%
  String id = request.getParameter("id");
  //MemberList에서 넘긴 , id값을받아오는것이다. 
  MemberDAO mdao = new MemberDAO();
  
  //자, 여러개의 MemberBean이 모인 가변길이의 클래스집합은 Vector로 받지만,
  //자 ,한개의 클래스는 MemberBean으로 만 받는다.
  
  //두사람부터는 무조건 벡터쓴다. 
  
  MemberBean mbean = mdao.oneSelectMember(id);
  
  
  %>
<!-- 		2. 테이블 태그를 이용하여 화면에 회원의 정보를 출력 
 -->

<center>

<h2>회원정보수정하기 </h2>


<table width="400" border ="1">
<form action="MemberUpdateProc.jsp" method="post">

<tr height="50">
<td align="center" width="150">아이디 </td>
<td align="center" width="250"><%=mbean.getId()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">이메일  </td>
<td align="center" width="250"> <input type="email" name="email" value="<%=mbean.getEmail()%>">  </td>
</tr>
<tr height="50">
<td align="center" width="150">전화번호  </td>
<td align="center" width="250"><input type="tel" name="tel" value="<%=mbean.getTel()%>"> </td>
</tr>
<tr height="50">
<td align="center" width="150">패스워드   </td>
<td align="center" width="250"><input type="password" name="pass1" > </td>
</tr>

<tr height="50">
<td align="center" colspan="2">  
<input type = "hidden" name="pass1" value="<%=mbean.getPass1()%>">
<input type = "hidden" name="id" value="<%=mbean.getId()%>">

<input type="submit" value="회원 수정하기"> &nbsp;&nbsp;</form>
<button onclick="location.href='MemberList.jsp' ">회원전체보기 </button>
</td>
</tr>

</table>

</center>

</body>
</html>

 

MemberUpdateProc.jsp

 

<%@page import="java.io.PrintWriter"%>
<%@page import="db.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
request.setCharacterEncoding("UTF-8");
%>

<jsp:useBean id="mbean" class="db.MemberBean">
<jsp:setProperty name="mbean" property = "*"/>
</jsp:useBean><!-- 
기존에 있는 데이터만 데이터가들어가고 mbean에 없는 데이터는 null만 들어간다. -->

<%
String id = request.getParameter("id");
MemberDAO mdao = new MemberDAO();
//스트링 타입으로 저장되어있는 패스워드를 가져옴 (데이터베이스에서 가져온 pass 값이 저장 )
String pass = mdao.getPass(id);

//수정하기 위해서 작성한 패스워드값과 기존데이터베이스에서 가져온패스워드 값을 비교 
if(mbean.getPass1().equals(pass)){//기존 패스와 데이터베이스패스가 같다면 member테이블을 수정 

	//MemberDAO 클래스의 회원수정 메소드를 호출하도록 한다.
	mdao.updateMember(mbean);
	response.sendRedirect("MemberList.jsp");
	
}else{
	
		PrintWriter script  = response.getWriter();
		script.println("<script>");
		script.println("alert('패스워드가 맞지 않습니다 다시 확인해주세요')");
		script.println("history.go(-1)");
		script.println("</script>");
		
}

%>



</body>
</html>

 

이다.

 

MemberDAO.class

 

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;


//오라클 데이터베이스에 연결하고 select,insert,update,delete작업을 실행해주는 메소드이다. 
public class MemberDAO {

	String id = "root";
	String pass = "Dahyon0107!";
	String url = "jdbc:mysql://localhost:3306/sys";//접속 url 

	Connection con; //데이터베이스에 접근할수 있도록 설정 
	PreparedStatement pstmt;//데이터베이스에서 쿼리를 실행시켜주는 객체 
	ResultSet rs; // 데이터베이스의 테이블의 결과 리턴받아 자바에 저장해주는 객체 
	
		
	//데이터베이스(mysql)에 접근할수 있도록 도와주는 메소드
	public void getCon() {
			
		try {
			
			//1.해당 데이터베이스를 사용한다고 선언 (클래스를 등록= 오라클용을 사용 )
			Class.forName("com.mysql.jdbc.Driver");
			//2.해당 데이터베이스에 접속 
			con = DriverManager.getConnection(url,id,pass);
			
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
	}
	
	//데이터 베이스에 한사람의 회원 정보를 저장해주는 메소드 
	public void insertMember2(MemberBean mbean) {
		

try{
	
	getCon();
	
	//3. 접속후 쿼리준비하여 쿼리를 사용하도록 설정 
	String sql = "insert into member2 values(?,?,?,?,?,?,?,?)";
	//4. 쿼리를 사용하도록 설정 
	PreparedStatement pstmt  = con.prepareStatement(sql);//jsp에서 쿼리를 사용하도록 설정 
	//5. ?에 맞게 데이터를 맵핑 
	pstmt.setString(1,mbean.getId());
	pstmt.setString(2,mbean.getPass1());
	pstmt.setString(3,mbean.getEmail());
	pstmt.setString(4,mbean.getTel());
	pstmt.setString(5,mbean.getHobby());
	pstmt.setString(6,mbean.getJob());
	pstmt.setString(7,mbean.getAge());
	pstmt.setString(8,mbean.getInfo());
	
	pstmt.executeUpdate();//insert,update,delete시 사용하는 메소드 
	
	//5. 자원 반납 
	con.close();
	
}catch(Exception e){
	e.printStackTrace();
	
}
		
	}
	
	
	public Vector<MemberBean> allSelectMember2() {
		Vector<MemberBean> v = new Vector<MemberBean>();
		
		try {
			
			
			
			getCon();
			
			String sql = "select * from sys.member2";
			
			PreparedStatement pstmt = con.prepareStatement(sql);
			
		
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				
				MemberBean bean = new MemberBean();
				
				bean.setId(rs.getString(1));//안드로이드에서는 0 자바에서는 1부터 시작한다.
				bean.setPass1(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setTel(rs.getString(4));
				bean.setHobby(rs.getString(5));
				bean.setJob(rs.getString(6));
				bean.setAge(rs.getString(7));
				bean.setInfo(rs.getString(8));
				
				v.add(bean);
			}
			
			con.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return v;

	}

	public MemberBean oneSelectMember(String id) {
		
		MemberBean bean = new MemberBean();
		
		try {
			
			getCon();
			
			String sql  = "select * from sys.member2 where id =?";
			
			pstmt = con.prepareStatement(sql);
			
			pstmt.setString(1, id);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				
				bean.setId(rs.getString(1));//안드로이드에서는 0 자바에서는 1부터 시작한다.
				bean.setPass1(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setTel(rs.getString(4));
				bean.setHobby(rs.getString(5));
				bean.setJob(rs.getString(6));
				bean.setAge(rs.getString(7));
				bean.setInfo(rs.getString(8));
			 
				
			}
			
			con.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return bean;
	}
	
	//한 사람에 대한 정보를 리턴하는 메소드작성 
	public String getPass(String id) {
		//스트링으로 리턴을 해야하기에 스트링변수 선언 
		String pass="";
		
		try {
			getCon();
			//쿼리준비 
			String sql = "select pass1 from sys.member2 where id = ?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				
				pass = rs.getString(1);//패스워드 값이 저장된 컬럼 인덱스 
				
				
			}
			//자원반납 
			con.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		//결과를 리턴 
		return pass;
		
	}
	
	//한 회원의 정보를 수정하는 메소드 
	//select외에는 대부분 리턴타입이 없다. 
	
	public void updateMember(MemberBean bean) {
		
		getCon();
		
		try {
			
			//쿼리준비 
			String  sql = "update member2 set email =?, tel=? where id = ?";
			//쿼리 실행 객체 선언
			pstmt = con.prepareStatement(sql);
			//?에 값을 맵핑 
			pstmt.setString(1, bean.getEmail());
			pstmt.setString(2,bean.getTel());
			pstmt.setString(3, bean.getId());
			//쿼리 실행
			pstmt.executeUpdate();
			//자원 반납 
			con.close();
			
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
		
	}
			
	
}

위의 코드와 주석처리를 잘 보자..!


회원삭제파트이다.

 

MemberDeleteForm.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>




<center>

<h2>회원삭제하기 </h2>


<table width="400" border ="1">
<form action="MemberDeleteProc.jsp" method="post">

<tr height="50">
<td align="center" width="150">아이디 </td>
<td align="center" width="250"><%=request.getParameter("id")%> </td>
</tr>

<tr height="50">
<td align="center" width="150">패스워드   </td>
<td align="center" width="250"><input type="password" name="pass1" > </td>
</tr>

<tr height="50">
<td align="center" colspan="2">  

<input type = "hidden" name="id" value="<%=request.getParameter("id")%>">
<input type="submit" value="회원 삭제하기"> &nbsp;&nbsp;</form>
<button onclick="location.href='MemberList.jsp' ">회원전체보기 </button>
</td>
</tr>

</table>

</center>


</body>
</html>

 

MemberDeleteProc.jsp

 

<%@page import="db.MemberDAO"%>
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
request.setCharacterEncoding("UTF-8");
%>


<jsp:useBean id="mbean" class="db.MemberBean">
<jsp:setProperty name="mbean" property = "*"/>
</jsp:useBean><!-- 
기존에 있는 데이터만 데이터가들어가고 mbean에 없는 데이터는 null만 들어간다. -->

<%
MemberDAO mdao = new MemberDAO();
//스트링 타입으로 저장되어있는 패스워드를 가져옴 (데이터베이스에서 가져온 pass 값이 저장 )
String pass = mdao.getPass(mbean.getId());

//수정하기 위해서 작성한 패스워드값과 기존데이터베이스에서 가져온패스워드 값을 비교 
if(mbean.getPass1().equals(pass)){//기존 패스와 데이터베이스패스가 같다면 member테이블을 수정 

	//MemberDAO 클래스의 회원수정 메소드를 호출하도록 한다.

	mdao.deleteMember(mbean.getId());
	response.sendRedirect("MemberList.jsp");
	
	
}else{
	
		PrintWriter script  = response.getWriter();
		script.println("<script>");
		script.println("alert('패스워드가 맞지 않습니다 다시 확인해주세요')");
		script.println("history.go(-1)");
		script.println("</script>");
		
}

%>

</body>
</html>

MemberDAO.class

 

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;


//오라클 데이터베이스에 연결하고 select,insert,update,delete작업을 실행해주는 메소드이다. 
public class MemberDAO {

	String id = "root";
	String pass = "Dahyon0107!";
	String url = "jdbc:mysql://localhost:3306/sys";//접속 url 

	Connection con; //데이터베이스에 접근할수 있도록 설정 
	PreparedStatement pstmt;//데이터베이스에서 쿼리를 실행시켜주는 객체 
	ResultSet rs; // 데이터베이스의 테이블의 결과 리턴받아 자바에 저장해주는 객체 
	
		
	//데이터베이스(mysql)에 접근할수 있도록 도와주는 메소드
	public void getCon() {
			
		try {
			
			//1.해당 데이터베이스를 사용한다고 선언 (클래스를 등록= 오라클용을 사용 )
			Class.forName("com.mysql.jdbc.Driver");
			//2.해당 데이터베이스에 접속 
			con = DriverManager.getConnection(url,id,pass);
			
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
	}
	
	//데이터 베이스에 한사람의 회원 정보를 저장해주는 메소드 
	public void insertMember2(MemberBean mbean) {
		

try{
	
	getCon();
	
	//3. 접속후 쿼리준비하여 쿼리를 사용하도록 설정 
	String sql = "insert into member2 values(?,?,?,?,?,?,?,?)";
	//4. 쿼리를 사용하도록 설정 
	PreparedStatement pstmt  = con.prepareStatement(sql);//jsp에서 쿼리를 사용하도록 설정 
	//5. ?에 맞게 데이터를 맵핑 
	pstmt.setString(1,mbean.getId());
	pstmt.setString(2,mbean.getPass1());
	pstmt.setString(3,mbean.getEmail());
	pstmt.setString(4,mbean.getTel());
	pstmt.setString(5,mbean.getHobby());
	pstmt.setString(6,mbean.getJob());
	pstmt.setString(7,mbean.getAge());
	pstmt.setString(8,mbean.getInfo());
	
	pstmt.executeUpdate();//insert,update,delete시 사용하는 메소드 
	
	//5. 자원 반납 
	con.close();
	
}catch(Exception e){
	e.printStackTrace();
	
}
		
	}
	
	
	public Vector<MemberBean> allSelectMember2() {
		Vector<MemberBean> v = new Vector<MemberBean>();
		
		try {
			
			
			
			getCon();
			
			String sql = "select * from sys.member2";
			
			PreparedStatement pstmt = con.prepareStatement(sql);
			
		
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				
				MemberBean bean = new MemberBean();
				
				bean.setId(rs.getString(1));//안드로이드에서는 0 자바에서는 1부터 시작한다.
				bean.setPass1(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setTel(rs.getString(4));
				bean.setHobby(rs.getString(5));
				bean.setJob(rs.getString(6));
				bean.setAge(rs.getString(7));
				bean.setInfo(rs.getString(8));
				
				v.add(bean);
			}
			
			con.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return v;

	}

	public MemberBean oneSelectMember(String id) {
		
		MemberBean bean = new MemberBean();
		
		try {
			
			getCon();
			
			String sql  = "select * from sys.member2 where id =?";
			
			pstmt = con.prepareStatement(sql);
			
			pstmt.setString(1, id);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				
				bean.setId(rs.getString(1));//안드로이드에서는 0 자바에서는 1부터 시작한다.
				bean.setPass1(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setTel(rs.getString(4));
				bean.setHobby(rs.getString(5));
				bean.setJob(rs.getString(6));
				bean.setAge(rs.getString(7));
				bean.setInfo(rs.getString(8));
			 
				
			}
			
			con.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return bean;
	}
	
	//한 사람에 대한 정보를 리턴하는 메소드작성 
	public String getPass(String id) {
		//스트링으로 리턴을 해야하기에 스트링변수 선언 
		String pass="";
		
		try {
			getCon();
			//쿼리준비 
			String sql = "select pass1 from sys.member2 where id = ?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				
				pass = rs.getString(1);//패스워드 값이 저장된 컬럼 인덱스 
				
				
			}
			//자원반납 
			con.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		//결과를 리턴 
		return pass;
		
	}
	
	//한 회원의 정보를 수정하는 메소드 
	//select외에는 대부분 리턴타입이 없다. 
	
	public void updateMember(MemberBean bean) {
		
		getCon();
		
		try {
			
			//쿼리준비 
			String  sql = "update member2 set email =?, tel=? where id = ?";
			//쿼리 실행 객체 선언
			pstmt = con.prepareStatement(sql);
			//?에 값을 맵핑 
			pstmt.setString(1, bean.getEmail());
			pstmt.setString(2,bean.getTel());
			pstmt.setString(3, bean.getId());
			//쿼리 실행
			pstmt.executeUpdate();
			//자원 반납 
			con.close();
			
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
		
	}
	
	//한 회원을 삭제하는 메소드 작성 
	
	public void deleteMember(String id) {
		
		getCon();
		try {
			
			//쿼리 준비 
			String sql = "delete from sys.member2 where id = ?";
			//쿼리 실행 
		
			pstmt = con.prepareStatement(sql);
			//?에 값을 맵핑 
			pstmt.setString(1, id);
			
			pstmt.executeUpdate();
			//자원 반납 
			con.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
	
	
	
}

위 코드 내용과 주석을 잘 보고 익히자!..!