ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP] 006. JAVA Bean(자바 빈)
    SsY/Class 2023. 5. 25. 14:50
    728x90
    JAVA Bean(자바 빈)
    • JAVA Bean 의 개요
    ■■■ JAVA Bean(자바 빈) ■■■
    
    ○ 개요
       - 자바로 작성된 컴포넌트(객체)들을 일반적으로 일컫는 말
    
    ○ 사용 목적
       - JSP 페이지에서 로직 부분을 분리하여 코드를 재사용함으로써
          프로그램 구성 효율을 높이기 위함
    
    ○ JAVA Bean 만들기
       - 자바 빈은 클래스이므로 자바 클래스를 설계하는 것과 기본 규칙이 같다.
       - 자바 빈에서는 멤버 변수를 프로퍼티(Property)라고 부른다.
       - 클래스 선언은 『public』, 프로퍼티 선언은 『private』으로 한다.
         //-- 모든 모듈에서 사용할 수 있게~      //--정보은닉  
       - 프로퍼티 당 하나의 getter 와 setter 를 갖는다.
         //-- getter/setter 로 프로퍼티 접근
       - (매개변수가 없는) 기본 생성자를 포함한다.
         //-- 사용자정의 생성자 생성시 
         //-- default 생성자가 자동 생성되지 않으므로 
         //-- 매개변수 없이 인스턴스생성가능하도록 만들어둔다!
       - 직렬화 할 수 있어야 한다.
       - POJO(Plain Old Java Object)(포조)
         //-- 상속, 인터페이스가 전혀 없는!
       
    //-- RMI 가 사용되지 않게 되면서 조금 더 완화됨
    //-- 결합도를 낮추기 위해서 사용하는 것
    //-- 하나의 부품처럼 규격과 사이즈를 통일해두면 여러군데서 활용이 가능

    WebApp10
    - DTO , DAO 의 개념을 적용을 통한 기능 구현
    • MemberDTO
    /* ===========================
    	MemberDTO.java
    	- 데이터 전송 객체 활용
     =========================== */
    
    package com.test;
    
    public class MemberDTO
    {
    	// 주요 속성 구성
    	private String sid, name, tel;
    	//-- TBL_Member 테이블의 컬럼 구조
    	//-- 또는 쿼리문 조회를 위해 생성한 VIEW의 속성과 동일하게 구성
    
    	// getter / setter 구성
    	public String getSid()
    	{
    		return sid;
    	}
    
    	public void setSid(String sid)
    	{
    		this.sid = sid;
    	}
    
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    
    	public String getTel()
    	{
    		return tel;
    	}
    
    	public void setTel(String tel)
    	{
    		this.tel = tel;
    	}
    	
    	
    }

    • MemberDAO
    /* ==========================================
    	MemberDAO.java
    	- 데이터베이스 액션 처리 전용 객체 활용
     =========================================== */
    
    package com.test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import com.util.DBConn;
    
    public class MemberDAO
    {
    	// 주요 속성 구성
    	private Connection conn;
    	
    	// 데이터베이스 연결 메소드 정의 → 생성자 형태로 정의
    	public MemberDAO() throws ClassNotFoundException, SQLException
    	{
    		conn = DBConn.getConnection();
    	}
    	
    	
    	// 데이터 입력 메소드 정의
    	public int add(MemberDTO dto) throws SQLException
    	{
    		int result = 0;
    		
    		String sql = "INSERT INTO TBL_MEMBER(SID,NAME,TEL)"
    					+ " VALUES(MEMBERSEQ.NEXTVAL, ?, ?)";
    		
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		// ? 에 대한 값 setting
    		pstmt.setString(1, dto.getName());
    		pstmt.setString(2, dto.getTel());
    		
    		result = pstmt.executeUpdate();
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 리스트 출력 메소드 정의 -- MemberDTO 들을 반환할 수 있는 자료구조형
    	public ArrayList<MemberDTO> list() throws SQLException
    	{
    		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
    		
    		String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID";
    		
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		// 넘겨줄 변수가 없으면 setting 생략
    		ResultSet rs = pstmt.executeQuery();
    		
    		while(rs.next())
    		{
    			// MemberDTO 인스턴스 생성
    			MemberDTO dto = new MemberDTO();
    			
    			dto.setSid(rs.getString("SID"));
    			dto.setName(rs.getString("NAME"));
    			dto.setTel(rs.getString("TEL"));
    			
    			result.add(dto);
    		}
    		rs.close();
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 인원 수 조회 메소드 정의
    	public int count() throws SQLException
    	{
    		int result = 0;
    		
    		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBER";
    		
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		ResultSet rs = pstmt.executeQuery();
    		// 얻어내는 값이 단일 값일 때 반복문이 아닌 아래와 같이 if 문 구성 가능 
    		if (rs.next())
    			result = rs.getInt("COUNT");
    		
    		rs.close();
    		pstmt.close();			
    		
    		return result;
    	}
    	
    	// 데이터베이스 연결 종료 메소드 정의
    	public void close() throws SQLException
    	{
    		DBConn.close();
    	}
    	
    }//end MemberDAO

    • MemberList.jsp
    <%-- 내 풀이 import 
    <%@page import="com.test.MemberDTO"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="com.test.MemberDAO"%>
     --%>
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	StringBuffer str = new StringBuffer();
    	MemberDAO dao = null;
    	
    	String memberCount = "<span id='memberCount'>전체 인원 수 : ";
    
    	try
    	{
    		dao = new MemberDAO();
    		
    		memberCount += dao.count() + "명</span>";	// 전체 인원수 조회 메소드 사용 -> 인원수 구하기
    		
    		str.append("<table class='table'>");
    		str.append("<tr><th>번호</th><th>이름</th><th>전화번호</th></tr>");
    		
    		// MemberDAO 객체의 lists() 메소드 호출
    		//-- 반복문을 톨해 <table> 하위 엘리먼트 생성
    		for(MemberDTO member :dao.list())
    		{
    			str.append("<tr>");
    			str.append("<td class='record'>"+member.getSid()+"</td>");
    			str.append("<td class='record'>"+member.getName()+"</td>");
    			str.append("<td class='record'>"+member.getTel()+"</td>");
    			str.append("</tr>");
    		}
    		
    		str.append("</table>");
    	}
    	catch(Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// 데이터베이스 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    	
    /* -- 내 풀이 
    	// 데이터 전체 조회
    	// MemberDAO 인스턴스 생성 -- 생성자 : DB 연결
    	MemberDAO dao = new MemberDAO();
    
    	// 자료 받아올 ArrayList() 생성
    	ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
    	
    	// 전체 리스트 조회 메소드 담기
    	result = dao.list();
    	
    	// 결과 담을 변수 선언
    	String list = "";
    	
    	// 반복문 통해서 담기
    	list += "<table>";
    	list += "<tr><th>번호</th><th>이름</th><th>전화번호</th></tr>";
    	for(MemberDTO dto : result)
    	{
    		list += String.format("<tr><td class='record'>%s</td> <td class='record'>%s</td> <td class='record'>%s</td></tr>", dto.getSid(), dto.getName(), dto.getTel());
    	}
    	list += "</table>";
    	
    	// 전체 인원수 조회 메소드
    	int count = dao.count();
    	
    	dao.close();
    */	
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberList.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    <style type="text/css">
    	.record {text-align: center;}
    	input {width: 200px; border-radius: 6px;}
    	button {width: 324px; height: 40px; font-family: 맑은 고딕; font-weight: bold;}
    	.errMsg {font-size: small; font-color:red; display:none;}
    </style>
    <script>
    	function formcheck()
    	{
    		
    	}
    </script>
    </head>
    <body>
    
    <div>
    	<h1>데이터베이스 연동 회원관리 실습</h1>
    	<hr>
    </div>
    
    <div>
    	<h2>DAO, DTO 개념 적용</h2>
    	<form omsubmit="return formCheck()">
    		<table class="table">
    			<tr>
    				<th>이름</th>
    				<td>
    					<input type="text" id="userName" class="txt">
    					<span class="errMsg" id="nameMsg">이름을 입력해야 합니다.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>전화번호</th>
    				<td>
    					<input type="text" id="userTel" name="userTel" class="txt">
    				</td>
    			</tr>
    			<tr>
    				<td colspan="2">
    					<button type="submit" class="btn" id="btnAdd">회원 추가</button>
    				</td>
    			</tr>
    		</table>
    	</form>
    </div>
    <br><br>
    
    <div>
    <!-- <span id="memberCount">전체 인원 수 : 3 명</span> -->
    <!-- 
    	<table>
    		<tr>
    			<th>번호</th><th>이름</th><th>전화번호</th>
    		</tr>
    		<tr>
    			<td class="record">1</td>
    			<td class="record">고길동</td>
    			<td class="record">010-1111-1111</td>
    		</tr>
    		<tr>
    			<td class="record">2</td>
    			<td class="record">도우너</td>
    			<td class="record">010-2222-2222</td>
    		</tr>
    		<tr>
    			<td class="record">3</td>
    			<td class="record">마이콜</td>
    			<td class="record">010-3333-3333</td>
    		</tr>
    
    
    	</table>
     -->
     <%=memberCount %>
     <!-- 테이블 결과 -->
     <%=str.toString() %> <!-- String Buffer 전체를 String으로 변환 --> 
     
    <%--내 풀이  
    	<span id="memberCount">전체 인원 수 : <%=count %> 명</span>
    	<%=list %>
     --%>
    </div>
    
    
    </body>
    </html>

    • MemberInsert.jsp
    <%-- 내 풀이 
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
     --%>
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberInsert.jsp
    	//-- 데이터 입력 액션 처리 페이지
    	
    	// 한글 데이터가 깨지지 않도록 인코딩 설정
    	//-- 이전 수신 페이지의 CharacterSet 으로 설정해야 깨지지 않는다.
    	request.setCharacterEncoding("UTF-8");
    
    	// 이전 페이지(MemberList.jsp) 로 부터 데이터 수신
    	//-- userName, userTel
    	String userName = request.getParameter("userName");
    	String userTel = request.getParameter("userTel");
    	
    	MemberDAO dao = null;
    	
    	// DBConn 에서 예외를 throw 하고 있기 때문에 안에서 작업
    	try
    	{
    		dao = new MemberDAO();
    		
    		// MemberDTO 구성
    		MemberDTO member = new MemberDTO();
    		member.setName(userName);
    		member.setTel(userTel);
    		
    		// dao 의 add() 메소드 호출 → insert 쿼리문 수행
    		dao.add(member);
    		
    		// 필요하다면 add() 메소드의 리턴값을 받아
    		// insert 액션의 정상처리 여부 확인 후 추가 코드 구성 가능
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			dao.close();
    		}
    		catch(Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    	// URL 주소가 적혀있는(기록되어 있는) 쪽지를 클라이언트에 전달
    	// (이 주소를 요청해서 찾아가도록 하세요)
    	response.sendRedirect("MemberList.jsp");
    %>
    <%-- 내 풀이
    <%
    	// 이전 페이지(MemberList.jsp) 로 부터 데이터 수신
    	//-- userName, userTel
    	// 한글 깨짐 방지
    	request.setCharacterEncoding("UTF-8");
    
    	String name = request.getParameter("userName");
    	String tel = request.getParameter("userTel");
    	
    	// 결과 값 담을 변수 선언
    	int res = 0;
    
    	// 데이터베이스 연결
    	MemberDAO dao = null;
    	
    	try
    	{
    		// 인스턴스 생성 -- DB 연결 
    		dao = new MemberDAO();
    	
    		// dto 객체 생성
    		MemberDTO dto = new MemberDTO();
    		
    		// dto 에 값 담기
    		dto.setName(name);
    		dto.setTel(tel);
    		
    		// add 메소드로 값 담고 반환받기
    		res = dao.add(dto);
    		
    		if(res<1)
    			response.sendError(500, "데이터 입력에 실패하였습니다.");
    		else
    			response.sendRedirect("MemberList.jsp");
    		
    	}
    	catch(Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		// DB 연결 닫기 
    		dao.close();
    	}
    %>
    --%>
    <!-- 
    	클라이언트를 만나지 않는 페이지
    	클라이언트의 동선을 최소화하기 위한 처리 -- 현재 진행중인 트렌드  
    	요즘 트렌드는 점점 보안성을 위해 재로그인 등의 처리를 추가하는 과도기에 있다고 함
     -->

    WebApp11
    성적처리 프로세스 구현
    - ScoreDTO / ScoreDAO / ScoreList / ScoreInsert
    • ScoreDTO
    package com.test;
    
    public class ScoreDTO
    {
    	private String sid, name;
    	private int kor, eng, mat, tot;
    	private double avg;
    	
    	public String getSid()
    	{
    		return sid;
    	}
    	public void setSid(String sid)
    	{
    		this.sid = sid;
    	}
    	public String getName()
    	{
    		return name;
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public int getKor()
    	{
    		return kor;
    	}
    	public void setKor(int kor)
    	{
    		this.kor = kor;
    	}
    	public int getEng()
    	{
    		return eng;
    	}
    	public void setEng(int eng)
    	{
    		this.eng = eng;
    	}
    	public int getMat()
    	{
    		return mat;
    	}
    	public void setMat(int mat)
    	{
    		this.mat = mat;
    	}
    	public int getTot()
    	{
    		return tot;
    	}
    	public void setTot(int tot)
    	{
    		this.tot = tot;
    	}
    	public double getAvg()
    	{
    		return avg;
    	}
    	public void setAvg(double avg)
    	{
    		this.avg = avg;
    	}
    	
    	
    }

    • ScoreDAO
    package com.test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import com.util.DBConn;
    
    public class ScoreDAO
    {
    	private Connection conn;
    	
    	// DB 접속 메소드 -- 생성자 형태
    	public ScoreDAO() throws ClassNotFoundException, SQLException
    	{
    		conn = DBConn.getConnection();
    	}
    	
    	// DB 종료 메소드
    	public void close() throws SQLException
    	{
    		DBConn.close();
    	}
    	
    	// 전체 성적 리스트 조회 메소드
    	public ArrayList<ScoreDTO> list()
    	{
    		ArrayList<ScoreDTO> result = new ArrayList<ScoreDTO>();
    		
    		try
    		{
    			// 쿼리문 준비
    			String sql = "SELECT SID, NAME, KOR, ENG, MAT, (KOR+ENG+MAT) AS TOT"
    						+ ", ROUND((KOR+ENG+MAT)/3,2) AS AVG FROM TBL_SCORE ORDER BY SID";
    			
    			// preparedStatement 객체 생성
    			PreparedStatement pstmt = conn.prepareStatement(sql);
    			
    			// 결과 값 Result Set 에 담기 
    			ResultSet rs = pstmt.executeQuery();
    			
    			// 반복문으로 rs 값 ArrayList 에 담아내기
    			while(rs.next())
    			{
    				// 새 DTO 객체 생성
    				ScoreDTO dto = new ScoreDTO();
    				// DTO 에 값 담아내기
    				dto.setSid(rs.getString("SID"));
    				dto.setName(rs.getString("NAME"));
    				dto.setKor(rs.getInt("KOR"));
    				dto.setEng(rs.getInt("ENG"));
    				dto.setMat(rs.getInt("MAT"));
    				dto.setTot(rs.getInt("TOT"));
    				dto.setAvg(rs.getDouble("AVG"));
    				// 값이 채워진 DTO ArrayList 에 담기
    				result.add(dto);				
    			}
    			
    			// 사용한 객체 반납
    			rs.close();
    			pstmt.close();
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    		return result;
    	}// end list()
    	
    	// 데이터 입력 메소드
    	public int insert(ScoreDTO dto)
    	{
    		int result = 0;
    		
    		try
    		{
    			// 쿼리문 준비
    			String sql = "INSERT INTO TBL_SCORE(SID,NAME,KOR,ENG,MAT) VALUES(SCORESEQ.NEXTVAL,?,?,?,?)";
    			
    			// PreparedStatement 객체 준비
    			PreparedStatement pstmt = conn.prepareStatement(sql);
    			// PreparedStatement 의 ? 에 값 Setting
    			//-- 이름, 국어점수, 영어점수, 수학점수
    			pstmt.setString(1, dto.getName());
    			pstmt.setInt(2, dto.getKor());
    			pstmt.setInt(3, dto.getEng());
    			pstmt.setInt(4, dto.getMat());
    			// 채워진 PreparedStatement 객체 전달
    			result = pstmt.executeUpdate();
    			
    			// 사용한 객체 반납
    			pstmt.close();
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    		return result;
    	}// end insert()
    	
    	// 성적 리스트 인원 수 메소드
    	public int count()
    	{
    		int result = 0;
    		
    		try
    		{
    			// 쿼리문 준비
    			String sql = "SELECT COUNT(*) AS COUNT FROM TBL_SCORE";
    			
    			// PreparedStatement 객체 생성
    			PreparedStatement pstmt = conn.prepareStatement(sql);
    			// PreparedStatement 객체 전달
    			ResultSet rs = pstmt.executeQuery();
    			// ResultSet 의 결과 result 에 담기
    			if (rs.next())
    				result = rs.getInt("COUNT");
    			
    			// 사용한 객체 반납
    			rs.close();
    			pstmt.close();
    				
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    		return result;
    	}// end count()
    	
    	
    }// end Class ScoreDAO

    • ScoreList
    <%@page import="com.test.ScoreDTO"%>
    <%@page import="com.test.ScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// 결과 받을 객체 생성
    	StringBuffer str = new StringBuffer();
    	ScoreDAO dao = null;
    
    	String count = "<span class='countMsg'>전체 성적 데이터 수 : ";
    	
    	try
    	{
    		// DB 연결
    		dao = new ScoreDAO();
    		
    		// 전체 데이터 수 조회
    		count += (dao.count() + " (개)</span>");
    		
    		// 리스트 담아내기
    		str.append("<table class='listTbl'>");
    		str.append("<tr><th>번호</th><th>이름</th><th>국어점수</th><th>영어점수</th><th>수학점수</th><th>총점</th><th>평균</th></tr>");		
    		
    		// list 메소드 로 리스트 받아와 str 에 담기
    		for(ScoreDTO dto : dao.list())
    		{
    			str.append("<tr>");
    			str.append("<td>"+ dto.getSid() +"</td>");
    			str.append("<td>"+ dto.getName() +"</td>");
    			str.append("<td>"+ dto.getKor() +"</td>");
    			str.append("<td>"+ dto.getEng() +"</td>");
    			str.append("<td>"+ dto.getMat() +"</td>");
    			str.append("<td>"+ dto.getTot() +"</td>");
    			str.append("<td>"+ dto.getAvg() +"</td>");
    			str.append("</tr>");
    		}
    		str.append("</table>");
    		
    	}
    	catch(Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch(Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>ScoreList.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    <style type="text/css">
    	* {margin: auto; text-align: center;}
    	.btn {width: 280px; height: 50px; background-color: #1a64d5; color: white; border:#1a64d5;}
    	.errMsg {font-size:small; color:red; display:none;}
    	.listTbl {width: 600px; text-align: center; }
    	.countMsg {font-weight: bold; color: #11438e;}
    	th {background-color: #1a64d5; color: white;}
    	.title {height: 150px;}
    </style>
    <script type="text/javascript">
    	function formCheck()
    	{
    		var name = document.getElementById("uName");
    		var msg = document.getElementById("nameMsg");
    		
    		var kor = document.getElementById("uKor");
    		var eng = document.getElementById("uEng");
    		var mat = document.getElementById("uMat");
    		
    		msg.style.display="none";
    		
    		if (name.value=="")
    		{
    			msg.style.display="inline";
    			name.focus();
    			return false;
    		}
    		
    		if (parseInt(kor.value)>100 || parseInt(kor.value)<0)
    		{
    			kor.focus();
    			return false;
    		}
    		if (parseInt(eng.value)>100 || parseInt(eng.value)<0)
    		{
    			eng.focus();
    			return false;
    		}
    		if (parseInt(mat.value)>100 || parseInt(mat.value)<0)
    		{
    			mat.focus();
    			return false;
    		}
    		
    		if (kor.value=="")
    			document.getElementById("uKor").value = 0;
    		if (eng.value=="")
    			document.getElementById("uEng").value = 0;
    		if (mat.value=="")
    			document.getElementById("uMat").value = 0;
    		
    		return true;
    	}
    </script>
    </head>
    <body>
    <div class='title'>
    	<br>
    	<h1>성적처리 프로세스 구현</h1>
    	<br>
    	<hr>
    </div>
    <div class='inputbox'>
    	<form action="ScoreInsert.jsp" method="post" onsubmit="return formCheck()">
    		<table class="inputTbl">
    			<tr>
    				<td>이름(*)</td>
    				<td>
    					<input type='text' class='txt' id='uName' name='uName'>
    					<span class="errMsg" id="nameMsg">이름은 필수 입력사항입니다.</span>
    				</td>
    			</tr>
    			<tr>
    				<td>국어점수</td>
    				<td>
    					<input type='text' class='txt' id='uKor' name='uKor' placeholder='0~100'>
    				</td>
    			</tr>
    			<tr>
    				<td>영어점수</td>
    				<td>
    					<input type='text' class='txt' id='uEng' name='uEng' placeholder='0~100'>
    				</td>
    			</tr>
    			<tr>
    				<td>수학점수</td>
    				<td>
    					<input type='text' class='txt' id='uMat' name='uMat' placeholder='0~100'>
    				</td>
    			</tr>
    			<tr>
    				<td colspan=2>
    					<span style="text-align: center; color: blue; font-size:small;">※ 값을 입력하지 않으면 0 점 처리 됩니다</span>
    				</td>
    			</tr>
    			<tr>
    				<td colspan=2>
    					<button type="submit" class="btn">성적 입력</button>
    				</td>
    			</tr>
    		</table>
    	</form>
    	<br><br>
    	<hr>
    </div>
    <div>
    	<!-- 데이터 입력 -->
    	<!-- 전체 성적 데이터 수 -->
    	<br><br>
    	<%=count %>
    	<br><br>
    	<!-- 번호 이름 국어점수 영어점수 수학점수 총점 평균 -->
    	<%=str.toString() %>
    </div>
    </body>
    </html>

    • ScoreInsert
    <%@page import="com.test.ScoreDTO"%>
    <%@page import="com.test.ScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// ScoreInsert.jsp -- 클라이언트와 만날 필요성이 X
    	
    	// 한글 깨짐 방지
    	request.setCharacterEncoding("UTF-8");
    
    	// 이전 페이지(ScoreList.jsp) 데이터 수신
    	//-- uName, uKor, uEng, uMat
    	String name = request.getParameter("uName");
    	String korStr = request.getParameter("uKor");
    	String engStr = request.getParameter("uEng");
    	String matStr = request.getParameter("uMat");
    	
    	int kor, eng, mat;
    	kor = eng = mat = 0;
    	
    	ScoreDAO dao = null;
    	try
    	{
    		kor = Integer.parseInt(korStr);
    		eng = Integer.parseInt(engStr);
    		mat = Integer.parseInt(matStr);
    		
    		// DB 연결 
    		dao = new ScoreDAO();
    		
    		// insert 메소드에 넣기 위해 dto 객체 구성
    		ScoreDTO dto = new ScoreDTO();
    		dto.setName(name);
    		dto.setKor(kor);
    		dto.setEng(eng);
    		dto.setMat(mat);
    		
    		int result = dao.insert(dto);
    		
    		if(result <1)	// 데이터가 정상 입력 되지 않았을 경우 나올 페이지
    			response.sendError(500, "내부 서버 오류");
    		else	// 데이터가 정상 입력 되었을 경우 요청할 페이지
    			response.sendRedirect("ScoreList.jsp");
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// 액션의 결과와는 관계없이 DB 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    %>

    회원 명단 + 성적 관리 페이지
    - WebApp12
    • DBConn
    /*==========================================
       DBConn.java
       - 데이터베이스 연결 전용 객체(Singleton)
       - 예외 처리 : throws
    ============================================*/
    
    package com.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class DBConn
    {
    	private static Connection dbConn;
    	
    	public static Connection getConnection() throws ClassNotFoundException, SQLException
    	{
    		if (dbConn==null)
    		{
    			String url = "jdbc:oracle:thin:@localhost:1521:xe";
    			String user = "scott";
    			String pwd = "tiger";
    			
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			dbConn = DriverManager.getConnection(url, user, pwd);
    		}
    		
    		return dbConn;
    	}
    	
    	public static Connection getConnection(String url, String user, String pwd) throws ClassNotFoundException, SQLException
    	{
    		if(dbConn==null)
    		{
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			dbConn = DriverManager.getConnection(url, user, pwd);
    		}
    		
    		return dbConn;
    	}
    	
    	public static void close() throws SQLException
    	{
    		if(dbConn!=null)
    		{
    			if(!dbConn.isClosed())
    			{
    				dbConn.close();
    			}
    		}
    		
    		dbConn=null;
    	}
    }

    회원관리

    • MemberDTO
    /*=================================================
       MemberDTO.java
       - 객체 전용 (데이터 보관 및 전송) → JAVA Bean
    ===================================================*/
    
    package com.test;
    
    public class MemberDTO
    {
    	// 주요 속성 구성(프로퍼티 구성)
    	private String sid, name, tel;		//-- 번호, 이름, 전화번호
    
    	// getter / setter 구성
    	public String getSid()
    	{
    		return sid;
    	}
    
    	public void setSid(String sid)
    	{
    		this.sid = sid;
    	}
    
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    
    	public String getTel()
    	{
    		return tel;
    	}
    
    	public void setTel(String tel)
    	{
    		this.tel = tel;
    	}
    	
    	
    }

    • MemberDAO
    /*========================================
       MemberDAO.java
       - 데이터베이스 액션 처리 전용 클래스
       	 (TBL_MEMBER 테이블 전용 DAO)
    ==========================================*/
    
    package com.test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import com.util.DBConn;
    
    
    public class MemberDAO
    {
    	// 주요 속성 구성
    	private Connection conn;
    	
    	// 데이터베이스 연결 담당 메소드
    	public Connection connection() throws ClassNotFoundException, SQLException
    	{
    		conn = DBConn.getConnection();
    		return conn;
    	}
    	
    	// 데이터 입력 담당 메소드
    	public int add(MemberDTO dto) throws SQLException
    	{
    		int result=0;
    		
    		String sql = "INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, ?, ?)";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		pstmt.setString(1, dto.getName());
    		pstmt.setString(2, dto.getTel());
    		
    		result = pstmt.executeUpdate();
    		
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 회원 리스트 전체 출력 담당 메소드
    	public ArrayList<MemberDTO> list() throws SQLException
    	{
    		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
    		
    		String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		ResultSet rs = pstmt.executeQuery();
    		
    		while(rs.next())
    		{
    			MemberDTO dto = new MemberDTO();
    			dto.setSid(rs.getString("SID"));
    			dto.setName(rs.getString("NAME"));
    			dto.setTel(rs.getString("TEL"));
    			
    			result.add(dto);
    		}
    		
    		rs.close();
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 전체 인원 수 확인 담당 메소드
    	public int count() throws SQLException
    	{
    		int result = 0;
    		
    		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBER";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		ResultSet rs = pstmt.executeQuery();
    		if(rs.next())
    		{
    			result = rs.getInt("COUNT");
    		}
    		
    		rs.close();
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 데이터베이스 종료 메소드 정의
    	   public void close() throws SQLException
    	   {
    	      DBConn.close();
    	   }
    	   
       // 메소드 추가
       // 번호 검색 담당 메소드(번호를 통해 회원 데이터 조회)
       //-- 현재... 번호 sid 는 TBL_MEMBER 테이블에서 식별자의 역할을 수행하고 있으며
       //   번호를 통한 검색 결과는 한 명의 회원일 수 밖에 없기 때문에
       //   반환 자료형은 MemberDTO 형태로 구성하자
    	   public MemberDTO searchMember(String sid)
    	   {
    		   MemberDTO result = new MemberDTO();
    		   
    		   try 
    		   {
    			   String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER WHERE SID=?";
    			   PreparedStatement pstmt = conn.prepareStatement(sql);
    			   pstmt.setInt(1, Integer.parseInt(sid));
    			   
    			   ResultSet rs = pstmt.executeQuery();
    				
    			   while(rs.next())
    			   {
    				   result.setSid(rs.getString("SID"));
    				   result.setName(rs.getString("NAME"));
    				   result.setTel(rs.getString("TEL"));
    			   }
    			   
    			   rs.close();
    			   pstmt.close();
    		   }
    		   catch (Exception e)
    		   {
    			   System.out.println(e.toString());
    		   }
    		   
    		   return result;
    	   }
    	   
    	   // 메소드 추가 
    	   // 회원 데이터 수정 담당 메소드
    	   public int modify(MemberDTO member)
    	   {
    		   int result = 0;
    		   
    		   try 
    		   {
    			   String sql = "UPDATE TBL_MEMBER SET NAME=?, TEL=? WHERE SID=?";
    			   PreparedStatement pstmt = conn.prepareStatement(sql);
    			   
    			   pstmt.setString(1, member.getName());
    			   pstmt.setString(2, member.getTel());
    			   pstmt.setInt(3, Integer.parseInt(member.getSid()));
    			   
    			   result = pstmt.executeUpdate();
    			   
    			   pstmt.close();
    		   }
    		   catch (Exception e)
    		   {
    			   System.out.println(e.toString());
    		   }
    		   
    		   return result;
    	   }
    	   
    	   // 메소드 추가
    	   // 회원 데이터 삭제 담당 메소드
    	   public int remove(String sid)
    	   {
    		   int result = 0;
    		   
    		   try
    		   {
    			   String sql ="DELETE FROM TBL_MEMBER WHERE SID=?";
    			   PreparedStatement pstmt = conn.prepareStatement(sql);
    			   
    			   pstmt.setInt(1, Integer.parseInt(sid));
    			   
    			   result = pstmt.executeUpdate();
    			   pstmt.close();
    		   }
    		   catch (Exception e)
    		   {
    			   System.out.println(e.toString());
    		   }
    		   return result;
    	   }
    	   
    	   // 메소드 추가
    	   // 자식 테이블의 참조 데이터 레코드 수 확인
    	   // → 성적 처리가 되었는지의 여부 확인
    	   public int refCount(String sid) throws SQLException
    	   {
    		   int result = 0;
    		   
    		   String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBERSCORE WHERE SID=?";
    		   PreparedStatement pstmt = conn.prepareStatement(sql);
    		   
    		   pstmt.setInt(1, Integer.parseInt(sid));
    		   
    		   ResultSet rs = pstmt.executeQuery();
    		   while(rs.next())					// if(rs.next())
    			   result = rs.getInt("COUNT");
    			   
    		   rs.close();
    		   pstmt.close();
    		   
    		   return result;
    	   }
    	   
    
    }

    • MemberSelect (Delete 의 경우 Form 없이 함수로 호출)
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	StringBuffer str = new StringBuffer();
    	MemberDAO dao = new MemberDAO();;
    
    	try
    	{
    		// DB 연결
    		dao.connection();
    
    		str.append("<table class='table'>");
    		str.append("<tr>");
    		str.append("<th>번호</th>");
    		str.append("<th>이름</th>");
    		str.append("<th>전화번호</th>");
    		str.append("<th>회원관리</th>");
    		str.append("</tr>");
    		
    		for (MemberDTO member : dao.list())
    		{
    			str.append("<tr>");
    			str.append("<td>"+ member.getSid() +"</td>");
    			str.append("<td>"+ member.getName() +"</td>");
    			str.append("<td>"+ member.getTel() +"</td>");
    			str.append("<td><a href='MemberUpdateForm.jsp?sid="+ member.getSid() +"'>");
    			str.append("<button type='button' class='btn01'>수정</button>");
    			str.append("</a>");
    			
    			//sid 를 통해서 refCount() 확인 
    			if(dao.refCount(member.getSid())==1) // 참조결과 있을 경우 버튼 비활성화
    			{
    				str.append("<a href=''>");
    				str.append("<button type='button' class='btn02'>삭제</button>");
    				str.append("</a>");
    			}
    			else
    			{
    				// memberDelete(1, "고길동")
    				// "memberDelete(1, "고길동")"
    				// "... 'memberDelete(1, "고길동")'"
    				// "... 'memberDelete(1, \"고길동\")'"
    				
    				// ※ 자바스크립트에서 사용할 수 있는 따옴표의 종류
    				//    ①""  ②'' ③ \"\"
    				//    일반적으로 따옴표가 두 번 중첩되어 사용하게 되면
    				//    ①과 ②를 사용하면 된다.
    				//    하지만, 따옴표가 세 번 중첩되어 사용될 경우
    				//    ③ escape 를 사용해야한다.
    				
    				str.append("<a href='javascript:memberDelete("+ member.getSid()
    														+ ",\"" + member.getName() + "\")'>");
    				str.append("<button type='button' class='btn01'>삭제</button>");
    				str.append("</a>");				
    			}
    			
    			
    			
    			
    			str.append("</td>");
    			str.append("</tr>");
    		}
    		
    		str.append("</table>");
    	}
    	catch(Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberSelect.jsp</title>
    <link rel="stylesheet" type="text/CSS" href="css/MemberScore.css">
    
    <style type="text/css">
    	a {text-decoration: none;}
    </style>
    
    <script type="text/javascript">
    	// 삭제는 따로 폼이 필요 없음 -- 삭제 메소드가 돌아갈 페이지는 필요함 
    	function memberDelete(sid,name)
    	{
    		//확인
    		//alert("번호:"+sid+" ,이름:"+name);
    		
    		var res = confirm("번호:"+sid+" ,이름:"+name+"\n이 회원의 정보를 정말 삭제하시겠습니까?");
    		
    		// 확인
    		//alert(res);
    		//-- confirm() 함수를 통해 호출되는 창은
    		//   확인 → true / 취소 → false 를 반환하게 된다.
    		
    		// 확인 버튼 클릭 시 → res 가 true 일 때...
    		// MemberDelete.jsp 페이지에 삭제 요청
    		if(res)
    			window.location.href="MemberDelete.jsp?sid="+ sid;		
    		
    	}
    </script>
    
    </head>
    <body>
    
    <div>
    	<h1>회원 <span style="color: red;">명단</span> 관리 및 출력 페이지</h1>
    	<hr>
    </div>
    
    <div>
    	<a href="MemberScoreSelect.jsp"><button type="button">회원 성적 관리</button></a>
    	<a href="MemberInsertForm.jsp"><button type="button">신규 회원 등록</button></a>
    </div>
    <br>
    
    <div>
    	<!-- 리스트 출력 -->
    	<!-- 정적 -->
    	<!-- <table class="table">
    		<tr>
    			<th style="width: 50px;">번호</th>
    			<th style="width: 100px;">이름</th>
    			<th style="width: 150px;">전화번호</th>
    			<th style="width: 200px;">회원관리</th>
    		</tr>
    		<tr>
    			<td>1</td>
    			<td>희동이</td>
    			<td>010-1111-1111</td>
    			<td>
    				<a href=""><button type="button" class="btn01">수정</button></a>
    				<a href=""><button type="button" class="btn02">삭제</button></a>
    			</td>
    		</tr>
    		<tr>
    			<td>2</td>
    			<td>도우너</td>
    			<td>010-2222-2222</td>
    			<td>
    				<a href=""><button type="button" class="btn01">수정</button></a>
    				<a href=""><button type="button" class="btn01">삭제</button></a>
    			</td>
    		</tr>
    		<tr>
    			<td>3</td>
    			<td>마이콜</td>
    			<td>010-3333-3333</td>
    			<td>
    				<a href=""><button type="button" class="btn01">수정</button></a>
    				<a href=""><button type="button" class="btn01">삭제</button></a>
    			</td>
    		</tr>
    	</table> -->
    	
    	<!-- 동적 -->
    	<%=str.toString() %>
    	
    </div>
    
    
    </body>
    </html>

    • MemberInsertForm
    <%@ page contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberInsertForn.jsp</title>
    <link rel="stylesheet" type="text/CSS" href="css/MemberScore.css">
    <script type="text/javascript">
    	function memberSubmit()
    	{
    		//확인
    		//alert("함수호출확인")
    		
    		var memberForm = document.getElementById("memberForm");
    		
    		var uName = document.getElementById("uName");
    		var nameMsg = document.getElementById("nameMsg");
    		
    		nameMsg.style.display="none";
    		
    		if (uName.value=="")
    		{
    			nameMsg.style.display = "inline";
    			uName.focus();
    			return;	// 해당 함수 종료 
    		}
    		
    		// form 을 직접 지정하여 submit 액션 수행
    		memberForm.submit();
    		
    	}
    	
    	function memberReset()
    	{
    		// 확인
    		//alert("함수 호출 확인")
    		var memberForm = document.getElementById("memberForm");
    		var uName = document.getElementById("uName");		//-- focus 용도		
    		var nameMsg = document.getElementById("nameMsg");	//-- msg style 지정 용도 
    		
    		//-- form reset 하면 수행하지 않아도 되는 구문
    		//document.getElementById("uName").value="";
    		//document.getElementById("uTel").value="";
    		
    		nameMsg.style.display="none";
    		uName.focus();
    		
    		// form 을 직접 지정하여 reset 액션 수행
    		memberForm.reset();
    	}
    	
    </script>
    </head>
    <body>
    
    <div>
    	<h1>회원 <span style="color: red;">명단</span> 관리 및 <span style="color: red;">입력</span> 페이지</h1>
    	<hr>
    </div>
    
    <div>
    	<a href="MemberSelect.jsp"><button type="button">회원 명단 관리</button></a>
    </div>
    <br>
    
    <div>
    	<!-- 회원 데이터 입력 폼 구성 -->
    	<form action="MemberInsert.jsp" method="post" id="memberForm">
    		<table class="table">
    			<tr>
    				<th>이름(*)</th>
    				<td>
    					<input type='text' id='uName' name='uName'>
    				</td>
    				<td>
    					<span class='errMsg' id='nameMsg'>이름을 입력해야합니다.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>전화번호</th>
    				<td>
    					<input type='text' id='uTel' name='uTel'>
    				</td>
    				<td>
    				</td>
    			</tr>
    		</table>
    		
    		<br>
    		
    		<a href="javascript:memberSubmit()"><button type="button">입력하기</button></a>
    		<a href="javascript:memberReset()"><button type="button">취소하기</button></a>
    		<a href="MemberSelect.jsp"><button type="button">목록으로</button></a>
    		
    	</form>
    </div>
    
    </body>
    </html>
    
    <!-- 사용자의 논리의 흐름을 돕기 위해서 목록으로 가는 버튼과 회원 명단 관리 버튼의 기능이 동일하지만 구성하게 됨 -->

    • MemberInsert
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberInsert.jsp
    	//-- 데이터베이스의 테이블(TBL_MEMBER)에
    	//   회원 데이터 추가 액션 처리 수행
    	//   .. 이후, 다시 리스트 페이지(MemberSelect.jsp)를 요청할 수 있도록 클라이언트에 안내
    	
    	// 한글 깨짐 방지
    	request.setCharacterEncoding("UTF-8");
    
    	// 이전 페이지로부터 데이터 수신 (MemberInsertForm.jsp)
    	String uName = request.getParameter("uName");
    	String uTel = request.getParameter("uTel");
    	
    	// DB 연결 준비
    	MemberDAO dao = new MemberDAO();
    	
    	try
    	{
    		// DB 연결
    		dao.connection();
    		 
    		// MemberDTO 객체 생성 및 속성 구성 (→add 메소드를 통해 입력할 DTO 구성)
    		MemberDTO member = new MemberDTO();
    		member.setName(uName);
    		member.setTel(uTel);
    
    		// insert 쿼리문을 수행하는 메소드 호출
    		// → dao의 add()메소드
    		dao.add(member);
    		
    		// 반환 값을 받아서 추가 업무 수행 코드 삽입 가능
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    
    	// check 
    	// 클라이언트가 MemberSelect.jsp 페이지를 다시 요청할 수 있도록 안내
    	// → 다시 요청하는 과정에서 리스트 갱신
    	response.sendRedirect("MemberSelect.jsp");
    	
    %>
    <!-- 클라이언트와 만나지 않는 페이지이기 때문에 모두 제거해두었음 -->

    • MemberUpdateForm
    <%@page import="com.test.MemberDTO"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// 이전 페이지(MemberSelect.jsp)로부터 데이터 수신
    	String sid = request.getParameter("sid");
    
    	// ※ 수신한 sid 를 가지고 회원데이터 조회
    	//    → 조회해서 얻어낸 데이터를 폼에 구성
    	String name = "";
    	String tel="";
    	
    	MemberDAO dao = new MemberDAO();
    	
    	try
    	{
    		// DB 연결
    		dao.connection();
    		
    		// sid 를 가지고 있는 회원데이터를 얻어내는 메소드 호출
    		// → dao 의 searchMember() 메소드 호출 
    		MemberDTO member = dao.searchMember(sid);
    		
    		// 가져온 값에서 name , tel 넣기
    		name = member.getName();
    		tel = member.getTel();
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberUpdateForn.jsp</title>
    <link rel="stylesheet" type="text/CSS" href="css/MemberScore.css">
    <script type="text/javascript">
    	function memberSubmit()
    	{
    		//확인
    		//alert("함수호출확인")
    		
    		var memberForm = document.getElementById("memberForm");
    		
    		var uName = document.getElementById("uName");
    		var nameMsg = document.getElementById("nameMsg");
    		
    		nameMsg.style.display="none";
    		
    		if (uName.value=="")
    		{
    			nameMsg.style.display = "inline";
    			uName.focus();
    			return;	// 해당 함수 종료 
    		}
    		
    		// form 을 직접 지정하여 submit 액션 수행
    		memberForm.submit();
    		
    	}
    	
    	function memberReset()
    	{
    		// 확인
    		//alert("함수 호출 확인")
    		var memberForm = document.getElementById("memberForm");
    		var uName = document.getElementById("uName");		//-- focus 용도		
    		var nameMsg = document.getElementById("nameMsg");	//-- msg style 지정 용도 
    		
    		//-- form reset 하면 수행하지 않아도 되는 구문
    		//document.getElementById("uName").value="";
    		//document.getElementById("uTel").value="";
    		
    		nameMsg.style.display="none";
    		uName.focus();
    		
    		// form 을 직접 지정하여 reset 액션 수행
    		memberForm.reset();
    	}
    	
    </script>
    
    </head>
    <body>
    
    <div>
    	<h1>회원 <span style="color: red;">명단</span> 관리 및 <span style="color: red;">수정</span> 페이지</h1>
    	<hr>
    </div>
    
    <div>
    	<a href="MemberSelect.jsp"><button type="button">회원 명단 관리</button></a>
    </div>
    <br>
    
    <div>
    	<!-- 회원 데이터 수정 폼 구성 -->
    	<!-- ※주의 업데이트 시에는 sid 가 필요함 -->
    
    		<!-- 방법①, 방법②에서 사용 -->
    <!-- 	<form action="MemberUpdate.jsp" method="post" id="memberForm"> -->
    		<!-- 방법③ : get방식으로 sid 는 따로 주소로 넘겨주는 방법 -->
    		<form action="MemberUpdate.jsp?sid=<%=sid %>" method="post" id="memberForm">
    		<table class="table">
    		
    			<!-- 방법① : 테이블에 보여지는 상태로 수정할 수 없게 만드는 방법 -->
    			<%-- 
    			<tr>
    				<th>번호</th>
    				<td>
    					<input type="text" name="sid" value="<%=sid %>" disabled="disabled">
    				</td>
    				<td>
    				</td>
    			</tr>
    			 --%>
    			<tr>
    				<th>이름(*)</th>
    				<td>
    					<input type='text' id='uName' name='uName' value="<%=name%>">
    				</td>
    				<td>
    					<span class='errMsg' id='nameMsg'>이름을 입력해야합니다.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>전화번호</th>
    				<td>
    					<input type='text' id='uTel' name='uTel' value="<%=tel%>">
    				</td>
    				<td>
    				</td>
    			</tr>
    		</table>
    		<!-- 방법② : 폼안에서 값을 갖고 있게 하나 사용자가 보지 못하게 숨기는 방법 -->
    		<%-- 
    		<input type="hidden" name="sid" value="<%=sid %>">
    		 --%>
    		<br>
    		
    		<a href="javascript:memberSubmit()"><button type="button">수정하기</button></a>
    		<a href="javascript:memberReset()"><button type="button">취소하기</button></a>
    		<a href="MemberSelect.jsp"><button type="button">목록으로</button></a>
    		
    	</form>
    </div>
    
    </body>
    </html>
    
    <!-- 사용자의 논리의 흐름을 돕기 위해서 목록으로 가는 버튼과 회원 명단 관리 버튼의 기능이 동일하지만 구성하게 됨 -->

    • MemberUpdate
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberUpdate.jsp
    	//-- 데이터베이스의 테이블(TBL_MEMBER)에
    	//   회원 데이터 수정 액션 처리 수행
    	//   .. 이후, 다시 리스트 페이지(MemberSelect.jsp)를 요청할 수 있도록 클라이언트에 안내
    	
    	// 한글 깨짐 방지
    	request.setCharacterEncoding("UTF-8");
    
    	// 이전 페이지로부터 데이터 수신 (MemberUpdateForm.jsp)
    	String sid = request.getParameter("sid");
    	String name = request.getParameter("uName");
    	String tel = request.getParameter("uTel");
    	
    	// DB 연결 준비
    	MemberDAO dao = new MemberDAO();
    	
    	try
    	{
    		// DB 연결
    		dao.connection();
    		 
    		// MemberDTO 객체 생성 및 속성 구성 (→modify 메소드를 통해 입력할 DTO 구성)
    		MemberDTO member = new MemberDTO();
    		member.setSid(sid);
    		member.setName(name);
    		member.setTel(tel);
    
    		// update 쿼리문을 수행하는 메소드 호출
    		// → dao의 modify()메소드
    		dao.modify(member);
    		
    		// 반환 값을 받아서 추가 업무 수행 코드 삽입 가능
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    
    	// check 
    	// 클라이언트가 MemberSelect.jsp 페이지를 다시 요청할 수 있도록 안내
    	// → 다시 요청하는 과정에서 리스트 갱신
    	response.sendRedirect("MemberSelect.jsp");
    	
    %>
    <!-- 클라이언트와 만나지 않는 페이지이기 때문에 모두 제거해두었음 -->

    • MemberDelete 
    <%@page import="com.test.MemberDTO"%>
    <%@page import="com.test.MemberDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberDelete.jsp
    	
    	// 이전 페이지(MemberSelect.jsp)로부터 받아온 데이터
    	// → sid 
    	
    	String sid = request.getParameter("sid");
    
    	MemberDAO dao = new MemberDAO();
    	
    	String strAddr = "";
    	
    	try
    	{
    		dao.connection();
    		
    		// 참조하는 레코드 수 확인
    		int checkCount = dao.refCount(sid);
    		//-- TBL_MEMBER 테이블의 제거하고자 하는 데이터의
    		//   SID 를 참조하는 TBL_MEMBERSCORE 테이블 내의 데이터 갯수 확인
    		
    		// 그에 따른 분기
    		if (checkCount==0)	//-- 제거 가능
    		{
    			dao.remove(sid);
    			strAddr = "MemberSelect.jsp";
    		}
    		else				//-- 제거 불가
    		{
    			//dao.remove(sid); 
    			//-- TBL_MEMBERSCORE 테이블의 데이터가
    			//   TBL_MEMBER 테이블의 SID 를 참조하고 있는 경우로
    			//   삭제가 불가능한 상황
    			//   → 제거하지 못하는 사유를 안내하는 페이지로 이동
    			//      + 리스트 페이지로 돌아가기 버튼
    			strAddr = "Notice.jsp";
    		}
    		
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    	//check!! 
    	// 상황에 따라 안내한 페이지로 클라이언트가 다시 요청할 수 있도록 처리
    	response.sendRedirect(strAddr);
    	
    %>
    <%-- 내 풀이
    <%
    	// MemberDelete.jsp
    	//-- 데이터베이스의 테이블(TBL_MEMBER)에
    	//   회원 데이터 추가 액션 처리 수행
    	//   .. 이후, 다시 리스트 페이지(MemberSelect.jsp)를 요청할 수 있도록 클라이언트에 안내
    	
    	// 이전 페이지로부터 데이터 수신 (MemberSelect.jsp)
    	String sid = request.getParameter("sid");
    	
    	// DB 연결 준비
    	MemberDAO dao = new MemberDAO();
    	
    	try
    	{
    		// DB 연결
    		dao.connection();
    
    		if(dao.refCount(sid)==0)
    		{
    			// delete 쿼리문을 수행하는 메소드 호출
    			// → dao의 remove()메소드
    			dao.remove(sid);
    		}
    			
    		// 반환 값을 받아서 추가 업무 수행 코드 삽입 가능
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    
    	// check 
    	// 클라이언트가 MemberSelect.jsp 페이지를 다시 요청할 수 있도록 안내
    	// → 다시 요청하는 과정에서 리스트 갱신
    	response.sendRedirect("MemberSelect.jsp");
    	
    %>
     --%>
    <!-- 클라이언트와 만나지 않는 페이지이기 때문에 모두 제거해두었음 -->
    <!-- 
    	분기에 따라서 넘겨주지 않는 경우, 
    	response 로 페이지 요청을 해주지 않는다면
    	해당 페이지에 남아있게 되는데,
    	이를 이용해서 
    	Notice.jsp 의 경우는 해당 페이지 내의 html 영역에서 수행해도 문제 없다.
     -->

    • Notice
    <%@ page contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Notice.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>안내</h1>
    	<hr>
    </div>
    
    <div>
    	<p>성적 정보가 등록되어 있으므로 해당 회원 삭제가 불가능합니다</p>
    	<br>
    	
    	<a href="MemberSelect.jsp" style="text-decoration:none;">--돌아가기--</a>
    </div>
    
    </body>
    </html>

    성적관리

    • MemberScoreSelect
    <%@page import="com.test.MemberScoreDTO"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="com.test.MemberScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    
    	// 결과 값 담을 변수 선언
    	StringBuffer str = new StringBuffer();
    
    	// 객체 준비
    	MemberScoreDAO dao = new MemberScoreDAO();
    	
    	try
    	{
    		str.append("<table class='table'>");
    		str.append("<tr>");
    		str.append("<th class='numTh'> 번호 </th>");
    		str.append("<th class='nameTh'> 이름 </th>");
    		str.append("<th> 국어점수 </th>");
    		str.append("<th> 영어점수 </th>");
    		str.append("<th> 수학점수 </th>");
    		str.append("<th> 총점 </th>");
    		str.append("<th> 평균 </th>");
    		str.append("<th> 석차 </th>");
    		str.append("<th> 성적처리 </th>");
    		str.append("</tr>");
    		
    		// DB 연결
    		dao.connection();
    		
    		// dao 의 list () 메소드 받아오기
    		for(MemberScoreDTO score : dao.list())
    		{
    			str.append("<tr>");
    			
    			str.append("<td>"+ score.getSid() +"</td>");
    			str.append("<td>"+ score.getName()+"</td>");
    			str.append("<td class='txtScore'>"+ score.getKor() +"</td>");
    			str.append("<td class='txtScore'>"+ score.getEng() +"</td>");
    			str.append("<td class='txtScore'>"+ score.getMat() +"</td>");
    			str.append("<td class='txtScore'>"+ score.getTot() +"</td>");
    			str.append("<td class='txtScore'>"+ String.format("%.2f",score.getAvg()) +"</td>");	// 소수점 자리 check
    			str.append("<td class='txtScore'>"+ score.getRank()+"</td>");
    			/* 
    			str.append("<td>");
    			str.append("<a href=''>");
    			str.append("<button type='button' class='btn01'>입력</button>");
    			str.append("</a>");
    			str.append("<a href=''>");
    			str.append("<button type='button' class='btn01'>수정</button>");
    			str.append("</a>");
    			str.append("<a href=''>");
    			str.append("<button type='button' class='btn01'>삭제</button>");
    			str.append("</a>");
    			str.append("</td>");
    			 */
    			if (score.getKor()==-1 && score.getEng()==-1 && score.getMat()==-1)
    			{
    				// 성적 처리 안 된 상태 → 입력 가능 수정 및 삭제 불가
    				str.append("<td>");
    				str.append("<a href='MemberScoreInsertForm.jsp?sid="+ score.getSid() +"'>");
    				str.append("<button type='button' class='btn01'>입력</button>");
    				str.append("</a>");
    				str.append("<button type='button' class='btn02' disabled='disabled'>수정</button>");
    				str.append("<button type='button' class='btn02' disabled='disabled'>삭제</button>");
    				str.append("</td>");
    			}
    			else
    			{
    				// 성적 처리 완료된 상태 → 입력 불가 수정 및 삭제 가능 
    				str.append("<td>");
    				str.append("<button type='button' class='btn02' disabled='disabled'>입력</button>");
    				str.append("<a href='MemberScoreUpdateForm.jsp?sid="+ score.getSid() +"'>");
    				str.append("<button type='button' class='btn01'>수정</button>");
    				str.append("</a>");
    				/* memberScoreDelete(10,"다금바리") 로 넘기는 형식*/
    				// onclick 으로 a태그 없이도 구성 가능
    				//str.append("<button type='button' class='btn01' onclick='memberScoreDelete("+ score.getSid()+ ",\"" + score.getName() +"\")'>삭제</button>");
    				str.append("<a href='javascript:memberScoreDelete("+ score.getSid()+ ",\"" + score.getName() +"\")'>");
    				str.append("<button type='button' class='btn01'>삭제</button>");
    				str.append("</a>");
    				str.append("</td>");
    			}
    			
    			str.append("</tr>");
    		}
    		
    		
    		str.append("</table>");
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			dao.close();
    		} 
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    	}
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberScoreSelect.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/MemberScore.css">
    <script type="text/javascript">
    	// 삭제는 따로 폼이 필요 없음 -- 삭제 메소드가 돌아갈 페이지는 필요함 
    	function memberScoreDelete(sid, name)
    	{
    		// ※ name 문자열을 넘기는 과정에서 따옴표 구성에 유의할 것!!
    		
    		//확인
    		//alert("번호:"+sid+" ,이름:"+name);
    	
    		// 이 회원의 성적 데이터를 정말 삭제할 것인지 확인
    		var res = confirm("번호:"+sid+" ,이름:"+name+"\n이 회원의 점수를 정말 삭제하시겠습니까?");
    		
    		// 확인
    		//alert(res);
    		//-- confirm() 함수를 통해 호출되는 창은
    		//   확인 → true / 취소 → false 를 반환하게 된다.
    		
    		// 확인 버튼 클릭 시 → res 가 true 일 때...
    		// MemberScoreDelete.jsp 페이지에 삭제 요청
    		if(res)
    			window.location.href="MemberScoreDelete.jsp?sid="+ sid;		
    	} 
    </script>
    </head>
    <body>
    
    <div>
    	<h1>회원 <span style="color: blue;">성적</span> 관리 및 출력 페이지</h1>
    	<hr>
    </div>
    
    <div>
    	<a href="MemberSelect.jsp"><button type="button">회원 명단 관리</button></a>
    </div>
    <br>
    
    <!-- 번호 이름 국어점수 영어점수 수학점수 총점 평균 석차     성적처리 -->
    <!--                  ...                                 입력 수정 삭제 -->
    <!--                  ...                                 입력 수정 삭제 -->
    <!--                  ...                                 입력 수정 삭제 -->
    	<!-- 정적 테이블 -->
    <!--
    <div>
    	<table class="table">
    		<tr>
    			<th class="numTh">번호</th>
    			<th class="nameTh">이름</th>
    			<th>국어점수</th><th>영어점수</th><th>수학점수</th>
    			<th>총점</th><th>평균</th><th>석차</th>
    			<th>성적처리</th>
    		</tr>
    		<tr>
    			<td>1</td>
    			<td>고길동</td>
    			<td class="textScore">90</td>
    			<td class="textScore">80</td>
    			<td class="textScore">70</td>
    			<td class="textScore">240</td>
    			<td class="textScore">80.00</td>
    			<td class="textScore">1</td>
    			<td>
    				<button type="button" class="btn01">입력</button>
    				<button type="button" class="btn01">수정</button>
    				<button type="button" class="btn01">삭제</button>
    			</td>
    		</tr>
    		<tr>
    			<td>2</td>
    			<td>도우너</td>
    			<td class="textScore">80</td>
    			<td class="textScore">70</td>
    			<td class="textScore">60</td>
    			<td class="textScore">210</td>
    			<td class="textScore">70.00</td>
    			<td class="textScore">2</td>
    			<td>
    				<button type="button" class="btn01">입력</button>
    				<button type="button" class="btn01">수정</button>
    				<button type="button" class="btn01">삭제</button>
    			</td>
    		</tr>
    		<tr>
    			<td>3</td>
    			<td>마이콜</td>
    			<td class="textScore">-1</td>
    			<td class="textScore">-1</td>
    			<td class="textScore">-1</td>
    			<td class="textScore">-3</td>
    			<td class="textScore">-1</td>
    			<td class="textScore">3</td>
    			<td>
    				<button type="button" class="btn01">입력</button>
    				<button type="button" class="btn01">수정</button>
    				<button type="button" class="btn01">삭제</button>
    			</td>
    		</tr>
    	</table>
    </div> 
    -->
    	<!-- 동적 테이블 -->
    <div>
    <%=str.toString() %>
    </div>
    
    </body>
    </html>

    • MemberScoreDTO
    /* =================================================
    	MemberScoreDTO.java
    	- 객체 전용 (데이터 보관 및 전송) → JAVA Bean
     =================================================== */
    
    package com.test;
    
    public class MemberScoreDTO
    {
    	// VIEW_MEMBERSCORE 조회 항목을 기준으로
    	// 프로퍼티(property) 구성
    	private String sid, name;	//-- 번호, 이름
    	private int kor, eng, mat;	//-- 국어점수, 영어점수, 수학점수
    	private int tot, rank;		//-- 총점, 석차(등수)
    	private double avg;			//-- 평균
    	
    	// getter / setter 구성
    	public String getSid()
    	{
    		return sid;
    	}
    	public void setSid(String sid)
    	{
    		this.sid = sid;
    	}
    	public String getName()
    	{
    		return name;
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public int getKor()
    	{
    		return kor;
    	}
    	public void setKor(int kor)
    	{
    		this.kor = kor;
    	}
    	public int getEng()
    	{
    		return eng;
    	}
    	public void setEng(int eng)
    	{
    		this.eng = eng;
    	}
    	public int getMat()
    	{
    		return mat;
    	}
    	public void setMat(int mat)
    	{
    		this.mat = mat;
    	}
    	public int getTot()
    	{
    		return tot;
    	}
    	public void setTot(int tot)
    	{
    		this.tot = tot;
    	}
    	public int getRank()
    	{
    		return rank;
    	}
    	public void setRank(int rank)
    	{
    		this.rank = rank;
    	}
    	public double getAvg()
    	{
    		return avg;
    	}
    	public void setAvg(double avg)
    	{
    		this.avg = avg;
    	}
    
    }

    • MemberScoreDAO
    /* =================================================
    	MemberScoreDAO.java
    	- 데이터베이스 액션 처리 전용 클래스
    	  (TBL_MEMBERSCORE 테이블 전용 DAO )
     =================================================== */
    
    package com.test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import com.util.DBConn;
    
    public class MemberScoreDAO
    {
    	// 주요 속성 구성
    	private Connection conn;
    	
    	// 데이터베이스 연결 담당 메소드
    	public Connection connection() throws ClassNotFoundException, SQLException
    	{
    		conn = DBConn.getConnection();
    		return conn;
    	}
    	
    	// 데이터 입력담당 메소드 (성적 데이터 입력)
    	public int add(MemberScoreDTO score) throws SQLException
    	{
    		int result = 0;
    		
    		String sql = "INSERT INTO TBL_MEMBERSCORE(SID, KOR, ENG, MAT) VALUES(?, ?, ?, ?)";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		pstmt.setInt(1, Integer.parseInt(score.getSid()));
    		pstmt.setInt(2, score.getKor());
    		pstmt.setInt(3, score.getEng());
    		pstmt.setInt(4, score.getMat());
    		
    		result = pstmt.executeUpdate();
    		
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 성적 전체 리스트 출력 담당 메소드
    	public ArrayList<MemberScoreDTO> list() throws SQLException
    	{
    		ArrayList<MemberScoreDTO> result = new ArrayList<MemberScoreDTO>();
    		
    		String sql = "SELECT SID, NAME, KOR, ENG, MAT, (KOR+ENG+MAT) AS TOT"
    				+ ", (KOR+ENG+MAT)/3 AS AVG"
    				+ ", RANK() OVER(ORDER BY (KOR+ENG+MAT) DESC)"
    				+ " AS RANK FROM VIEW_MEMBERSCORE"
    				+ " ORDER BY SID";	// 실무에서는 ORDER BY 를 안넣는 것이 일반적
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		ResultSet rs = pstmt.executeQuery();
    		while(rs.next())
    		{
    			MemberScoreDTO score = new MemberScoreDTO();
    			
    			score.setSid(rs.getString("SID"));
    			score.setName(rs.getString("NAME"));
    			score.setKor(rs.getInt("KOR"));
    			score.setEng(rs.getInt("ENG"));
    			score.setMat(rs.getInt("MAT"));
    			score.setTot(rs.getInt("TOT"));
    			score.setAvg(rs.getDouble("AVG"));
    			score.setRank(rs.getInt("RANK"));
    			
    			result.add(score);
    		}
    		rs.close();
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 데이터베이스 연결 종료(해제) 담당 메소드
    	public void close() throws SQLException
    	{
    		DBConn.close();
    	}
    	
    	// 메소드 추가
    	// 번호 검색 담당 메소드
    	public MemberScoreDTO search(String sid) throws SQLException
    	{
    		MemberScoreDTO result = new MemberScoreDTO();
    		
    		String sql="SELECT SID, NAME, KOR, ENG, MAT FROM VIEW_MEMBERSCORE WHERE SID=?";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		pstmt.setInt(1, Integer.parseInt(sid));
    		ResultSet rs = pstmt.executeQuery();
    		if (rs.next())
    		{
    			result.setSid(rs.getString("SID"));
    			result.setName(rs.getString("NAME"));
    			result.setKor(rs.getInt("KOR"));
    			result.setEng(rs.getInt("ENG"));
    			result.setMat(rs.getInt("MAT"));
    		}
    		
    		return result;
    	}
    	
    	// 메소드 추가
    	// 성적 데이터 수정 담당 메소드
    	public int modify(MemberScoreDTO score) throws SQLException
    	{
    		int result = 0;
    		
    		String sql = "UPDATE TBL_MEMBERSCORE SET KOR=?, ENG=?, MAT=? WHERE SID=?";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		pstmt.setInt(1, score.getKor());
    		pstmt.setInt(2, score.getEng());
    		pstmt.setInt(3, score.getMat());
    		pstmt.setInt(4, Integer.parseInt(score.getSid()));
    		
    		result = pstmt.executeUpdate();
    		pstmt.close();
    		
    		return result;
    	}
    	
    	// 메소드 추가
    	// 성적 데이터 삭제 담당 메소드
    	public int remove(String sid) throws SQLException
    	{
    		int result = 0;
    		
    		String sql = "DELETE FROM TBL_MEMBERSCORE WHERE SID=?";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		pstmt.setInt(1, Integer.parseInt(sid));
    		
    		result = pstmt.executeUpdate();
    		pstmt.close();
    		
    		return result;
    	}
    	
    
    }

    • MemberScoreInsertForm
    <%@page import="com.test.MemberScoreDTO"%>
    <%@page import="com.test.MemberScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// 이전페이지(MemberScoreSelect)로부터 데이터 수신
    	// -- sid
    	
    	String sid = request.getParameter("sid");
    
    	String name ="";
    
    	//name을 조회하기 위한 dao 인스턴스 생성
    	MemberScoreDAO dao = new MemberScoreDAO();
    
    	try
    	{
    		// DB 연결 
    		dao.connection();
    		
    		// 수신한 sid 활용하여 name 얻어내기 
    		MemberScoreDTO score = dao.search(sid);
    		name = score.getName();		
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberScoreInsertForm.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/MemberScore.css">
    
    <script type="text/javascript">
    
    	function memberScoreSubmit()
    	{
    		// 확인 
    		//alert("함수호출확인");
    		
    		var memberScoreForm = document.getElementById("memberScoreForm");
    		
    		var kor = document.getElementById("kor");
    		var eng = document.getElementById("eng");
    		var mat = document.getElementById("mat");
    		
    		var korMsg = document.getElementById("korMsg");
    		var engMsg = document.getElementById("engMsg");
    		var matMsg = document.getElementById("matMsg");
    		
    		korMsg.style.display="none";
    		engMsg.style.display="none";
    		matMsg.style.display="none";
    		
    		// 빈문자열, 숫자값아닐때, 0점 미만일 때, 100점 초과일 때
    		if (kor.value=="" || isNaN(kor.value) || Number(kor.value)<0 || Number(kor.value)>100)
    		{
    			korMsg.style.display="inline";
    			kor.focus();
    			return;
    		}
    		
    		if (eng.value=="" || isNaN(eng.value) || Number(eng.value)<0 || Number(eng.value)>100)
    		{
    			engMsg.style.display="inline";
    			eng.focus();
    			return;
    		}
    		
    		if (mat.value=="" || isNaN(mat.value) || Number(mat.value)<0 || Number(mat.value)>100)
    		{
    			matMsg.style.display="inline";
    			mat.focus();
    			return;
    		}
    		
    		memberScoreForm.submit();
    	}
    	
    	function memberScoreReset()
    	{
    		// 확인
    		//alert("리셋 버튼 클릭");
    		
    		var memberScoreForm = document.getElementById("memberScoreForm");
    		
    		var korMsg = document.getElementById("korMsg");
    		var engMsg = document.getElementById("engMsg");
    		var matMsg = document.getElementById("matMsg");
    
    		var kor = document.getElementById("kor");
    		
    		korMsg = "";
    		engMsg = "";
    		matMsg = "";
    		
    		memberScoreForm.reset();
    		kor.focus();
    	}
    
    </script>
    </head>
    <body>
    <div>
    	<h1>회원 <span style="color: blue;">성적</span> 관리 및 
    	<span style='color: red;'>입력</span> 페이지</h1>
    	<hr>
    </div>
    
    <div>
    	<a href="MemberScoreSelect.jsp"><button type="button">회원 성적 관리</button></a>
    </div>
    <br>
    
    <div>
    	<!-- 회원 성적 데이터 입력 폼 구성 -->
    	<form action="MemberScoreInsert.jsp?" method="post" id="memberScoreForm">
    	<%-- <form action="MemberScoreInsert.jsp?sid=<%=sid %>" method="post" id="memberScoreForm"> --%>
    
    		<table class="table">
    			<tr>
    				<th>번호</th>
    				<!-- <td>5</td> -->
    				<td><%=sid %></td>
    				<td></td>
    			</tr>
    			<tr>
    				<th>이름</th>
    				<!-- <td>고길동</td> -->
    				<td><%=name %></td>
    				<td></td>
    			</tr>
    			<tr>
    				<th>국어점수</th>
    				<td>
    					<input type='text' id='kor' name='kor' class='txtScore'>
    				</td>
    				<td>
    					<span class='errMsg' id='korMsg'>0~100 사이의 국어점수를 입력하세요.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>영어점수</th>
    				<td>
    					<input type='text' id='eng' name='eng' class='txtScore'>
    				</td>
    				<td>
    					<span class='errMsg' id='engMsg'>0~100 사이의 영어점수를 입력하세요.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>수학점수</th>
    				<td>
    					<input type='text' id='mat' name='mat' class='txtScore'>
    				</td>
    				<td>
    					<span class='errMsg' id='matMsg'>0~100 사이의 수학점수를 입력하세요.</span>
    				</td>
    			</tr>
    		</table>
    		<br>
    		<input type="hidden" name='sid' value='<%=sid %>'>
    		
    		<a href="javascript:memberScoreSubmit()"><button type="button">입력하기</button></a>
    		<a href="javascript:memberScoreReset()"><button type="button">취소하기</button></a>
    		<a href="MemberScoreSelect.jsp"><button type="button">목록으로</button></a>
    
    		
    	</form>
    </div>
    
    
    </body>
    </html>

    • MemberScoreInsert
    <%@page import="com.test.MemberScoreDTO"%>
    <%@page import="com.test.MemberScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberScoreInsert.jsp
    	//-- 데이터베이스의 테이블(TBL_MEMBER)에
    	//   회원 데이터 추가 액션 처리 수행
    	//   .. 이후, 다시 리스트 페이지(MemberScoreSelect.jsp)를 요청할 수 있도록 클라이언트에 안내
    	
    	
    	// 이전 페이지(MemberScoreInsertForm.jsp)로 부터 수신한 데이터
    	// → sid + kor, eng, mat
    	
    	String sid = request.getParameter("sid");
    	String kor = request.getParameter("kor");
    	String eng = request.getParameter("eng");
    	String mat = request.getParameter("mat");
    	
    	// MemberScoreDAO 인스턴스 생성
    	MemberScoreDAO dao = new MemberScoreDAO();
    	
    	// 주소를 담을 변수 선언 및 초기화 
    	String strAddr = "MemberScoreSelect.jsp";
    	
    	try
    	{
    		// DB 연결
    		dao.connection();
    		
    		// 수신된 데이터로 MemberScoreDTO 구성 → dao의 add() 메소드의 매개변수
    		MemberScoreDTO score = new MemberScoreDTO();
    		score.setSid(sid);
    		score.setKor(Integer.parseInt(kor));
    		score.setEng(Integer.parseInt(eng));
    		score.setMat(Integer.parseInt(mat));
    		
    		// 데이터 입력(insert 쿼리문 수행)
    		int result =dao.add(score);
    		
    		// 위의 메소드 호출 결과 반환하는 값에 따른 분기 수행 가능
    		if(result < 1)	// 제대로 insert 되지 못하면 에러페이지로 가도록
    			strAddr="NoticeMemberInsert.jsp";
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    	// 클라이언트에 새로운 페이지를 다시 요청할 수 있도록 안내 
    	// MemberScoreSelect.jsp 로 클라이언트 안내
    	response.sendRedirect(strAddr);
    
    	/* 보여주는 코드 제거 */
    %>

    • MemberScoreUpdateForm
    <%@page import="com.test.MemberScoreDTO"%>
    <%@page import="com.test.MemberScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// 이전페이지(MemberScoreSelect)로부터 데이터 수신
    	// -- sid
    	
    	String sid = request.getParameter("sid");
    
    	String name ="";
    	int kor, eng, mat;
    	kor=eng=mat=0;
    
    	//name, kor, eng, mat 을 조회하기 위한 dao 인스턴스 생성
    	MemberScoreDAO dao = new MemberScoreDAO();
    
    	try
    	{
    		// DB 연결 
    		dao.connection();
    		
    		// 수신한 sid 활용하여 데이터 얻어내기 
    		MemberScoreDTO score = dao.search(sid);
    		name = score.getName();	
    		kor = score.getKor();
    		eng = score.getEng();
    		mat = score.getMat();
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberScoreUpdateForm.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/MemberScore.css">
    
    <script type="text/javascript">
    
    	function memberScoreSubmit()
    	{
    		// 확인 
    		//alert("함수호출확인");
    		
    		var memberScoreForm = document.getElementById("memberScoreForm");
    		
    		var kor = document.getElementById("kor");
    		var eng = document.getElementById("eng");
    		var mat = document.getElementById("mat");
    		
    		var korMsg = document.getElementById("korMsg");
    		var engMsg = document.getElementById("engMsg");
    		var matMsg = document.getElementById("matMsg");
    		
    		korMsg.style.display="none";
    		engMsg.style.display="none";
    		matMsg.style.display="none";
    		
    		// 빈문자열, 숫자값아닐때, 0점 미만일 때, 100점 초과일 때
    		if (kor.value=="" || isNaN(kor.value) || Number(kor.value)<0 || Number(kor.value)>100)
    		{
    			korMsg.style.display="inline";
    			kor.focus();
    			return;
    		}
    		
    		if (eng.value=="" || isNaN(eng.value) || Number(eng.value)<0 || Number(eng.value)>100)
    		{
    			engMsg.style.display="inline";
    			eng.focus();
    			return;
    		}
    		
    		if (mat.value=="" || isNaN(mat.value) || Number(mat.value)<0 || Number(mat.value)>100)
    		{
    			matMsg.style.display="inline";
    			mat.focus();
    			return;
    		}
    		
    		memberScoreForm.submit();
    	}
    	
    	function memberScoreReset()
    	{
    		// 확인
    		//alert("리셋 버튼 클릭");
    		
    		var memberScoreForm = document.getElementById("memberScoreForm");
    		
    		var korMsg = document.getElementById("korMsg");
    		var engMsg = document.getElementById("engMsg");
    		var matMsg = document.getElementById("matMsg");
    
    		var kor = document.getElementById("kor");
    		
    		korMsg = "";
    		engMsg = "";
    		matMsg = "";
    		
    		memberScoreForm.reset();
    		kor.focus();
    	}
    
    </script>
    </head>
    <body>
    <div>
    	<h1>회원 <span style="color: blue;">성적</span> 관리 및 
    	<span style='color: red;'>수정</span> 페이지</h1>
    	<hr>
    </div>
    
    <div>
    	<a href="MemberScoreSelect.jsp"><button type="button">회원 성적 관리</button></a>
    </div>
    <br>
    
    <div>
    	<!-- 회원 성적 데이터 수정 폼 구성 -->
    	<form action="MemberScoreUpdate.jsp" method="post" id="memberScoreForm">
    	<%-- <form action="MemberScoreInsert.jsp?sid=<%=sid %>" method="post" id="memberScoreForm"> --%>
    
    		<table class="table">
    			<tr>
    				<th>번호</th>
    				<!-- <td>5</td> -->
    				<td><%=sid %></td>
    				<td></td>
    			</tr>
    			<tr>
    				<th>이름</th>
    				<!-- <td>고길동</td> -->
    				<td><%=name %></td>
    				<td></td>
    			</tr>
    			<tr>
    				<th>국어점수</th>
    				<td>
    					<input type='text' id='kor' name='kor' class='txtScore' value='<%=kor %>'>
    				</td>
    				<td>
    					<span class='errMsg' id='korMsg'>0~100 사이의 국어점수를 입력하세요.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>영어점수</th>
    				<td>
    					<input type='text' id='eng' name='eng' class='txtScore' value='<%=eng %>'>
    				</td>
    				<td>
    					<span class='errMsg' id='engMsg'>0~100 사이의 영어점수를 입력하세요.</span>
    				</td>
    			</tr>
    			<tr>
    				<th>수학점수</th>
    				<td>
    					<input type='text' id='mat' name='mat' class='txtScore' value='<%=mat %>'>
    				</td>
    				<td>
    					<span class='errMsg' id='matMsg'>0~100 사이의 수학점수를 입력하세요.</span>
    				</td>
    			</tr>
    		</table>
    		<br>
    		<input type="hidden" name='sid' value='<%=sid %>'>
    		
    		<a href="javascript:memberScoreSubmit()"><button type="button">수정하기</button></a>
    		<a href="javascript:memberScoreReset()"><button type="button">되돌리기</button></a>
    		<a href="MemberScoreSelect.jsp"><button type="button">목록으로</button></a>
    
    		
    	</form>
    </div>
    
    
    </body>
    </html>

    • MemberScoreUpdate
    <%@page import="com.test.MemberScoreDTO"%>
    <%@page import="com.test.MemberScoreDAO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberScoreUpdate.jsp
    	
    	// 이전 페이지(MemberScoreInsertForm.jsp)로 부터 수신한 데이터
    	// → sid + kor, eng, mat
    	
    	String sid = request.getParameter("sid");
    	String kor = request.getParameter("kor");
    	String eng = request.getParameter("eng");
    	String mat = request.getParameter("mat");
    	
    	// MemberScoreDAO 인스턴스 생성
    	MemberScoreDAO dao = new MemberScoreDAO();
    	
    	// 주소를 담을 변수 선언 및 초기화 
    	String strAddr = "MemberScoreSelect.jsp";
    	
    	try
    	{
    		// DB 연결
    		dao.connection();
    		
    		// 수신된 데이터로 MemberScoreDTO 구성 → dao의 add() 메소드의 매개변수
    		MemberScoreDTO score = new MemberScoreDTO();
    		score.setSid(sid);
    		score.setKor(Integer.parseInt(kor));
    		score.setEng(Integer.parseInt(eng));
    		score.setMat(Integer.parseInt(mat));
    		
    		// 데이터 입력(insert 쿼리문 수행)
    		int result =dao.modify(score);
    		
    		// 위의 메소드 호출 결과 반환하는 값에 따른 분기 수행 가능
    		if(result < 1)	// 제대로 insert 되지 못하면 에러페이지로 가도록
    			strAddr="NoticeMemberUpdate.jsp";
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			// DB 연결 종료
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    	// 클라이언트에 변경된 URL로 다시 요청할 수 있도록 안내 
    	// MemberScoreSelect.jsp 로 클라이언트 안내
    	response.sendRedirect(strAddr);
    
    	/* 보여주는 코드 제거 */
    %>

    • MemberScoreDelete
    <%@page import="com.test.MemberScoreDAO"%>
    <%@page import="com.test.MemberScoreDTO"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%
    	// MemberScoreDelete.jsp
    	
    	// 이전 페이지(MemberScoreSelect.jsp)로부터 받아온 데이터
    	// → sid 
    	
    	String sid = request.getParameter("sid");
    
    	MemberScoreDAO dao = new MemberScoreDAO();
    	
    	String strAddr = "MemberScoreSelect.jsp";
    	
    	try
    	{
    		dao.connection();
    		
    		int result = dao.remove(sid);
    		
    		if(result <1)
    			strAddr = "NoticeScoreDelete.jsp";
    		
    	}
    	catch (Exception e)
    	{
    		System.out.println(e.toString());
    	}
    	finally
    	{
    		try
    		{
    			dao.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    	
    	//check!! 
    	// 상황에 따라 안내한 페이지로 클라이언트가 다시 요청할 수 있도록 처리
    	response.sendRedirect(strAddr);
    	
    %>

     

    728x90
Designed by planet-si