2022.09.05~08

sofia·2022년 9월 12일
0

JAVA

목록 보기
26/27
post-thumbnail
  • 게시판은 날마다 다시 수정 및 추가하면서 설명 할 예정임......
    작성 순서는 강사님이 제공한 ppt참고해야하며
    날 마다 업데이트를 하다보니, 도중에 오류 발생하거나 백업이 안된 경우(믿었던 백업에 배신당하기!)가 있었으므로, 전체 코드를 jsp,java 파일 별로 믿에 둘 거임.

집에서 수정하다보니 처음 보는 오류들이 많이 발생함.

최대한 코드 수정한걸 복사하고 붙어넣어서 최대한 이상이 안생기도록 할것.
(파일 삭제후, 붙어넣기하니깐 오류 발생함. 내용 전체를 컨트롤 c,v 해야함)


게시판

SQL

CREATE TABLE BOARDT
(B_ID NUMBER(5) PRIMARY KEY
,B_NAME VARCHAR2(20)
,B_EMAIL VARCHAR2(50)
,B_TITLE VARCHAR2(80)
,B_CONTENT VARCHAR2(3000)
,B_DATE DATE
,B_HIT NUMBER(5) DEFAULT 0
,B_PWD VARCHAR2(12)
,B_IP VARCHAR2(15)
,B_REF NUMBER(5)
,B_STEP NUMBER(5)
,B_LEVEL NUMBER(5)
);

1. BoardBean.java

package magic.board;

import java.sql.Timestamp;

public class BoardBean {
	private int b_id;
	private String b_name;
	private String b_email;
	private String b_title;
	private String b_content;
	private Timestamp b_date;
	private int b_hit;
	private String b_pwd;
	private String b_ip;
	private int b_ref;
	private int b_step;
	private int b_level;
	
	
	public int getB_ref() {
		return b_ref;
	}
	public void setB_ref(int b_ref) {
		this.b_ref = b_ref;
	}
	public int getB_step() {
		return b_step;
	}
	public void setB_step(int b_step) {
		this.b_step = b_step;
	}
	public int getB_level() {
		return b_level;
	}
	public void setB_level(int b_level) {
		this.b_level = b_level;
	}
	public String getB_ip() {
		return b_ip;
	}
	public void setB_ip(String b_ip) {
		this.b_ip = b_ip;
	}
	public String getB_pwd() {
		return b_pwd;
	}
	public void setB_pwd(String b_pwd) {
		this.b_pwd = b_pwd;
	}
	public int getB_id() {
		return b_id;
	}
	public void setB_id(int b_id) {
		this.b_id = b_id;
	}
	public String getB_name() {
		return b_name;
	}
	public void setB_name(String b_name) {
		this.b_name = b_name;
	}
	public String getB_email() {
		return b_email;
	}
	public void setB_email(String b_email) {
		this.b_email = b_email;
	}
	public String getB_title() {
		return b_title;
	}
	public void setB_title(String b_title) {
		this.b_title = b_title;
	}
	public String getB_content() {
		return b_content;
	}
	public void setB_content(String b_content) {
		this.b_content = b_content;
	}
	public Timestamp getB_date() {
		return b_date;
	}
	public void setB_date(Timestamp b_date) {
		this.b_date = b_date;
	}
	
	public int getB_hit() {
		return b_hit;
	}
	public void setB_hit(int b_hit) {
		this.b_hit = b_hit;
	}
	
	//================ 페이지 목록 ===================

	public static int pageSize =10; //한페이지에 10개의 글을 보여주기 위한 변수
	public static int pageCount = 1; //페이지 개수 카운트, 페이지(컬럼)가 많을 수록 늘어남(초기값)
	public static int pageNum = 1; //페이지 번호(기본값)
	
	//이부분 정리 다시 해서 노션에 정리하기
	
	// 84건의 게시글 존재 
	//=> pageCount = 9 
	//pageNum = 1
	//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
	//temp = 0 // (pageNum -1) % limit;
	//startPage = 1 //pageNum(1) - temp(0)
	
	//if(1-4>0) 거짓
	//for(int i = 1; i<5; i++){
	//	if(1=1)(참) str=[1]
	//	if(1>=9)(거짓) 
	//	}
	//for(int 2 = 1; i<5; i++){
	//	if(2=1) 거짓
	//	else{str=[1]+ [2] //1은 링크가 걸리지 않고 2는 링크가 걸림 
	//  if(2>=9)(거짓) 
	//	}
	//for(int 3 = 1; i<5; i++){
		//	if(3=1) 거짓
		//	else{str=[1]+ [2] +[3]//3에 링크 걸림
		//  if(3>=9)(거짓) 
		//	}
	//for(int 4 = 1; 4<5; i++){
	//	if(4=1) 거짓
	//	else{str=[1]+ [2] + [3] + [4]//4에 링크 걸림
	//  if(4>=9)(거짓) 
	//	}
		
	//if (5<= 9){ 5[다음]
	//   
	//}
	
	
	// 최종적으로 [1]+[2]+[3]+[4]+ 다음 
	
	
	//===============================
	// 84건의 게시글 존재 
		//=> pageCount = 9 
		//pageNum = 1
		//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
		//temp = 0 // (pageNum -1) % limit;
		//startPage = 1 //pageNum(1) - temp(0)
		
		//if(1-4>0) 거짓
		//for(int i = 1; i<5; i++){
			//	if(1=1)(참) str=[1]
			//	if(1>=9)(거짓) 
		//	}
		//for(int 2 = 1; i<5; i++){
			//	if(2=1) 거짓
			//	else{str= [1]+ [2] //1은 링크가 걸리지 않고 2는 링크가 걸림 
			//  if(2>=9)(거짓) 
		//	}
		//for(int 3 = 1; i<5; i++){
			//	if(3=1) 거짓
			//	else{str=[1]+ [2] +[3]//3에 링크 걸림
			//  if(3>=9)(거짓) 
			//	}
		//for(int 4 = 1; 4<5; i++){
			//	if(4=1) 거짓
			//	else{str=[1]+ [2] + [3] + [4]//4에 링크 걸림
			//  if(4>=9)(거짓) 
		//	}
			
		//if (5<= 9){ 5[다음]
		//   
		//}
		
		
		// 최종적으로 [1]+[2]+[3]+[4]+ 다음 
	
	
	// 84건의 게시글 존재 
		//=> pageCount = 9 
		//pageNum = 5
		//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
		//temp = 0 // (pageNum -1) % limit;
		//startPage = 5 //pageNum(5) - temp(0)
		
		//if(5-4>0) 참 {[이전4]}
		
		//for(int i = 5; i<9; i++){
			//	if(5=5)(참) str=[이전 4]+[5] : 두개 다 링크 걸려있음
			//	if(5>=9)(거짓) 
		//	}
		//for(int i = 6; i<9; i++){
			//	if(6=1) 거짓
			//	else{str= [이전4]+[5]+[6] //6은 링크가 걸림 
			//  if(6>=9)(거짓) 
		//	}
		//for(int i = 7; i<9; i++){
				//	if(7=5) 거짓
				//	else{str=[이전4]+[5]+[6]+[7]
				//  if(7>=9)(거짓) 
			//	}
		//for(int i = 8; i<9; i++){
			//	if(7=1) 거짓
			//	else{str=[이전4]+[5]+[6]+[7]+[8]
			//  if(3>=9)(거짓) 
		//	}
		
		//if (9<= 9){ 9[다음]
		//   
		//}
		
		
		// 최종적으로 [이전 4]+[5]+[6]+[7]+[8]+ [다음 9]
		
		// 84건의 게시글 존재 
		//pageCount = 9 
		//pageNum = 9
		//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
		//temp = 0 // (pageNum -1) % limit;
		//startPage = 9 //pageNum(9) - temp(0)
		
		//if(9-4>0) 참 {[이전8]}
			//for(int i = 9; i<13; i++){
			//	if(9=9)(참) str=[이전 8]+[9] : 두개 다 링크 걸려있음
			//	if(9>=9)참
			//	}
			//if(13<=9)거짓 
		//   
		//}
		
		//최종적으로 [이전 8]+[9]
	//=============
	
	public static String pageNumber(int limit) {
		//페이지 목록들을 만들어 주는 메소드
		//int limit -> 몇개의 페이지에 대한 로직을 처리할것인지 설정

		String str ="";
		int temp = (pageNum -1) % limit;//시작 페이지를 구함
		int startPage = pageNum - temp; // 시작페이지 설정 "1 - 0 = 1" 이기 때문에 1이 됨
		
		if((startPage - limit) > 0) {//[이전]을 구현하기 위한 if문
			//limit 4, temp 0 , startPage 1이라고 가정했을때
			//if((1-4)>0)
			//pageNum = 5 인경우 => startPage 5
			//if((5-4) >0 ) => 참 
			
			str ="<a href='list.jsp?pageNum="+(startPage-1)+"'>[이전]</a>&nbsp;&nbsp;";
			//str = [이전]
			
			
		}
		
		
		for (int i = startPage; i < (startPage+limit); i++) {
			//페이지 번호가 몇개인지 모름. 즉 페이지 번호를 나열할 필요가 있음
			
			//for(i = 1; i < 5; i++) - >4까지 나옴
			//pageNum = 5인경우 for(i= 5; i<9;i++)
			
			if (i == pageNum) {
				//i = 1 이면 링크가 걸리지 않음
				str += "["+i+"]&nbsp;&nbsp;";
				//str = [1]
			}else {
				str += "<a href='list.jsp?pageNum="+i+"'>["+i+"]</a>&nbsp;&nbsp;";
			}
		
			if (i >= pageCount) {
				break;
			}
		}
		
		if((startPage + limit) <= pageCount) {//[다음]을 구현하기 위한 if문
						
			str +="<a href='list.jsp?pageNum="+(startPage+limit)+"'>[다음]</a>&nbsp;&nbsp;";
			
//			str = "<a href='list.jsp?pageNum="+(startPage-1)+"'>[이전]</a>&nbsp;&nbsp;";
			//str = [이전]
		}
		return str;
	}
	
}

2.BoardDBBean.java

package magic.board;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDBBean {

	//1. 전역 BoardDBBean 객체 레퍼런스를 리턴하는 메소드
	private static BoardDBBean instance = new BoardDBBean();
	public static BoardDBBean getInstance(){
		return instance;
	//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
	//jsp에서 메소드 호출하면 편하기 때문
	}
	
	//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
	public  Connection getConnection( ) throws Exception{
		Context ctx =  new InitialContext();
		DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
		//경로 찾기
		return ds.getConnection();
		//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
		//jsp에서 메소드 호출하면 편하기 때문
	}
	
	
//	//3. 전달인자로 받은 BoardBean board를 BOARDT 테이블에 삽입하는 메소드
	 public int insertBoard(BoardBean board) throws Exception {
	      int re = -1;
	      Connection conn = null;
	      PreparedStatement pstmt = null;
	      ResultSet rs = null;
	      String sql = "";
	      int number;
	      
	      //게시판 2-1 
//	      답변글을 위한 변수
	      int id = board.getB_id();
	      int ref = board.getB_ref();
	      int step = board.getB_step();
	      int level = board.getB_level();
	      
	      
	      try {
	         conn = getConnection();
	         sql = "SELECT MAX(B_ID) FROM BOARDT";//글번호 추가
	         pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
	         rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
	         
	         if (rs.next()) {//다음 쿼리 데이터가 있는 경우를 조건문으로 줌.
	            number = rs.getInt(1)+1;
	          //글번호가 가장 큰 값을 조회하여 1증가 한 값을 INSERT쿼리에 추가
	         } else { 
	            number = 1;
	         }
	         
//	         id가 값이 있거나 0이거나 둘 중 하나가 될 수 있다. 0 일때는 새글, 0이 아닐 때는 답변글
	         if (id != 0) { //답변글일 때(id가 0이 아니면 답글로 봄)
//	            update문이 핵심
	            sql = "UPDATE BOARDT SET b_step = b_step+1 WHERE b_ref=? AND b_step>?";
				//부모글을 찾아 그중에서 현재글(원부모글)보다 b_step이 큰 글들을 찾아서 부모글들의 b_step값을 모두 1씩 더함
	            pstmt = conn.prepareStatement(sql);
	            pstmt.setInt(1, ref);//값을 세팅(넣어줌)(위에서 변수로 받은 ref를 받음)
	            pstmt.setInt(2, step);//(위에서 변수로 받은 step를 받음)값을 세팅(넣어줌)
	            pstmt.executeUpdate();//update문(쿼리)
	            step = step + 1;//답글
	            level = level + 1;
	         } else { //답변글이 아닐 때=새글
	            ref = number;
	            step = 0;
	            level = 0;
	         }
	         
//	         System.out.println("@@@### board.number ===> "+number);
//	         System.out.println("@@@### board.getB_name() ===> "+board.getB_name());
//	         System.out.println("@@@### board.getB_email() ===> "+board.getB_email());
//	         System.out.println("@@@### board.getB_title() ===> "+board.getB_title());
//	         System.out.println("@@@### board.getB_content() ===> "+board.getB_content());
//	         System.out.println("@@@### board.getB_date() ===> "+board.getB_date());
//	         System.out.println("@@@### board.getB_pwd() ===> "+board.getB_pwd());
//	         System.out.println("@@@### board.getB_ip() ===> "+board.getB_ip());
	         
//	         sql = "INSERT INTO BOARDT VALUES(?,?,?,?,?,?,?,?,?)";
	         sql = "INSERT INTO BOARDT VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
	         pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
	         
//	         데이터가 제대로 들어갔는지 확인 해야함
//				System.out.println("@@@@#### number=====>"+number);
//				System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
//				System.out.println("@@@@#### board.getB_email()=====>"+board.getB_email());
//				System.out.println("@@@@#### board.getB_title()=====>"+board.getB_title());
//				System.out.println("@@@@#### board.getB_content()=====>"+board.getB_content());
//				System.out.println("@@@@#### board.getB_date()=====>"+board.getB_date());
//				System.out.println("@@@@#### board.getB_hit()=====>"+board.getB_hit());
//				System.out.println("@@@@#### board.getB_pwd()=====>"+board.getB_pwd());
//				System.out.println("@@@@#### board.getB_ip()=====>"+board.getB_ip());
//				System.out.println("@@@@#### board.getB_ref()=====>"+board.getB_ref());
//				System.out.println("@@@@#### board.getB_step()=====>"+board.getB_step());
//				System.out.println("@@@@#### board.getB_level()=====>"+board.getB_level());
//				
	         
//				//변수 값 담기
	         pstmt.setInt(1, number);//인덱스 번호 변경 및 글번호 (number) 추가
	         pstmt.setString(2, board.getB_name());
	         pstmt.setString(3, board.getB_email());
	         pstmt.setString(4, board.getB_title());
	         pstmt.setString(5, board.getB_content());
	         pstmt.setTimestamp(6, board.getB_date());//날짜 및 시간 저장한걸 추가(setTimestamp)
	         pstmt.setInt(7, board.getB_hit());
	         pstmt.setString(8, board.getB_pwd());
	         pstmt.setString(9, board.getB_ip());
	         pstmt.setInt(10, ref);
	         pstmt.setInt(11, step);
	         pstmt.setInt(12, level);
	         pstmt.executeUpdate();
	         
	         re = 1;
//	         re = pstmt.executeUpdate();
	      }  catch(SQLException ex) {
	         System.out.println("추가 실패");
	         ex.printStackTrace();
	      } finally {
	         try {//자원반납(순서 중요)
	            if(pstmt != null) pstmt.close();
	            if(conn != null) conn.close();
	         } catch(Exception e) {
	            e.printStackTrace();
	         }
	      }
	      
	      return re;
	   }
	
	//4. 리턴타입이 ArrayList<BoardBean> 인 listBoard() 메소드 추가(글목록을 위한 메소드)
	public ArrayList<BoardBean> listBoard(String pageNumber) throws Exception{//제네릭 사용함 , 파라미터는 BoardBean
		
		Connection conn = null;//데이터 베이스 접속
		Statement stmt = null;// DB에 SQL 전달
		int dbCount = 0;//글이 몇개나 있는지 확인(게시글의 갯수
		int absoultepage = 0;//글이 몇개나 있는지 확인(게시글의 갯수
		ResultSet rs = null;
		ResultSet pageSet = null;
		
		
		//db 정보 받기 위함
		String sql=" SELECT b_id \r\n" + 
				"     , b_name\r\n" + 
				"     , b_email\r\n" + 
				"     , b_title\r\n" + 
				"     , b_content\r\n" + 
				"     , b_date\r\n" + 
				"     , b_hit\r\n" + 
				"     , b_pwd\r\n" + 
				"     , b_ip\r\n" + 
				"     , b_ref\r\n" + 
				"     , b_step\r\n" + 
				"     , b_level\r\n" + 
				"  FROM BOARDT\r\n" + 
				" ORDER BY b_ref desc, b_step asc";//해당 데이터 쿼리 정렬되게끔 함.
		
		
		
		String sql2="SELECT COUNT(b_id) FROM BOARDT";
		
		
		
		ArrayList<BoardBean> boardList = new ArrayList<BoardBean>();//ArrayList로 게시글들을 받음

		try {
			conn = getConnection();
//			stmt = conn.createStatement();// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			// 매개변수 (,변경전 내용을 저장하겠다.)
			// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
			pageSet = stmt.executeQuery(sql2);//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
			
			if(pageSet.next()) {
				dbCount = pageSet.getInt(1);
				pageSet.close();
			}
			
			if (dbCount % BoardBean.pageSize == 0) { //pageCount 세팅(페이지 개수를 알려주기 위해 사용)
				//80 % 10 = 0
				BoardBean.pageCount = dbCount / BoardBean.pageSize; //80 /10
			} else {//84 % 10 = 4
				BoardBean.pageCount = dbCount / BoardBean.pageSize +1 ; //80/10 +1
			}
			
			
			if (pageNumber != null) {
				BoardBean.pageNum = Integer.parseInt(pageNumber); //매개변수에 해당되는 pageNumber 세팅
				absoultepage = (BoardBean.pageNum - 1) * BoardBean.pageSize + 1;
			}
			
			rs = stmt.executeQuery(sql);//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
			
			if (rs.next()) {//while문을 감쌈
				rs.absolute(absoultepage);
				int count = 0;
			
				while(count < BoardBean.pageSize) {//pageSize수 (10번) 만큼  반복
					//다음(여러개의) 쿼리 데이터가 있는 경우를 조건문으로 줌.
					
					BoardBean board = new BoardBean();
					//결과값을 세팅
					board.setB_id(rs.getInt(1));//아이디는 INT이므로 getInt로 해야함
					board.setB_name(rs.getString(2));
					board.setB_email(rs.getString(3));
					board.setB_title(rs.getString(4));
					board.setB_content(rs.getString(5));
					board.setB_date(rs.getTimestamp(6));
					board.setB_hit(rs.getInt(7));//조회수는 INT이므로 getInt로 해야함
					board.setB_pwd(rs.getString(8));//조회수는 INT이므로 getInt로 해야함
					board.setB_ip(rs.getString(9));//조회수는 INT이므로 getInt로 해야함
					board.setB_ref(rs.getInt(10));//조회수는 INT이므로 getInt로 해야함
					board.setB_step(rs.getInt(11));//조회수는 INT이므로 getInt로 해야함
					board.setB_level(rs.getInt (12));//조회수는 INT이므로 getInt로 해야함
					
	//				데이터가 제대로 들어갔는지 확인 해야함
	//				System.out.println("@@@@#### board.getB_id()=====>"+board.getB_id());
	//				System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
	//				System.out.println("@@@@#### board.getB_email()=====>"+board.getB_email());
	//				System.out.println("@@@@#### board.getB_title()=====>"+board.getB_title());
	//				System.out.println("@@@@#### board.getB_content()=====>"+board.getB_content());
	//				System.out.println("@@@@#### board.getB_pwd()=====>"+board.getB_pwd());
	//				System.out.println("@@@@####");
	
					boardList.add(board);//반복하면서 게시글들을 쌓음
					
					if (rs.isLast()) {//결과값이 마지막이면 빠져나오기
						break;
					} else {
						rs.next();//마지막이 아니면 계속 진행
					}
					
					count++;
				}

			}
		} catch(SQLException ex) {
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(rs != null)  rs.close();
	    		  if(stmt != null)  stmt.close();
	    		  if(conn != null)  conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return boardList;
	}
	
	
	// 5. 리턴타입이 BoardBean인 getBoard() 메소드 추가
	public BoardBean getBoard (int bid, boolean hitadd) throws Exception{
		//글번호만 넘기면 알아서 내용이 넘어가는 메소드
		//조회 수 때문에 분기처리  해가
		
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
		PreparedStatement pstmtup = null;// 조회수 업데이트
		ResultSet rs = null;
		//db 정보 받기 위함
		BoardBean board = null;
		String sql = "";//해당 번호의 데이터 출력되게 쿼리 작성

		try {
			conn = getConnection();
			if (hitadd==true) {
				//조회수 업데이트 추가함
				sql = "UPDATE BOARDT SET b_hit=b_hit+1 WHERE b_id=?";
				pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
//			 DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
				pstmt.setInt(1, bid);//조건이 하나이기 때문에 (?가 하나임)
//			rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
				pstmt.executeUpdate();//업데이트니깐 업데이트로 바꿔줌
				//pstmtup.close();
				//업데이트 추가 끝!
			}

			sql = "SELECT b_id\r\n" + 
					"    , b_name\r\n" + 
					"    , b_email\r\n" + 
					"    , b_title\r\n" + 
					"    , b_content\r\n" + 
					"    , b_date\r\n" + 
					"    , b_hit\r\n" + 
					"    , b_pwd\r\n" + 
					"    , b_ip\r\n" + 
					"    , b_ref\r\n" + 
					"    , b_level\r\n" + 
					"    , b_step\r\n" + 
					" FROM BOARDT\r\n" + 
					" WHERE b_id=?";//해당 번호의 데이터 출력되게 쿼리 작성
			pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
//			 DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
			pstmt.setInt(1, bid);//조건이 하나이기 때문에 (?가 하나임)
			rs = pstmt.executeQuery();//select 문이니깐 익스큐트 쿼리
			
			
			if(rs.next()) {//다음(여러개의) 쿼리 데이터가 있는 경우를 조건문으로 줌.
				board = new BoardBean();//객체생성(리턴값이 board)
				board.setB_id(rs.getInt(1));
				//board.setB_id(bid);도 가능함
				board.setB_name(rs.getString(2));
				board.setB_email(rs.getString(3));
				board.setB_title(rs.getString(4));
				board.setB_content(rs.getString(5));
				board.setB_date(rs.getTimestamp(6));
				board.setB_hit(rs.getInt(7));
				board.setB_pwd(rs.getString(8));
				board.setB_ip(rs.getString(9));
				board.setB_ref(rs.getInt(10));//조회수는 INT이므로 getInt로 해야함
				board.setB_step(rs.getInt(11));//조회수는 INT이므로 getInt로 해야함
				board.setB_level(rs.getInt (12));//조
//				
////				데이터가 제대로 들어갔는지 확인 해야함
				System.out.println("@@@@#### board.setB_id()=====>"+board.getB_id());
				System.out.println("@@@@#### board.setB_name()=====>"+board.getB_name());
				System.out.println("@@@@#### board.setB_email()=====>"+board.getB_email());
				System.out.println("@@@@#### board.setB_title()=====>"+board.getB_title());
				System.out.println("@@@@#### board.setB_content()=====>"+board.getB_content());
				//System.out.println("@@@@#### board.setB_pwd()=====>"+board.setB_pwd(sql));
			}

		} catch(SQLException ex) {
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(rs != null)  rs.close();
	    		  if(conn != null)  conn.close();
	    		  if(pstmt != null)  pstmt.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return board;
	}
	
	
	// 6.deleteBoard() 메소드 => 삭제할 글 비밀번호 확인하는 메소드 
	public int deleteBoard (int b_id, String b_pwd) throws Exception{//글번호만 넘기면 알아서 내용이 넘어가는 메소드 
		// id와 pwd를 받아 삭제하는 메소드 
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
		ResultSet rs = null;
		int re = -1;

		
		String sql = "";//해당 번호의 데이터 출력되게 쿼리 작성
		String pwd = "";//비밀번호 

		
		try {
			conn = getConnection();
			sql = "SELECT B_PWD FROM BOARDT where B_ID=?"; // 글 번호에 따른 비밀번호 가지고 오기
			pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
			pstmt.setInt(1, b_id);//값을 집어넣음(쿼리의 ?부분)
			rs = pstmt.executeQuery();

			if(rs.next()) {//다음(여러개의) 쿼리 데이터가 있는 경우를 조건문으로 줌.
				pwd = rs.getString(1);
				//비밀번호를 
				if (pwd.equals(b_pwd)) {
					sql = "DELETE FROM BOARDT WHERE B_ID=?";
					pstmt = conn.prepareStatement(sql);//pstmt객체로 쿼리를 받음
					pstmt.setInt(1, b_id);
					pstmt.executeUpdate();
					re = 1;
				}else {
					re =0;
				}

			}

		} catch(SQLException ex) {
			 System.out.println("삭제 실패");
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(rs != null)  rs.close();
	    		  if(conn != null)  conn.close();
	    		  if(pstmt != null)  pstmt.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return re;
	}
	
	//7.테이블 수정 editBoard 메소드
		public int editBoard (BoardBean board) throws Exception{
			int re = -1;
			Connection conn = null;//데이터 베이스 접속
			PreparedStatement pstmt = null;// DB에 SQL 전달
			ResultSet rs = null;
			String sql ="";
			String pwd = "";//비밀번호 

			
			try {
				conn = getConnection();
				sql = "SELECT B_PWD FROM BOARDT where B_ID=?"; // 글 번호에 따른 비밀번호 가지고 오기
				pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
				pstmt.setInt(1, board.getB_id());//값을 집어넣음(쿼리의 ?부분),board 객체를 이용하여 b_id 가지고 오기
				rs = pstmt.executeQuery();
				
				if (rs.next()) {
					pwd = rs.getString(1);
					
					if  (pwd.equals(board.getB_pwd())) {
						sql="UPDATE BOARDT \r\n" + 
								"      SET B_NAME=?\r\n" + 
								"        , B_EMAIL=?\r\n" + 
								"        , B_TITLE=?\r\n" + 
								"        , B_CONTENT=?\r\n" + 
								"        WHERE B_ID=?";
						
						pstmt = conn.prepareStatement(sql);//pstmt객체로 쿼리를 받음
						pstmt.setString(1,board.getB_name());
						pstmt.setString(2,board.getB_email());
						pstmt.setString(3,board.getB_title());
						pstmt.setString(4,board.getB_content());
						pstmt.setInt(5, board.getB_id());
						pstmt.executeUpdate();
						re = 1;
					}else {
						re =0;//비밀번호가 같지 않은것
					}
				}

			} catch(SQLException ex) {
				 System.out.println("수정 실패");
		         ex.printStackTrace();
		      } finally {
		    	  try{//자원반납(순서 중요)
		    		  if(rs != null)  rs.close();
		    		  if(conn != null)  conn.close();
		    		  if(pstmt != null)  pstmt.close();
		    	  }catch(Exception e){
		    		  e.printStackTrace();
		    	  }
		      }
			return re;	
		}

}

3. board.js

function check_ok(){
	
	if(reg_frm.b_name.value.length == 0){
		alert("이름을 써주세요.");
		reg_frm.b_name.focus();
		return;//아이디가 없으면 리턴
	}

	if(reg_frm.b_title.value.length == 0){
		alert("제목을 써주세요.");
		reg_frm.b_title.focus();
		return;// 글제목 없으면 리턴
	}
	if(reg_frm.b_content.value.length == 0){
		alert("내용을 써주세요.");
		reg_frm.b_content.focus();
		return;//글 내용이 없으면 리턴 
	}
	

	if(reg_frm.b_pwd.value.length == 0){
		alert("비밀번호를 써주세요.");
		reg_frm.b_pwd.focus();
		return;//비밀번호가 없으면 리턴 
	}

	
	document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="write_ok.jsp"으로 가겠다.(전송/submit)
}

function delete_ok(){
	
	if(del_frm.b_pwd.value.length == 0){
		alert("비밀번호를 써주세요.");
		del_frm.b_pwd.focus();
		return;//비밀번호가 없으면 리턴 
	}

	
	document.del_frm.submit();
	
}

4.write.jsp

<%@page import="magic.board.BoardBean"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String pageNum = request.getParameter("pageNum");//pageNum을 받음
	

	int b_id=0, b_ref=1, b_step=0, b_level=0;//(초기값인 경우 
	String b_title="";
	
	if(request.getParameter("b_id") != null){
		b_id = Integer.parseInt(request.getParameter("b_id"));
	}	

	BoardDBBean db = BoardDBBean.getInstance();
	BoardBean board = db.getBoard(b_id, false);//조회수 증가 x
	
	if(board != null){//board가 널값이 아니면(답변글이면)
		b_title = board.getB_title();
		b_ref = board.getB_ref();
		b_step = board.getB_step();
		b_level = board.getB_level();
	}
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<script language="JavaScript" src="board.js" charset="utf-8"></script>
</head>
<body>
	<center>
		<h1>글 올 리 기</h1>
		<form name="reg_frm" method="post" action="write_ok.jsp">
			<input type="hidden" name="b_id" value="<%= b_id %>">
			<input type="hidden" name="b_ref" value="<%= b_ref %>">
			<input type="hidden" name="b_step" value="<%= b_step %>">
			<input type="hidden" name="b_level" value="<%= b_level %>">
			<table>
				<tr height="30">
					<td width="80">작성자</td>
					<td width="140">
						<input type="text" name="b_name" size="10" maxlength="20">
					</td>
					<td width="80">이메일</td>
					<td width="240">
						<input type="text" name="b_email" size="24" maxlength="50">
					</td>
				</tr>
				<tr height="30">
					<td width="80">글제목</td>
					<td colspan="3" width="460">
						<%
							if(b_id == 0){//새로운 글이면 
						%>
								<input type="text" name="b_title" size="55" maxlength="80">
						<%
							}else{
						%>
								<input type="text" name="b_title" size="55" maxlength="80"
									 value="[답변]:<%= b_title %>">
						<%
							}
						%>
					</td>
				</tr>
				<tr>
					<td colspan="4">
						<textarea name="b_content" rows="10" cols="65"></textarea>
					</td>
				</tr>
				<tr height="30">
					<td width="80">&nbsp;&nbsp;</td>
					<td colspan="3" width="460">
						<input type="password" name="b_pwd" size="12" maxlength="12">
					</td>
				</tr>
				<tr height="50" align="center">
					<td colspan="4">
						<input type="button" value="글쓰기" onclick="check_ok()">&nbsp;
						<input type="reset" value="다시작성">
						<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">&nbsp;
						<!-- 페이지 목록에 맞춰서 이동할 수 있도록 함  -->
					</td>
				</tr>
			</table>
		</form>
	</center>
</body>
</html>

5. write_ok.jsp

<%@page import="java.net.InetAddress"%>
<%@page import="magic.board.BoardDBBean"%>
<%@page import="java.sql.Timestamp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 
	request.setCharacterEncoding("UTF-8");  
%>  
<jsp:useBean class="magic.board.BoardBean" id="board"></jsp:useBean>
<jsp:setProperty property="*" name="board"/>
<%
	InetAddress address = InetAddress.getLocalHost();
	String ip = address.getHostAddress();

	board.setB_date(new Timestamp(System.currentTimeMillis()));
	//board.setB_ip(request.getRemoteAddr());
	board.setB_ip(ip);
	BoardDBBean db = BoardDBBean.getInstance();
	int re = db.insertBoard(board);
	
	if(re == 1){
		response.sendRedirect("list.jsp");
	}else{
		response.sendRedirect("write.jsp");
	}
%>

6.show.jsp

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="magic.board.BoardBean"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%	
	String pageNum = request.getParameter("pageNum");//pageNum을 받음	
	
	int bid = Integer.parseInt(request.getParameter("b_id"));
	//list.jsp에서 <a href="show.jsp?b_id=..> 에서 b_id가 넘어옴
	//그후 캐스팅!!
	
	BoardDBBean db = BoardDBBean.getInstance();
	//getBoard 메소드를 가지고 와야함(제네릭) 그러기 위해서는 객체생성을 먼저해야함
			//getBoard db객체로 받음.(getInstace하면 instance가 리턴됨)
	
	BoardBean board = db.getBoard(bid, true);
	//BoardBean board = db.getBoard(bid);
	//getBoard 메소드 호출하여 BoardBean 받음(리턴타입은 board)	
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<center>
		<h1>글 내 용 보 기</h1>
		<table border="1" width="600" cellspacing="0">
			<tr height="30" align="center">
				<td width="100">글번호</td>
				<td width="200">
					<%= bid %>
				</td>
				<td width="100">조회수</td>
				<td width="200">
					<%= board.getB_hit() %>
				</td>
			</tr>
			<tr height="30" align="center">
				<td width="100">작성자</td>
				<td width="200">
					<%= board.getB_name() %>
					<!--  	board 객체를 이용하여 getB_.. 사용! -->
				</td>
				<td width="100">작성일</td>
				<td width="200">
					<%-- <%= board.getB_date() %> --%>
					<%= sdf.format(board.getB_date()) %>
								<!--  board 객체를 이용하여 getB_.. 사용! -->
				</td>
			</tr>
			<tr height="30" align="center">
				<td width="100">글제목</td>
				<td width="200" align="left">
					<%= board.getB_title() %><!--  board 객체를 이용하여 getB_.. 사용! -->
				</td>
			</tr>
			<tr height="30" align="center">
				<td width="100">글내용</td>
				<td width="200" align="left">
					<%= board.getB_content() %><!--  board 객체를 이용하여 getB_.. 사용! -->
				</td>
			</tr>
			<tr height="30">
				<td colspan="4" align="right">
				<!--  페이지 목록에 맞춰야 해서 모두 쿼리스트링을 사용하여 pageNum=<%=pageNum%> 넣어야함 -->
					<input type="button" value="글수정" onclick="location.href='edit.jsp?b_id=<%= bid %>&pageNum=<%= pageNum %>'">&nbsp;&nbsp;&nbsp;&nbsp;
					<!-- 해당 게시글의 글번호에 맞는 글 수정로 이동 -->
					<input type="button" value="글삭제" onclick="location.href='delete.jsp?b_id=<%= bid %>&pageNum=<%= pageNum %>'">&nbsp;&nbsp;&nbsp;&nbsp;
					<!-- 해당 게시글의 글번호에 맞는 글 삭제로 이동 -->
					<input type="button" value="답변글" onclick="location.href='write.jsp?b_id=<%= bid %>&pageNum=<%= pageNum %>'">&nbsp;&nbsp;&nbsp;&nbsp;
					<!-- 해당 게시글의 글 번호에 맞는 답변글로 이동  -->
					<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">
				</td>
			</tr>
		</table>
	</center>
</body>
</html>

7.list.jsp

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.sql.Timestamp"%>
<%@page import="magic.board.BoardBean"%>
<%@page import="java.util.ArrayList"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String pageNum = request.getParameter("pageNum");//pageNum을 받음

	if(pageNum == null){//list를 처음 실행하였을때 아무것도 없을때 보여줄 페이지
		pageNum ="1";
	}
	
	BoardDBBean db = BoardDBBean.getInstance();
		//listBoard 메소드를 가지고 와야함(제네릭) 그러기 위해서는 객체생성을 먼저해야함
		//instance를 db객체로 받음.(getInstace하면 instance가 리턴됨)
	ArrayList<BoardBean> boardList = db.listBoard(pageNum);
	//listBoard메소드 호출하여 ArrayList로 받음(리턴타입은 ArrayList<BoardBean>)
	
	int b_id, b_hit, b_level=0;
	String b_name, b_email, b_title, b_content;
	Timestamp b_date;
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<center>
		<h1>게시판에 등록된 글 목록 보기</h1>
		<table width="600">
			<tr>
				<td align="right">
					<a href="write.jsp?pageNum=<%=pageNum%>">글 쓰 기</a>
					<!-- 페이지 목록 번호에 맞게 글 쓰기 이동  -->
				</td>
			</tr>
		</table>
	</center>
	<center>
		<table border="1" width="800" cellspacing="0">
		<!-- <form name="reg_frm" method="post" action="write_ok.jsp"> -->
			<tr height="25">
				<td width="40" align="center">번호</td>
				<td width="450" align="center">글제목</td>
				<td width="120" align="center">작성자</td>
				<td width="130" align="center">작성일</td>
				<td width="60" align="center">조회수</td>
			</tr>
			<%
				for(int i=0; i<boardList.size(); i++){//게시글 갯수만큼 반복
					BoardBean board = boardList.get(i);
					//ArrayList에 담았던 객체들의 값을 가지고 옴
					//가지고 올때는 반대방향으로 (listBoard 메소드에서 보낸 값을 반대로 풀면 됨)
					//포장했던걸 푸는 느낌
					
					//board객체를 하나씩 풀기	
					b_id = board.getB_id();
					b_name = board.getB_name();
					b_email = board.getB_email();
					b_title = board.getB_title();
					b_content = board.getB_content();
					b_date = board.getB_date();
					b_hit = board.getB_hit();
					b_level = board.getB_level();
			%>
			<tr height="25" bgcolor="#f7f7f7"
				onmouseover="this.style.backgroundColor='#eeeeef'"
				onmouseout="this.style.backgroundColor='#f7f7f7'">
				<td align="center"><%= b_id %></td>
				<td>
					<%
						if(b_level > 0){//답글인경우 공백 및 이미지 삽입
							for(int j=0; j<b_level; j++){//여백주는걸 반복한다.(댓글의 갯수에 맞게.(대댓글이면 2번 여백을 줌)
					%>
								&nbsp;
					<%
							}
					%>
							<img src="../images/AnswerLine.gif" width="16" height="16">
					<%
						}
					%>
					<a href="show.jsp?b_id=<%= b_id %>&pageNum=<%= pageNum %>">
					<!-- 쿼리 스트링 사용해서 표현식으로 몇번째에 갈건지 설정 + & 사용하여 페이지 수 작성-->
						<%= b_title %><!-- 새로운 글이나 댓글의 제목  -->
					</a>
				</td>
				<td align="center">
					<a href="mailto:<%= b_email %>">
						<%= b_name %>
					</a>
				</td>
				<td align="center">
					<%-- <%= b_date %> --%>
					<%= sdf.format(b_date) %>
				</td>
				<td align="center">
					<%= b_hit %>
				</td>
			</tr>
			<%
				}
			%>
			<!-- </form> -->
		</table>
		
		<%= BoardBean.pageNumber(4) %>
		<!--  return 받아서 4페이지씩 나눠서 출력  -->
	</center>
</body>
</html>

8.edit.jsp

<%@page import="magic.board.BoardBean"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String pageNum = request.getParameter("pageNum");//pageNum을 받음

	int b_id = Integer.parseInt(request.getParameter("b_id"));
	//b_id값을 받아옴.
	BoardDBBean db = BoardDBBean.getInstance();
	//instance를 db객체로 받음.(객체 생성)
	BoardBean board = db.getBoard(b_id, false);
	//수정할때는 조회수가 올라가지 않도록 false 처리함.
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<script language="JavaScript" src="board.js" charset="utf-8"></script>
</head>
<body>
	<center>
		<h1>글 올 리 기</h1>
		<form name="reg_frm" method="post" action="edit_ok.jsp?b_id=<%= b_id %>&pageNum=<%= pageNum %>">
			<!-- 쿼리스트링 꼬오옥 생각하기 -->
			<table>
				<tr height="30">
					<td width="80">작성자</td>
					<td width="140">
						<input type="text" name="b_name" size="10" maxlength="20" value="<%= board.getB_name() %>">
					</td>
					<td width="80">이메일</td>
					<td width="240">
						<input type="text" name="b_email" size="24" maxlength="50" value="<%= board.getB_email() %>">
					</td>
				</tr>
				<tr height="30">
					<td width="80">글제목</td>
					<td colspan="3" width="460">
						<input type="text" name="b_title" size="55" maxlength="80" value="<%= board.getB_title() %>">
					</td>
				</tr>
				<tr>
					<td colspan="4">
						<textarea name="b_content" rows="10" cols="65">
							 <%= board.getB_content() %>
						</textarea>
					</td>
				</tr>
				<tr height="30">
					<td width="80">&nbsp;&nbsp;</td>
					<td colspan="3" width="460">
						<input type="password" name="b_pwd" size="12" maxlength="12">
					</td>
				</tr>
				<tr height="50" align="center">
					<td colspan="4">
						<input type="button" value="글수정" onclick="check_ok()">&nbsp;
						<input type="reset" value="다시작성">
						<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">&nbsp;
					</td>
				</tr>
			</table>
		</form>
	</center>
</body>
</html>

9.edit_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="magic.board.BoardDBBean" %>
<% 
	request.setCharacterEncoding("UTF-8");  
%> 
<!-- 자바 빈 위에 UTF-8을 넣어야함 안그러면 글자가 깨짐  --> 
<jsp:useBean id="board" class="magic.board.BoardBean"></jsp:useBean>
<!-- 한번에 모든 값들을 가지고옴  -->
<jsp:setProperty property="*" name="board"/>
<!-- 한번에 모든 값들을 받아와서 세팅  -->
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String pageNum = request.getParameter("pageNum");//pageNum을 받음
	
		BoardDBBean db = BoardDBBean.getInstance();
		//getInstance로 BoardDBBean 객체 생성
		int re = db.editBoard(board);
		
//   	String b_pwd = request.getParameter("b_pwd");
		// 비밀번호 editBoard 메소드에서 안받음 board 객체로 받기 때문에 이런식으로 값을 받는거 아님!!! 
		
		
		
//		int re =  db.deleteBoard(b_id, b_pwd);
		//deleteBoard 메소드 호출하여 글번호와 비밀번호 넘김
		
		 
		 
		 if(re == 1){//수정성공햇을 때
//				response.sendRedirect("list.jsp");
				response.sendRedirect("list.jsp?pageNum="+pageNum);
				//쿼리 스트링이 아닌 방식으로 글 목록번호에 맞게 링크 이동함.
			}else if(re == 0){//비밀번호가 틀릴 때
		%>
			<script language ="JavaScript">
				alert("비밀번호가 맞지 않습니다.");
				history.go(-1);
			</script>
		<%
			}else if(re == -1){//수정 실패했을 때
		%>
			<script language ="JavaScript">
				alert("수정에 실패하였습니다.");
				history.go(-1);
			</script>
				
		<%
			}

		%>
</body>
</html>

10.delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="magic.board.BoardDBBean" %>
<% 
	request.setCharacterEncoding("UTF-8");  
%> 
<!-- 자바 빈 위에 UTF-8을 넣어야함 안그러면 글자가 깨짐  --> 
<jsp:useBean id="board" class="magic.board.BoardBean"></jsp:useBean>
<!-- 한번에 모든 값들을 가지고옴  -->
<jsp:setProperty property="*" name="board"/>
<!-- 한번에 모든 값들을 받아와서 세팅  -->
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String pageNum = request.getParameter("pageNum");//pageNum을 받음
	
		BoardDBBean db = BoardDBBean.getInstance();
		//getInstance로 BoardDBBean 객체 생성
		int re = db.editBoard(board);
		
//   	String b_pwd = request.getParameter("b_pwd");
		// 비밀번호 editBoard 메소드에서 안받음 board 객체로 받기 때문에 이런식으로 값을 받는거 아님!!! 
		
		
		
//		int re =  db.deleteBoard(b_id, b_pwd);
		//deleteBoard 메소드 호출하여 글번호와 비밀번호 넘김
		
		 
		 
		 if(re == 1){//수정성공햇을 때
//				response.sendRedirect("list.jsp");
				response.sendRedirect("list.jsp?pageNum="+pageNum);
				//쿼리 스트링이 아닌 방식으로 글 목록번호에 맞게 링크 이동함.
			}else if(re == 0){//비밀번호가 틀릴 때
		%>
			<script language ="JavaScript">
				alert("비밀번호가 맞지 않습니다.");
				history.go(-1);
			</script>
		<%
			}else if(re == -1){//수정 실패했을 때
		%>
			<script language ="JavaScript">
				alert("수정에 실패하였습니다.");
				history.go(-1);
			</script>
				
		<%
			}

		%>
</body>
</html>

11.delete_ok.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@page import="magic.board.BoardDBBean" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>

	<%
		String pageNum = request.getParameter("pageNum");//pageNum을 받음
		
		int b_id = Integer.parseInt(request.getParameter("b_id"));
		//입력 받은 id 값을  onclick으로 넘겨줌
			
		String b_pwd = request.getParameter("b_pwd");
		// 비밀번호도 다시 받음
		
		
		BoardDBBean db = BoardDBBean.getInstance();
		//getInstance로 BoardDBBean 객체 생성
		int re =  db.deleteBoard(b_id, b_pwd);
		//deleteBoard 메소드 호출하여 글번호와 비밀번호 넘김
		
		if(re == 1){//비밀번호가 동일 할 경우
			response.sendRedirect("list.jsp?pageNum="+pageNum);
		}else if(re == 0){//비밀번호가 다른 경우
	%>
			<script language="JavaScript">
				alert("비밀번호가 맞지 않습니다.");
				history.go(-1);//이전페이지로 이동
			</script>
	<%	
		}else if(re == -1){//글번호가 없는 경우(삭제 실패한 경우)
	%>
			<script language="JavaScript">
				alert("삭제에 실패하였습니다.");
				history.go(-1);
			</script>
	<%	
		}
	%>

자료실 PPT.01

파일 업로드의 기본적인 폼 형식

<form name="폼이름" action="데이터전송페이지” method="post" enctype="multipart/form-data">

파일 내용 보기

InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
br.readLine() //한줄 씩 읽음

예제1. 파일 업로드 및 정보 읽기

먼저 위의 사진처럼 fileUpload폴더안의 파일들을 생성

upload.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<form method="post" action="upload.jsp" enctype="multipart/form-data">
	자료 올리기 <br>
	파일 선택하기  : &nbsp;
	<input type="file" name="filesel" size="50">
	<hr><br>
	<input type="submit" value="자료 올리기">
	</form>
</body>
</html>

upload.jsp

<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.InputStream"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<% 
	InputStream is = request.getInputStream();
	BufferedReader br = new BufferedReader(new InputStreamReader(is));	
	String str = null;
	
	while((str = br.readLine()) != null){
%>
		<%= str %>
<%
	}
%>




사진과 같이 작동함

자료실 PPT.02

파일 업로드에 관한 패키지 종류

  1. jspSmartUpload (가장 유명한패키지)//그러나 종료됨
    UPLOAD 패키지(jar)에 포함
    파일의 업로드가 무지 쉽게 구현
  2. MultipartRequest//많이 사용하는 방법
    COS 패키지(jar)에 포함
    jspSmartUpload는 로직자체에 문제점 으로 대체
  3. 아파치 API 이용
    commons-fileupload.jar / commons.io.jar
    편리하고 강력한 API 제공
    *. 오픈 라이브러리 다운로드 사이트
    cos.jar : http://servlets.com/cos
    Commons~.jar : http://commons.apache.org/downloads/

디렉토리 오류 발생

그래서 파일 업로드 설정이 필요함.

  1. D:\space_jsp.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\magicWebApp\fileUpload
    (각각 해당되는 경로로 찾아가기)

    그후 아래와 같이 upload 파일 생성(여기에 파일들이 업로드 될 거임)

그후 사진과 같이 upload.jar 추가

예제2

uploadFile.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<form action="uploadFile.jsp" method="post" enctype="multipart/form-data">
		1. 파일 지정하기 : <input type="file" name="filesel01" size="50">
		2. 파일 지정하기 : <input type="file" name="filesel02" size="50">
		3. 파일 지정하기 : <input type="file" name="filesel03" size="50">
		4. 파일 지정하기 : <input type="file" name="filesel04" size="50">
		5. 파일 지정하기 : <input type="file" name="filesel05" size="50">
		<hr><br>
		<input type="submit" value="자료 올리기">
	</form>
</body>
</html>

uploadFile.jsp

<%@page import="com.jspsmart.upload.File"%>
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	SmartUpload upload = new SmartUpload();//객체생성
	upload.initialize(pageContext);//기본 객체 초기화
	upload.upload();//upload 메소드 호출
	int last = upload.getFiles().getCount();//파일 갯수
	int cnt = 0;
	
	for(int i=0; i<last; i++){//파일 업로드 갯수만큼 반복
		File file = upload.getFiles().getFile(i);	
		
		if(!file.isMissing()){
			file.saveAs("/upload/"+file.getFieldName());//파일 이름을 저장하겠다.
			
			out.print("폼 태그 필드 이름 : "+file.getFieldName()+"<br>");
			out.print("파일 이름 : "+file.getFileName()+"<br>");
			out.print("파일 크기 : "+file.getSize()+"<br>");
			out.print("파일 확장자 : "+file.getFileExt()+"<br>");
			out.print("파일 경로 : "+file.getFilePathName()+"<br>");
			out.print("<br>================================<br>");
			
			cnt++;
		}
	}
	
	out.print(""+cnt+"개를 업로드 했습니다.");
%>

그후 코드 실행하기

확인해보면 upload 파일에 파일들이 올라감

0개의 댓글