오늘이라도

[Web] 9. JSP ③ : jsp06.jsp ~ jsp08jsp : 삭제 기능 추가, 회원 정보 수정 화면 구성 본문

취업성공패키지 SW 개발자 교육/Web

[Web] 9. JSP ③ : jsp06.jsp ~ jsp08jsp : 삭제 기능 추가, 회원 정보 수정 화면 구성

upcake_ 2020. 5. 19. 09:34
반응형

▼MemberDAO.java

package com.hanul.study;

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

public class MemberDAO {
	private Connection conn;		//연결 객체
	private PreparedStatement ps;	//전송 객체
	private ResultSet rs;			//결과 객체
	
	//DB 접속
	public Connection getConn() {
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
		String user = "hanul";
		String password = "0000";
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("getConn() Exception!!!");
		}
		return conn;
	} //getConn()
	
	//회원가입
	public int memberInsert(MemberDTO dto) {
		conn = getConn();
		String sql = "INSERT INTO member VALUES(?, ?, ?, ?, ?, ?)";
		int succ = 0;
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, dto.getIrum());
			ps.setString(2, dto.getId());
			ps.setString(3, dto.getPw());
			ps.setInt(4, dto.getAge());
			ps.setString(5, dto.getAddr());
			ps.setString(6, dto.getTel());
			succ = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("memberInsert() Exception!!!");
		} finally {
			dbClose();
		}
		return succ;
	} //memberInsert()
	
	// 전체 목록 검색
	public ArrayList<MemberDTO> memberSearchAll() {
		conn = getConn();
		String sql = "SELECT * FROM member";
		ArrayList<MemberDTO> list = new ArrayList<>();
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				String irum = rs.getString("irum");
				String id = rs.getString("id");
				String pw = rs.getString("pw");
				int age = rs.getInt("age");
				String addr = rs.getString("addr");
				String tel = rs.getString("tel");
				MemberDTO dto = new MemberDTO(irum, id, pw, age, addr, tel);
				list.add(dto);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("memberSearchAll() Exception!!!");
		} finally {
			dbClose();
		}
		return list;
	} // memberSearchAll()
	
	//회원 정보 삭제
	public int memberDelete(String id) {
		conn = getConn();
		String sql = "DELETE FROM member WHERE id = ?";
		int succ = 0;
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, id);
			succ = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("memberDelete() Exception!!!");
		} finally {
			dbClose();
		}
		return succ;
	}// memberDelete()
	
	//회원 ID 검색
	public MemberDTO getById(String id) {
		conn = getConn();
		String sql = "SELECT * FROM member WHERE id = ?";
		MemberDTO dto = null;
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if (rs.next()) {
				String irum = rs.getString("irum");
				id = rs.getString("id");
				String pw = rs.getString("pw");
				int age = rs.getInt("age");
				String addr = rs.getString("addr");
				String tel = rs.getString("tel");
				dto = new MemberDTO(irum, id, pw, age, addr, tel);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("getById() Exception!!!");
		} finally {
			dbClose();
		}
		return dto;
	} //getById()
	
	//DB 접속 해제
	public void dbClose() {
		try {
			if(rs != null) rs.close(); 
			if(ps != null) ps.close();
			if(conn != null) conn.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("dbClose() Exception!!!");
		}
	} //dbClose()
}// class

 

▲jsp06 ~ 07 작동 화면 : 회원 정보 조회, 삭제1 ~ 4

 

▼jsp06.jsp : 회원 정보 조회 화면

<%@page import="com.hanul.study.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.hanul.study.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- <jsp:useBean id="dao" class="com.hanul.study.MemberDAO" /> --%>
<%
MemberDAO dao = new MemberDAO();
ArrayList<MemberDTO> list = dao.memberSearchAll();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP06</title>
<script type="text/javascript">
	function fnDel(id) {
//		alert("id : " + id); // 함수가 제대로 작동하는지 확인
		if(confirm("정말 삭제하시겠습니까?")) {
			location.href = "jsp07.jsp?id=" + id;
		}
		return false;
	}
</script>
</head>
<body>
	<div align="center">
		[전체 회원 목록 조회]<br />
		<table border="1">
			<tr>
				<th>이름</th>
				<th>아이디</th>
				<th>비밀번호</th>
				<th>나이</th>
				<th>주소</th>
				<th>전화번호</th>
				<th colspan="4">삭제</th>
				<!-- 삭제 방법 -->
				<!-- 1 : 앵커 -->
				<!-- 2 : 버튼 -->
				<!-- 3 : 함수 -->
				<!-- 4 : input type 버튼 + 함수 -->
				<th>수정</th>
			</tr>
			<%for (MemberDTO dto : list) { %>
				<tr align="center">
					<td><%=dto.getIrum() %></td>
					<td><%=dto.getId() %></td>
					<td><%=dto.getPw() %></td>
					<td><%=dto.getAge() %></td>
					<td><%=dto.getAddr() %></td>
					<td><%=dto.getTel() %></td>
					<td><a href="jsp07.jsp?id=<%=dto.getId() %>">삭제1</a></td>
					<td><button onclick="location.href='jsp07.jsp?id=<%=dto.getId() %>'">삭제2</button></td>
					<!-- 삭제1과 삭제2는 확인창 없이 삭제가 바로 되므로 실수로 삭제할 수도 있다는 단점이 있다. -->
					<td><button onclick="fnDel('<%=dto.getId() %>')">삭제3</button></td>
					<!-- fnDel() 매개 변수를 반드시 작은 따옴표나 큰 따옴표로 묶어준다.-->
					<!-- 묶지 않으면 문자로 된 id는 작동이 안된다.  -->
					<!-- button 태그는 form 내에서 submit 역할을 한다는 단점이 있다. -->
					<td><input type="button" value="삭제4" onclick="fnDel('<%=dto.getId() %>')" /></td>
					<td><input type="button" value="수정" onclick="location.href='jsp08.jsp?id=<%=dto.getId() %>'" /></td>
				</tr>
			<%} %>
			<tr align="center">
				<td colspan="11">
					<input type="button" value="회원가입" onclick="location.href='jsp05Main.html'" />
				</td>			
			</tr>
		</table>
	</div>
</body>
</html>

 

▼jsp07.jsp : 회원 정보 삭제

<%@page import="com.hanul.study.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
MemberDAO dao = new MemberDAO();
int succ = dao.memberDelete(id);

if(succ > 0) {
	out.println("<script> alert('삭제 성공!');");
	out.println("location.href = 'jsp06.jsp'; </script>");
} else {
	out.println("<script> alert('삭제 실패!');");
	out.println("location.href = 'jsp06.jsp'; </script>");
}
%>

 

▲jsp08 : 회원 정보 수정 화면

 - 수정 기능을 담당하는 jsp09.jsp를 작성하지 않아서 404 오류가 나온다.

 

 

▼jsp08.jsp : 회원 정보 수정 화면

<%@page import="com.hanul.study.MemberDTO"%>
<%@page import="com.hanul.study.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
MemberDAO dao = new MemberDAO();
MemberDTO dto = dao.getById(id);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP08</title>
<style type="text/css">
	.in {
		background-color: yellow;	
	}
</style>
<script type="text/javascript">
	function fnUpdate() {
		if(confirm("정말 수정하시겠습니까?")) {
			return true;
		}		
		return false;
	}
	
	function fnReset() {
		if(confirm("정말 초기화하시겠습니까?")) {
			return true;
		}
		return false;
	}
</script>
</head>
<body>
	<div align="center">
		[회원 정보 수정 화면]<br />
		<form action="jsp09.jsp" method="post" onsubmit="return fnUpdate()" onreset="return fnReset()">
		<input type="hidden" name="id" value="<%=dto.getId() %>"/>
		<!-- action으로 넘어갈때 name 속성을 가지고 넘어가는데 td의 아이디는 name이 없으므로 넘어가지 않는다. -->
		<!-- id 전송을 위해 hidden 속성의 input 태그를 하나 만든다. -->
			<table border="1">
				<tr>
					<th>이름</th>
					<td><input type="text" name="irum" value="<%=dto.getIrum() %>" class="in"/></td>
				</tr>
				<tr>
					<th>아이디</th>
					<td><%=dto.getId() %></td>
				</tr>
				<tr>
					<th>비밀번호</th>
					<td><input type="password" name="pw" value="<%=dto.getPw() %>" class="in" /></td>
				</tr>
				<tr>
					<th>나이</th>
					<td><input type="number" name="age" value="<%=dto.getAge() %>" class="in"/></td>
				</tr>
				<tr>
					<th>주소</th>
					<td><input type="text" name="addr" value="<%=dto.getAddr() %>" class="in" /></td>
				</tr>
				<tr>
					<th>전화번호</th>
					<td><input type="text" name="tel" value="<%=dto.getTel() %>" class="in" /></td>
				</tr>
				<tr align="center">
					<td colspan="2">
						<input type="submit" value="수정하기" />
						<input type="reset" value="초기화하기" />
						<input type="button" value="목록보기" onclick="location.href='jsp06.jsp'" />
					</td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>
반응형