초급의 끄적거림

[JSP] JAVA빈즈 (DTO, DAO, CRUD) / 성적프로그램 본문

JSP

[JSP] JAVA빈즈 (DTO, DAO, CRUD) / 성적프로그램

codingD 2019. 8. 29. 17:51

1. DTO (Data Transfer Object) 데이터 전송 객체

  ⊙ 사용자가 입력한 값을 객체형태로 받을 수 있게 클래스 구성

  ⊙ 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환 가능

  ⊙ 하나의 데이터베이스 레코드를 저장하여 레코드와 같은 구조를 가짐

  ⊙ 레코드가 50개이면 DTO 객체도 50개

  ⊙ 한 개의 레코드는 빈즈 클래스 객체 하나로 매핑

  ⊙ 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체

 

 

2. DAO (Data Access Object)

  ⊙ insert, delete, update, select 등 레코드 처리를 주 목적으로 한다

  ⊙ DTO 객체를 데이터베이스 서버에 저장

  ⊙ 데이터베이스 서버로부터 레코드를 SELECT한 후, DTO 객체로 변경해 가져옴

  ⊙ SQL을 직접 실행하는 기능을 가짐

  ⊙ JSP에서 데이터베이스 접속 로직을 Beans로 작성하여 DB정보 변경시 쉽게 변경사항을 구현할 수 있음

  ⊙ 데이터 접근을 목적으로 하는 개체

  ⊙ 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근하도록 하는 것

  ⊙ DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트

 

 

3. CRUD

  ⊙ DAO가 접근하는 것은 DB, File, Application 일 수 있고 이것들을 접근하는 기술 → CRUD

  ⊙ Create, Read, Update, Delete 

       Create, Retrieve, Update, Destroy를 묶어서 하는 용어

    → 대부분의 software가 가지는 기본적인 데이터 처리 기능

★ 페이지는 서로 다른 페이지, 연결 된 것처럼 보이지만 자료를 끌어오는 것은 SungjukDAO.java, 보여주는 것은 sungjukList.jsp

 

 

 

 

4. DBOpen.java / DBClose.java

 ⊙ 경로 : basicWeb - src - net.utility - DBOpen.java / DBClose.java

//DBOpen.java

package net.utility;
import java.sql.Connection;
public class DBOpen{
	public static Connection getConnection() throws Exception{
    
    //oracle DB연결 
    Calss.forName("oracle.jdbc.OracleDriver");
    Connetcion con=DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
    return con; //return이 존재하기 때문에 void가 없어지고 자료형인 Conneciton이 들어감
    
    }//getConnection() end
}//class end



//DBClose.java

package net.utility;
import java.sql.Connection;
public class DBClose{

}//class end

 

 

5. sungjukbean 폴더, net.sungjuk 패키지 생성

  - Java Resources → src → net.sungjuk 패키지 생성 → SungjukDAO.java / SungjukDTO.java 생성

 

 

6. Java Bean 생성

  6-1) Sungjuk DTO

package net.sungjuk;

public class SungjukDTO{
 //sungjukbean - sungjukIns에 int cnt=dao.insert(uname, kor, eng, mat, aver, addr); 처럼 다 넣지 않아도 되는 방법
	
 //sungjuk테이블의 칼럼을 기준으로 field를 선언한다
 private int sno;
 private String uname;
 private int kor;
 private int eng;
 private int mat;
 private int aver;
 private String addr;
 private String wdate;
 
 //default constructor
 public SugnjukDTO(){}
 
 //각 field에 접근 할 수 있는 getter, setter 함수
 //Source - Generate Getters and Setters...
 	public int getSno() {
		return sno;
	}

	public void setSno(int sno) {
		this.sno = sno;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	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 getAver() {
		return aver;
	}

	public void setAver(int aver) {
		this.aver = aver;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}

	public String getWdate() {
		return wdate;
	}

	public void setWdate(String wdate) {
		this.wdate = wdate;
	}
    
    //개발자들이 에러 확인용으로 주로 사용
    //Source → Generate toString()...
    @Override
	public String toString() {
		return "SungjukDTO [sno=" + sno + ", uname=" + uname + ", kor=" + kor
				+ ", eng=" + eng + ", mat=" + mat + ", aver=" + aver
				+ ", addr=" + addr + ", wdate=" + wdate + "]";
	}

}//class end

 

  6-2) sungjukDAO.java

 

package net.sungjuk;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;

import net.utility.DBOpen;

public class SungjukDAO { 
	//Data Access Objct 데이터베이스 관련 작업
    
    //1-1) 성적 데이터 삽입
    public int insert(String uname, int kor, int eng, int mat, int aver, String addr){
    	int cnt=0;
        try{
        	// DB연결: DBOpen.java와 연결한다
        	Connection con=DBOpen.getConnection(); 
            StringgBuilder sql=new StringBuilder();
            
            //Insert SQL문 작성
            sql.append(" INSERT INTO sungjuk (sno, uname, kor, eng, mat, aver, addr, wdate) ");
            sql.append(" VALUES((SELECT NVL(MAX(sno), 0)+1 FROM sugnjuk) ");
            sql.append("    , ?, ?, ?, ?, ?, ?, sysdate) ");
            
            //SQL문 변환
            PreparedStatement pstmt=null;
            pstmt=con.prepareStatement(sql.toString());
            
            //Value값 불러오기
            pstmt.setString(1, uname);
            pstmt.setInt(2, kor);
			pstmt.setInt(3, eng);
            pstmt.setInt(4, mat);
            pstmt.setInt(5, aver);
            pstmt.setString(6, addr);
            
            //실행
            cnt=pstmt.executeUpdate();
        }catch(Exception e){
        	System.out.println("행추가 실패 : " + e);
        }//try end
        
        //행 개수 리턴
        return cnt;
    }//insert() end
    
    
    //1-2) 성적 데이터 삽입
    public int insert(SungjukDTO dto){
    	int cnt=0;
        try{
        	// DB연결: DBOpen.java와 연결한다
        	Connection con=DBOpen.getConnection(); 
            StringgBuilder sql=new StringBuilder();
            
            //Insert SQL문 작성
            sql.append(" INSERT INTO sungjuk (sno, uname, kor, eng, mat, aver, addr, wdate) ");
            sql.append(" VALUES((SELECT NVL(MAX(sno), 0)+1 FROM sugnjuk) ");
            sql.append("    , ?, ?, ?, ?, ?, ?, sysdate) ");
            
            //SQL문 변환
            PreparedStatement pstmt=null;
            pstmt=con.prepareStatement(sql.toString());
            
            //Value값 불러오기
            pstmt.setString(1, dto.getUname());
            pstmt.setInt(2, dto.getKor());
			pstmt.setInt(3, dto.getEng());
            pstmt.setInt(4, dto.getMat());
            pstmt.setInt(5, dto.getAver());
            pstmt.setString(6, dto.getAddr);
            
            //실행
            cnt=pstmt.executeUpdate();
        }catch(Exception e){
        	System.out.println("행추가 실패 : "+e);
        }//try end
        return cnt;
    }//insert() end
    
    
    //2) 성적데이터 목록
    //DB에서 가져온 데이터 (이름, 성적, 평균 등)를 list에 모아서 SungjukDTO자료형으로 ArrayList에 담는다
    //→ 이 때 자료형 주의할 것
    
    public ArrayList<SungjukDTO> list(){
        //테이블을 온전히 담을 수 있는 자료형을 만들어줌
        ArrayList<SungjukDTO> list=null; 
        try{
        	Connetion con=DBOpen.getConnection();
            StringBuilder sql=new StringBuilder();
            sql.append(" SELECT sno, uname, kor, eng, mat, wdate ");
            sql.append(" FROM sungjuk ");
            sql.append(" ORDER BY wdate DESC");
            
            PreparedStatement pstmt=con.prepareSttement(sql.toString());
            
            //결과를 rs에 저장, ResultSet은 결과를 저장하는 하나의 집합 (select 할 때 등장)
            ResultSet rs=pstmt.executeQuery();
            
            //rs의 내용을 next로 읽음
            if(rs.next()){
            
            	// list에 ArrayList<SungjukDTO>로 차곡차곡 저장
            	list=new ArrayList<SungjukDTO>();
                do{
                	SungjukDTO dto=new SungjukDTO();  //한 줄씩 저장
                    dto.setSno(rs.getInt("sno"));
                    dto.set(Uname(rs.getString("uname"));
                	dto.setKor(rs.getInt("kor"));
                    dto.setEng(rs.getInt("eng"));
                    dto.setMat(rs.getInt("mat"));
                    dto.setWdate(rs.getString("wdate"));
                    list.add(ddto);
                }while(rs.next());
            }else{
            	list=null //else가 없어도 상관은 없지만 자료가 없으면 null을 넣어줌.
            }//if end
        }catch(Exception e){
        	System.out.println("목록실패 : "+ e);
        }//try end
        return list;
    }//list() end
	

	//3) 성적데이터 조회
    public SungjukDTO read(int sno){ //sungjukRead.jsp의 변수 sno를 구해야 함
    	SungjukDTO dto=null;
        try{
         	Connection con=DBOpen.getConnection;
            StringBuilder sql=new StringBuilder();
            sql.append(" SELECT sno, uname, kor, eng, mat, aver, addr, wdate ");  //'상세보기' 이기 때문에 다 넣어주기
            sql.append(" FROM sungjuk ");
            sql.append(" WHERE sno=? ");
            
            PreparedStatement pstmt=con.prepareStatement(sql.toString());
            pstmt.setInt(1, sno);   //물음표가 1개이기 때문에 1개 sno
            
            ResultSet rs=pstmt.executeQuery();
            if(rs.next()){
            	dto=new SungjukDTO();
                dto.setSno(rs.getInt("sno"));
                dto.setUname(rs.getInt("uname"));
                dto.setKor(rs.getInt("kor"));
                dto.setEng(rs.getInt("eng"));
                dto.setMat(rs.getInt("mat"));
                dto.setAver(rs.getInt("aver"));
                dto.setAddr(rs.getInt("addr"));
                dto.setWdate(rs.getInt("wdate"));
                
            }else{
            	dto=null;	// 자료가 없으면 null
            }//if end
        }catch(Exception e){
        	System.out.println("상세보기 실패 : "+e);
        }//try end
        return dto;
    }//read() end


	//4) 성적데이터 삭제
    public int delete(int sno){
    	int cnt=0;
        try{
        Connection con=DBOpen.getConnection();
        StringBuilder sql=new StringBuilder();
        
        sql.append(" DELETE FROM sungjuk ");
        sql.append(" WHERE sno=? ");
        
        PreparedStatement pstmt=con.prepareStatement(sql.toString());
        pstmt.setInt(1, sno);
        
        cnt=pstmt.executeUpdate();
        }catch(Exception e){
         System.out.println("삭제 실패 : " +e);
        }//try end
        return cnt;
    }//delete() end
    
    
    //5) 성적데이터 수정
    public int updateproc(SungjukDTO dto){
    	int cnt=0;
        try{
        	Connection con=DBOpen.getConnection();
            StringBuilder sql=new StringBuilder();
            
            sql.append(" UPDATE sungjuk ");
            sql.append(" SET uname=?, kor=?, eng=?, mat=?, aver=?, addr=? ");
            sql.append(" WHERE sno=? ");
            
            PreparedStatement pstmt=con.prepareStatement(sql.toString());
            
            pstmt.setString(1, dto.getUname());
            pstmt.setInt(2, dto.getKor());
            pstmt.setInt(3, dto.getEng());
            pstmt.setInt(4, dto.getMat());
            pstmt.setInt(5, dto.getAver());
            pstmt.setString(6, dto.getAddr());
            pstmt.setInt(7, dto.getSno());
            
            //실행횟수를 cnt에 담기
            cnt=pstmt.executeUpdate();
        }catch(Exception e){
          System.out.println("수정 실패 : "+e);
        }//try end
       return cnt;
    }//updateproc() end
}//class end

 

7. 뷰페이지

  7-1) sungjukForm.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukForm.jsp</title>
</head>
<body>
	<h1></h1>
    <p><a href="sungjukList.jsp">[성적목록]</a></p>
    <form method="post" action="sungjukIns.jsp">
    
    <table border="1">
      <tr>
      	<th>이름</th>
      	<td>
          <input type="text" name="uname" maxlength="20" required autofocus>
        </td>
      </tr>
      <tr>
      	<th>국어</th>
      	<td>
          <input type="text" name="kor" size="5" min="0" max="100" placeholder="숫자입력">
        </td>
      </tr>
      <tr>
      	<th>영어</th>
      	<td>
          <input type="text" name="eng" size="5" min="0" max="100" placeholder="숫자입력">
        </td>
      </tr>
      <tr>
      	<th>수학</th>
      	<td>
          <input type="text" name="mat" size="5" min="0" max="100" placeholder="숫자입력">
        </td>
      </tr>
      <tr>
      	<th>주소</th>
      	<td>
          <select name="addr">
          	<option value="Seoul">서울</option>
            <option value="Jeju">제주</option>
            <option value="Busan">부산</option>
            <option value="Suwon">수원</option>
          </select>
        </td>
      <tr>
        <td colspan="2" align="center">
        	<input type="submit" value="전송">
            <input type="reset" value="취소">
        </td>    
      </tr>
    </table>
    </form>
</body>
</html>

 

 

  7-2) sungjukIns.jsp

<%@ page contentType="text/html; charest=UTF-8"%>
<%@ page import="net.sungjuk.*"%>
<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO"></jsp:useBean>

<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukIns.jsp</title>
</head>
<body>
	<h1>* 성적 결과*</h1>
	<p><a href="sungjukForm.jsp">[성적쓰기]</a></p>
<%
	//한글 인코딩
	request.setCharacterEncoding("UTF-8");
    
    String uname =request.getParameter("uname").trim();
    int kor      =Interger.parseInt(request.getParameter("kor").trim();
    int eng      =Interger.parseInt(request.getParameter("eng").trim();
    int mat      =Interger.parseInt(request.getParameter("mat").trim();
    String addr  =request.getParameter("addr").trim();
    
    //1-1) dto 객체를 사용하기전
    int cnt=dao.insert(uname, kor, eng, mat, aver, addr);
    
    //1-2)dto 객체를 사용한 경우 (추천방법)
    //→ 전달값을 모두 dto객체에 담기 (한 주머니 set 안에 들어가 있는 것)
   dto.setUname(uname);
   dto.setKor(kor);
   dto.setEng(eng);
   dto.setMat(mat);
   dto.setAver(aver);   
   dto.setAddr(addr);
   
   int cnt=dao.insert(dto);
   if(cnt==0){
     out.println("<p>성적 입력을 실패했습니다.</p>");
     out.println("<p><a href='javascript:history.back();'>[다시시도]</a></p>");
   }else{
   	 out.println("<script>");
     out.println("	alert('성적이 입력되었습니다.');");
     out.prtinln("	location.href='sungjukList.jsp';");
     out.println("</script>");
   }//if end
%>

</body>
</html>

  7-3) sungjukList.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="net.sungjuk.*"%>

<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.sungjuk.SungjukDTO" scope="page"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukList.jsp</title>
</head>
<body>
	<h1>* 성적 목록 *</h1>
	<p><a href="sungjukForm.jsp">[성적쓰기]</a></p>
    <table border="1">
    <tr>
      <th>이름</th>
      <th>국어</th>
      <th>영어</th>
      <th>수학</th>
      <th>등록일</th>
    </tr>
<%
	//페이지는 서로 다른 각자의 페이지, 연결 된 것처럼 보이지만 자료를 끌어오는 것은 SungjukDAO, 보여주는 페이지는 sungjuklist
    //전체목록
    ArrayList<SungjukDTO> list=dao.list();
    if(list=null){
    	out.println("<tr>");
        out.println("	<td colspan='5'>글 없음 T.T</td>");
        out.println("</tr>"
    }else{
    	for(int idx=0; idx<list.size(); idx++){
        	dto=list.get(idx);  //한 줄 꺼내 온 것을 다시 dto에 담아줌
      
%>
	<tr>
      //'이름'에 상세보기 에 해당하는 sungjukRead.jsp를 링크를 걸어줌
      <td><a href="sungjukRead.jsp?sno=<%=dto.getSno()%>"><%=dto.getUname()%></td>
      <td><%=dto.getKor()%></td>
      <td><%=dto.getEng()%></td>
      <td><%=dto.getMat()%></td>
      <td><%=dto.getWdate()%></td>
    </tr>
<%
		  }
    }//if end
%>
  </table>
</body>
</html>

 

  7-4) sungjukRead.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="net.sungjuk.*"%>

<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.sungjuk.SungjukDTO" scope="page"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukRead.jsp</title>
</head>
<body>
	<h1>*성적 상세보기*</h1>
    	<p>
			<a href="sungjukForm.jsp">[성적쓰기]</a>
			<a href="sungjukList.jsp">[성적목록]</a>
		</p> 
<%
	int sno=Integer.parseInt(request.getParameter("sno"));
    //위에 useBean을 이용해서 id와 class를 지정했기 때문에 다 쓰지 않고 dto를 가져옴
    dto=dao.read(sno);
    if(dto==null){
    	out.print("해당 글 없음T.T");
    }else{
%>
	<table border="1">
          <tr>
          	<th>이름</th>
            <td><%=dto.getUname()%></td>
          </tr>
          <tr>
          	<th>국어</th>
            <td><%=dto.getKor()%></td>
          </tr>
          <tr>
          	<th>영어</th>
            <td><%=dto.getEng()%></td>
          </tr>
          <tr>
          	<th>수학</th>
            <td><%=dto.getMat()%></td>
          </tr>
          <tr>
          	<th>이름</th>
            <td><%=dto.getUname()%></td>
          </tr>
          <tr>
          	<th>평균</th>
            <td><%=dto.getAver()%></td>
          </tr>
          <tr>
          	<th>주소</th>
            <td><%=dto.getAddr()%>
<% 
	//주소를 한글로 나타내기 위함
	String addr=dto.getAddr();
    
    if(addr.equals("Seoul")){
    	out.println("서울");
    }else if(addr.equals("Busan")){
    	out.println("부산");
    }else if(addr.equals("Suwon")){
    	out.println("수원");
    }else if(addr.equals("Jeju")){
    	out.println("제주");
    }//if end
%>
       
            </td>
         </tr>
         <tr>
         	<th>등록일</th>
            <td><%=dto.getWdate()%></td>
         </tr>
         </table>
         <br><br>
         <a href="sungjukUpdate.jsp?sno=<%=sno%>">[수정]</a>
         &nbsp; &nbsp;
         <a href="sungjukDelete.jsp?sno=<%=sno%>">[삭제]</a>
<%    
    }//if end  
%>
</body>
</html>

 

 

 

  +) ssi. jsp

   ⊙ 자주 쓰는 것들만 따로 모아서 사용

<%@ page contentType="text/html; charset=UTF-8"%>

<%@page import="java.io.*"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="net.sungjuk.*" %>
<jsp:useBean id="dao" class="net.sungjuk.SungjukDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.sungjuk.SungjukDTO" scope="page"></jsp:useBean> <!--  scope 는 넣어도 되고 안 넣어도 됨 -->

<%
	//ssi.jsp 공통페이지
	//한글 인코딩
	request.setCharacterEncoding("UTF-8"); 
%>

 

 

  7-5) sungjukDel.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukDel.jsp</title>
</head>
<body>
	<h1>* 성적 삭제 *</h1>
	<p>
		<a href="sungjukList.jsp">[성적목록]</a>
		<a href="sungjukForm.jsp">[성적쓰기]</a>		
	</p>
<%
	int sno=Integer.parseInt(request.getParameter("sno"));
    int cnt=dao.delete(sno);
    
    if(cnt==0){
    	out.println("<p>성적 삭제를 실패했습니다.</p>);out.println("<p><a href='javascript:history.back()'>[다시시도]</a></p>"); 
	 }else{
		 out.println("<script>");
		 out.println("		alert('성적이 삭제되었습니다');");
		 out.println("		location.href='sungjukList.jsp';");  //삭제가 되면 성적이 삭제되었다는 알림창과 함께 성적목록으로 이동
		 out.println("</script>");	
	 }//if end
%>
</body>
</html>

'이미라' 가 삭제된 모습

 

  7-6) sungjukUpdate.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukUpdate.jsp</title>
</head>
<body>
		<h1>*성적 수정*</h1>
		<p>
			<a href="sungjukForm.jsp">[성적쓰기]</a>
			<a href="sungjukList.jsp">[성적목록]</a>
		</p>
<%
	int sno=Integer.parseInt(request.getParameter("sno"));
    dto=dao.read(sno);  //read를 재활용, 우리가 가져온 것을 dto에 
    if(dto==null){
    	out.print("해당 글 없음T.T");
    }else{
%>
	<form method="post" action="sunjukUpdateProc.jsp">
	<input type="hidden" name="sno" value="<%=sno%>">  <!-- 행수정을 위해서 sql문에서 작성했을 때 sno가 필요했는데 sno를 가져올 필요가 없어서 안가져왔지만 필요하기 때문에 hidden 값으로서 가져옴 -->
	<table border="1">
	 <tr>
	  <th>이름</th>  
	  <td>
	    <input type="text" name="uname" value="<%=dto.getUname() %>" maxlength="20" required autofocus> <!-- sungjuk에서 만든 Read의 테이블 복사 해오되 rs → dto -->
	  </td> 	
     </tr>
     <tr>
	  <th>국어</th>  
	  <td>
	    <input type="number" name="kor" value="<%=dto.getKor() %>" size="5" min="0" max="100" placeholder="숫자입력"> 
	  </td> 	
     </tr>	
	<tr>
	  <th>영어</th>  
	  <td>
	    <input type="number" name="eng" value="<%=dto.getEng() %>" size="5" min="0" max="100" placeholder="숫자입력"> 
	  </td> 	
     </tr>
	 <tr>
	  <th>수학</th>  
	  <td>
	    <input type="number" name="mat" value="<%=dto.getMat() %>" size="5" min="0" max="100" placeholder="숫자입력"> 
	  </td> 	
     </tr>
     <tr>
	  <th>주소</th>  
	  <td>
<%
	String addr=dto.getAddr();				
%>			
	  <select name="addr"> <!-- selected 라는 속성이 추가 되어야 수정됨, selected : 처음 선택할때 지정되어 있는 것 -->
		<option value="Seoul"  <%if(addr.equals("Seoul"))  {out.print("selected");} %>>서울</option> <!-- '서울'이 지정되어 있는 사람은 서울을 selected 하라는 것 -->
		<option value="Jeju"    <%if(addr.equals("Jeju"))	 {out.print("selected");} %>>제주</option>
		<option value="Busan"  <%if(addr.equals("Busan")) {out.print("selected");} %>>부산</option>
		<option value="Suwon" <%if(addr.equals("Suwon")){out.print("selected");} %>>수원</option>				
	  </select>
          </td>						
	</tr>	
	<tr>
	  <td colspan="2" align="center">
		<input type="submit" value="전송">
		<input type="reset" value="취소">
	   </td>
	</tr>
    </table>
    </form>
<%
    }//if end
%>
</body>
</html>	   
	 

 

  7-7) sungjukUpdateProc.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sunjukUpdateProc.jsp</title>
</head>
<body>
	<h1>* 성적 수정 결과 *</h1>
	<p>
		<a href="sungjukList.jsp">[성적목록]</a>
		<a href="sungjukForm.jsp">[성적쓰기]</a>		
	</p>
<%
	int sno=Integer.parseInt(request.getParameter("sno"));
	String uname=request.getParameter("uname").trim();
	int kor=Integer.parseInt(request.getParameter("kor"));
	int eng=Integer.parseInt(request.getParameter("eng"));
	int mat=Integer.parseInt(request.getParameter("mat"));
	String addr=request.getParameter("addr").trim();
	
	int aver=(kor+eng+mat)/3;
	
	//dto에 담아서 한번에 updateproc로 넘김
	dto.setUname(uname);
	dto.setKor(kor);
	dto.setEng(eng);
	dto.setMat(mat);
	dto.setAver(aver);
	dto.setAddr(addr);
	dto.setSno(sno);
	
	int cnt=dao.updateproc(dto);
	if(cnt==0){
		 out.println("<p>성적 수정을 실패했습니다</p>");
		 out.println("<p><a href='javascript:history.back()'>[다시시도]</a></p>"); 
	 }else{
		 out.println("<script>");
		 out.println("		alert('성적이 수정되었습니다');");
		 out.println("		location.href='sungjukList.jsp';"); 
		 out.println("</script>");			 
	 }//if end
%>	

</body>
</html>
Comments