⛏️/JSP

[JSP] 16. MVC 패턴 - board ver

defyuil 2023. 10. 23. 11:35

 

start.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>start.jsp</h1>
	
	MVC 프로젝트의 시작지점
	
	<% 
	    System.out.println(" MVC 프로젝트의 시작지점 ");  
	    System.out.println(" * MVC프로젝트에서 실행가능한 유일한 JSP 파일 ");  
	    System.out.println(" * 주소줄에 .jsp 호출X ");  
	
	    // 실행주소 
// 		response.sendRedirect("./member");
		//response.sendRedirect("./member.me");
		//response.sendRedirect("./itwill.me");
		
		//[ JSP 내장객체 request,response ] 
		
		//response.sendRedirect("./MemberJoin.me");
		//response.sendRedirect("./MemberLogin.me");
		//response.sendRedirect("./Main.me");
		//response.sendRedirect("./test.bo");
		response.sendRedirect("./BordeWrite.bo");
	    
	
	%>
	
	
	
	
	
</body>
</html>

 

 

BoardFrontController

package com.itwillbs.board.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;

//@WebServlet("*.bo") : 컨트롤러에 특정 주소 매핑 (서블릿 3.1~ 이후 적용가능)

@WebServlet("*.bo")
public class BoardFrontController extends HttpServlet {

	protected void doProcess(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println(" C : BoardFrontController_doProcess()");

		/***********************1. 가상주소 계산 시작 **************************/
		System.out.println("\n\n C : 1. 가상주소 계산 시작---------------");
		String requestURI = request.getRequestURI();
		System.out.println("\t requestURI : "+requestURI );
		String CTXPath = request.getContextPath();
		System.out.println("\t CTXPath : "+CTXPath );
		String command = requestURI.substring(CTXPath.length());
		System.out.println("\t command : "+command );
		System.out.println(" C : 1. 가상주소 계산 끝------------------");
		/***********************1. 가상주소 계산 끝 **************************/
		
		
		/***********************2. 가상주소 매핑 시작**************************/
		System.out.println("\n\n C : 2. 가상주소 매핑 시작------------------");
		Action action = null;
		ActionForward forward = null;
		
		if(command.equals("/BoardWrite.bo")) {
			System.out.println("\t C : /BoardWrite.bo 호출 ");
			System.out.println("\t C : 패턴 1 - DB사용X, 페이지 이동");
			
			forward = new ActionForward();
			forward.setPath("./board/writeForm.jsp");
			forward.setRedirect(false);			
		}
		else if(command.equals("/BoardWriteAction.bo")) {
			System.out.println("\t C : /BoardWriteAction.bo 호출 ");
			System.out.println("\t C : 패턴 2 - DB사용O, 페이지 이동 ");
			
			// BoardWriteAction() 객체 생성
			action = new BoardWriteAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else if(command.equals("/BoardList.bo")) {
			System.out.println(" C : /BoardList.bo 호출 ");
			System.out.println(" C : 패턴 3 - DB사용O, 페이지 출력");
			
			//  BoardListAction() 객체 생성
			action = new BoardListAction();
			
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else if(command.equals("/BoardContent.bo")) {
			System.out.println(" C : /BoardContent.bo 호출 ");
			System.out.println(" C : 패턴 3 - DB정보사용 O, 화면 출력 ");
			// BoardContentAction() 객체
			action = new BoardContentAction();
			
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else if(command.equals("/BoardUpdate.bo")) {
			System.out.println(" C : /BoardUpdate.bo 호출 ");
			System.out.println(" C : 패턴 3 - DB사용 O,페이지 출력");
			
			// BoardUpdateAction() 객체 
			action = new BoardUpdateAction();
			
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else if(command.equals("/BoardUpdateProAction.bo")) {
				System.out.println(" C : /BoardUpdateProAction.bo 호출 ");
				System.out.println(" C : 패턴 2 - DB사용O, 페이지이동");
				
				// BoardUpdateProAction()객체 생성
				action = new BoardUpdateProAction();
				
				try {
					forward = action.execute(request, response);
				} catch (Exception e) {
					e.printStackTrace();
				}
		}
		else if(command.equals("/BoardDelete.bo")) {
			System.out.println(" C : /BoardDelete.bo  호출 ");
			System.out.println(" C : 패턴 1 -DB사용X, 페이지이동 ");
			
			forward = new ActionForward();
			forward.setPath("./board/deleteForm.jsp");
			forward.setRedirect(false);
		}
		else if(command.equals("/BoardDeleteAction.bo")) {
			System.out.println(" C : /BoardDeleteAction.bo 호출 ");
			System.out.println(" C : 패턴 2 - DB사용O, 페이지 이동");
			
			// BoardDeleteAction() 객체
			action = new BoardDeleteAction();
			
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else if(command.equals("/BoardReWrite.bo")) {
			System.out.println(" C : /BoardReWrite.bo 호출 ");
			System.out.println(" C : 패턴 1 - DB사용X,페이지 이동 ");
			
			forward = new ActionForward();
			forward.setPath("./board/reWriteForm.jsp");
			forward.setRedirect(false);			
		}
		else if(command.equals("/BoardReWriteAction.bo")) {
			System.out.println(" C : /BoardReWriteAction.bo 호출 ");
			System.out.println(" C :  패턴 2 - DB사용O, 페이지 이동 ");
			
			// BoardReWriteAction() 객체 생성
			action = new BoardReWriteAction();
			
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else if(command.equals("/BoardFileWrite.bo")) {
			System.out.println(" C : /BoardFileWrite.bo 호출 ");
			System.out.println(" C : 패턴 1 - DB사용X, 페이지이동");
			
			forward = new ActionForward();
			forward.setPath("./board/fWriteForm.jsp");
			forward.setRedirect(false);			
		}
		else if(command.equals("/BoardFileWriteAction.bo")) {
			System.out.println(" C : /BoardFileWriteAction.bo 호출 ");
			System.out.println(" C : 패턴 2 - DB사용O,페이지 이동 ");
			
			// BoardFileWriteAction() 객체
			action = new BoardFileWriteAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
		System.out.println(" C : 2. 가상주소 매핑 끝------------------");
		/***********************2. 가상주소 매핑 끝**************************/
		
		/***********************3. 가상주소 이동 시작**************************/
		System.out.println("\n\n C : 3. 가상주소 이동 시작------------------");
		if(forward != null) {
			if(forward.isRedirect()) { // true
				System.out.println("\t C : 이동주소 : "+forward.getPath());
				System.out.println("\t C : 이동방법 : sendRedirect() 방식 ");
				response.sendRedirect(forward.getPath());
			}else { // false
				System.out.println("\t C : 이동주소 : "+forward.getPath());
				System.out.println("\t C : 이동방법 : forward() 방식 ");
				RequestDispatcher dis = 
						request.getRequestDispatcher(forward.getPath());
				dis.forward(request, response);
			}			
		}		
		System.out.println(" C : 3. 가상주소 이동 끝------------------");
		/***********************3. 가상주소 이동 끝**************************/
		
	
	}//doProcess
	
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println("\n\n C : BoardFrontController_doGET()");
		doProcess(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println("\n\n C : BoardFrontController_doPOST()");
		doProcess(request, response);
	}	

}

 

 

학원 공유 폴더 들어가서

다운하고 압축 해제 ㄱㄱ

 

 

member 제외하고  MVC7 프로젝트 웹앱 폴더에 복사 붙여 넣기

member는 폴더 따로 들어가서 파일만 복사 붙여넣기

 

 

 

 

center에 있는 notice.html을 board 폴더로 복사 notice 파일을 writeForm에 복붙 한다

 

writeForm

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		<header>
			<div id="login">
				<a href="../member/login.html">login</a> | <a href="../member/join.html">join</a>
			</div>
			<div class="clear"></div>
			<!-- 로고들어가는 곳 -->
			<div id="logo">
				<img src="./images/logo.gif" width="265" height="62" alt="Fun Web">
			</div>
			<!-- 로고들어가는 곳 -->
			<nav id="top_menu">
				<ul>
					<li><a href="./Main.me">HOME</a></li>
					<li><a href="../company/welcome.html">COMPANY</a></li>
					<li><a href="#">SOLUTIONS</a></li>
					<li><a href="./BoardWrite.bo">ITWILL 게시판</a></li>
					<li><a href="#">CONTACT US</a></li>
				</ul>
			</nav>
		</header>
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<nav id="sub_menu">
			<ul>
				<li><a href="#">Notice</a></li>
				<li><a href="#">Public News</a></li>
				<li><a href="#">Driver Download</a></li>
				<li><a href="#">Service Policy</a></li>
			</ul>
		</nav>
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->
		<form action="./BoardWriteAction.bo" method="post">
			<article>
				<h1>아이티윌 소식 게시판</h1>
				<table id="notice">
					<tr>
						<th class="ttitle">게시판 글쓰기</th>
						<th class="twrite"></th>
					</tr>
					<tr>
						<td>글쓴이</td>
						<td><input type="text" name="name"></td>
					</tr>
					<tr>
						<td>제목</td>
						<td><input type="text" name="subject"></td>
					</tr>
					<tr>
						<td>내용</td>
						<td><input type="text" name="content"></td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pass"></td>
					</tr>
				</table>
				<div id="table_search">
					<input type="submit" value="글쓰기" class="btn">
				</div>
				<div class="clear"></div>
				<div id="page_control"></div>
			</article>
		</form>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

 

 

board.db에 DAO, DTO 클래스 생성

 

 

BoardDTO 

package com.itwillbs.board.db;

import java.sql.Date;

public class BoardDTO {
	private int bno;
	private String name;
	private String subject;
	private String content;
	private String pass;
	
	private int readcount;
	private int re_ref;
	private int re_lev;
	private int re_seq;
	
	private Date date;
	private String ip;
	private String file;
	
	
	// alt shift s + r
	public int getBno() {
		return bno;
	}
	public void setBno(int bno) {
		this.bno = bno;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public int getReadcount() {
		return readcount;
	}
	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}
	public int getRe_ref() {
		return re_ref;
	}
	public void setRe_ref(int re_ref) {
		this.re_ref = re_ref;
	}
	public int getRe_lev() {
		return re_lev;
	}
	public void setRe_lev(int re_lev) {
		this.re_lev = re_lev;
	}
	public int getRe_seq() {
		return re_seq;
	}
	public void setRe_seq(int re_seq) {
		this.re_seq = re_seq;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public String getFile() {
		return file;
	}
	public void setFile(String file) {
		this.file = file;
	}
	
	// alt shfit s + s
	@Override
	public String toString() {
		return "BoardDTO [bno=" + bno + ", name=" + name + ", subject=" + subject + ", content=" + content + ", pass="
				+ pass + ", readcount=" + readcount + ", re_ref=" + re_ref + ", re_lev=" + re_lev + ", re_seq=" + re_seq
				+ ", date=" + date + ", ip=" + ip + ", file=" + file + "]";
	}
	
}

 

 

 

BoardDAO

package com.itwillbs.board.db;

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

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

// ctrl + shift + O   import 정리

public class BoardDAO {

	// 공통 변수 선언
	private Connection con = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;
	private String sql = "";

	// 공통) 디비 연결하기(CP)
	private Connection getCon() throws Exception {

		Context initCTX = new InitialContext();
		DataSource ds = (DataSource) initCTX.lookup("java:comp/env/jdbc/mvc");
		con = ds.getConnection();

		System.out.println(" DAO : 디비연결 성공!! ");
		System.out.println(" DAO : " + con);
		return con;
	}

	// 공통) 디비 자원해제
	public void CloseDB() {
		try {
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			if (con != null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// 글쓰기 메서드 - insertBoard(BoardDTO)
	public void insertBoard(BoardDTO dto) {
		int bno = 0;

		try {
			// 1.2. 디비연결
			con = getCon();

			// * bno 계산하기 => 1부터 1씩 증가
			// 3. sql구문(select) & pstmt 객체
			sql = "select max(bno) from itwill_board";
			pstmt = con.prepareStatement(sql);
			// 4. sql 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리
			if (rs.next()) {
				// bno = rs.getInt("max(bno)")+1;
				bno = rs.getInt(1) + 1;
			}

			System.out.println(" DAO : 글번호 :" + bno);

			// 3. sql 구문(insert) & pstmt 객체
			sql = "insert into itwill_board(bno,name,pass,subject,content,readcount,"
					+ "re_ref,re_lev,re_seq,date,ip,file) values(?,?,?,?,?,?,?,?,?,now(),?,?)";
			pstmt = con.prepareStatement(sql);

			pstmt.setInt(1, bno);
			pstmt.setString(2, dto.getName());
			pstmt.setString(3, dto.getPass());
			pstmt.setString(4, dto.getSubject());
			pstmt.setString(5, dto.getContent());

			pstmt.setInt(6, 0); // 조회수 0
			pstmt.setInt(7, bno); // 그룹번호는 글번호와 동일(일반글)
			pstmt.setInt(8, 0); // re_lev 0
			pstmt.setInt(9, 0); // re_seq 0

			pstmt.setString(10, dto.getIp());
			pstmt.setString(11, dto.getFile());

			// 4. sql 실행
			pstmt.executeUpdate();

			System.out.println(" DAO :" + bno + "번 글쓰기 완료! ");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}

	}
	// 글쓰기 메서드 - insertBoard(BoardDTO)

	// 글 개수 계산 메서드 - getBoardCount()
	public int getBoardCount() {
		int result = 0;

		try {
			// 1. 드라이버 로드
			// 2. 디비 연결
			con = getCon();

			// 3. sql 작성(select) & pstmt 객체
			sql = "select count(*) from itwill_board";
			pstmt = con.prepareStatement(sql);

			// 4. sql 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리 - 개수를 저장
			if (rs.next()) {
				result = rs.getInt(1);
				// result = rs.getInt("count(*)");
			}
			System.out.println(" DAO : 개수 " + result + "개");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}

		return result;
	}
	// 글 개수 계산 메서드 - getBoardCount()
	
	// 글 개수 계산 메서드 - getBoardCount(search)
	public int getBoardCount(String search) {
		int result = 0;
		
		try {
			// 1. 드라이버 로드
			// 2. 디비 연결
			con = getCon();
			
			// 3. sql 작성(select) & pstmt 객체
			sql = "select count(*) from itwill_board "
					+ "where subject like ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, "%"+search+"%");
			
			// 4. sql 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리 - 개수를 저장
			if (rs.next()) {
				result = rs.getInt(1);
				// result = rs.getInt("count(*)");
			}
			System.out.println(" DAO : 개수 " + result + "개");
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}
		
		return result;
	}
	// 글 개수 계산 메서드 - getBoardCount(search)

	// 글 정보 목록을 가져오는 메서드 - getBoardList(int startRow,int pageSize)
	public ArrayList getBoardList(int startRow, int pageSize) {
		// 글정보를 저장하는 배열
		ArrayList boardList = new ArrayList();
		try {
			// 디비연결정보
			// 1. 드라이버 로드
			// 2. 디비 연결
			con = getCon();
			// 3. SQL 작성(select) & pstmt 객체
			// sql = "select * from itwill_board order by bno desc limit ?,?";
			sql = "select * from itwill_board order by re_ref desc,re_seq asc limit ?,?";
			pstmt = con.prepareStatement(sql);
			// ????
			pstmt.setInt(1, startRow - 1); // 시작행번호-1
			pstmt.setInt(2, pageSize); // 개수
			// 4. SQL 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리
			// 글정보 전부 가져오기
			// BoardBean 객체 여러개 => ArrayList 저장
			while (rs.next()) {
				// 글 하나의 정보 => BoardBean저장
				BoardDTO bb = new BoardDTO();

				bb.setBno(rs.getInt("bno"));
				bb.setContent(rs.getString("content"));
				bb.setDate(rs.getDate("date"));
				bb.setFile(rs.getString("file"));
				bb.setIp(rs.getString("ip"));
				bb.setName(rs.getString("name"));
				bb.setPass(rs.getString("pass"));
				bb.setRe_ref(rs.getInt("re_ref"));
				bb.setRe_lev(rs.getInt("re_lev"));
				bb.setRe_seq(rs.getInt("re_seq"));
				bb.setReadcount(rs.getInt("readcount"));
				bb.setSubject(rs.getString("subject"));

				// 글 하나의 정보를 배열의 한칸에 저장
				boardList.add(bb);

			} // while

			System.out.println(" DAO : 게시판 글 목록 조회성공! ");
			System.out.println(" DAO : " + boardList.size());

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}

		return boardList;
	}
	// 글 정보 목록을 가져오는 메서드 -getBoardList(int startRow,int pageSize)
	
	// 글 정보 목록을 가져오는 메서드 - getBoardList(int startRow,int pageSize,String search)
	public ArrayList getBoardList(int startRow, int pageSize,String search) {
		// 글정보를 저장하는 배열
		ArrayList boardList = new ArrayList();
		try {
			// 디비연결정보
			// 1. 드라이버 로드
			// 2. 디비 연결
			con = getCon();
			// 3. SQL 작성(select) & pstmt 객체
			// sql = "select * from itwill_board order by bno desc limit ?,?";
			sql = "select * from itwill_board "
					+ "where subject like ? "
					+ "order by re_ref desc,re_seq asc "
					+ "limit ?,?";
			pstmt = con.prepareStatement(sql);
			// ????
			pstmt.setString(1, "%"+search+"%"); // %검색어%
			pstmt.setInt(2, startRow - 1); // 시작행번호-1
			pstmt.setInt(3, pageSize); // 개수
			// 4. SQL 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리
			// 글정보 전부 가져오기
			// BoardBean 객체 여러개 => ArrayList 저장
			while (rs.next()) {
				// 글 하나의 정보 => BoardBean저장
				BoardDTO bb = new BoardDTO();
				
				bb.setBno(rs.getInt("bno"));
				bb.setContent(rs.getString("content"));
				bb.setDate(rs.getDate("date"));
				bb.setFile(rs.getString("file"));
				bb.setIp(rs.getString("ip"));
				bb.setName(rs.getString("name"));
				bb.setPass(rs.getString("pass"));
				bb.setRe_ref(rs.getInt("re_ref"));
				bb.setRe_lev(rs.getInt("re_lev"));
				bb.setRe_seq(rs.getInt("re_seq"));
				bb.setReadcount(rs.getInt("readcount"));
				bb.setSubject(rs.getString("subject"));
				
				// 글 하나의 정보를 배열의 한칸에 저장
				boardList.add(bb);
				
			} // while
			
			System.out.println(" DAO : 게시판 글 목록 조회성공! ");
			System.out.println(" DAO : " + boardList.size());
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}
		
		return boardList;
	}
	// 글 정보 목록을 가져오는 메서드 -getBoardList(int startRow,int pageSize,String search)

	// 특정 글 조회수 1증가() - updateReadcount(bno);
	public void updateReadcount(int bno) {
		try {
			//1.2. 디비연결
			con = getCon();
			//3. sql 구문작성(update) & pstmt 객체
			sql = "update itwill_board set readcount = readcount + 1 "
					+ "where bno = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, bno);
			//4. sql 실행
			pstmt.executeUpdate();
			System.out.println(" DAO : 글 조회수 1증가 완료! ");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}		
	}
	// 특정 글 조회수 1증가() - updateReadcount(bno);
	
	// 특정 글의 정보를 가져오기() - getBoard(bno)
	public BoardDTO getBoard(int bno) {
		BoardDTO dto = null;
		
		try {
			// 1.2. 디비연결
			con = getCon();
			// 3. sql 구문 작성(select) & pstmt 객체
			sql = "select * from itwill_board "
					+ "where bno = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, bno);
			// 4. sql 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리 (rs -> dto)
			if(rs.next()) {
				dto = new BoardDTO();
				
				dto.setBno(rs.getInt("bno"));
				dto.setContent(rs.getString("content"));
				dto.setDate(rs.getDate("date"));
				dto.setFile(rs.getString("file"));
				dto.setIp(rs.getString("ip"));
				dto.setName(rs.getString("name"));
				dto.setPass(rs.getString("pass"));
				dto.setRe_ref(rs.getInt("re_ref"));
				dto.setRe_lev(rs.getInt("re_lev"));
				dto.setRe_seq(rs.getInt("re_seq"));
				dto.setReadcount(rs.getInt("readcount"));
				dto.setSubject(rs.getString("subject"));
			}// if
			
			System.out.println(" DAO : 글정보 조회성공!");
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}
		
		return dto;
	}
	// 특정 글의 정보를 가져오기() - getBoard(bno)
	
	// 특정 글정보 수정하는 메서드 -updateBoard(bdto)
	public int updateBoard(BoardDTO bdto) {
		int result = -1; // -1(글정보없음,에러)  0(비밀번호 오류)  1(정상처리)
		
		try {
			// 1.2. 디비연결
			con = getCon();
			// 3. sql 작성 & pstmt 객체
			sql = "select pass from itwill_board where bno = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, bdto.getBno());
			// 4. sql 실행
			rs = pstmt.executeQuery();
			// 5. 데이터 처리
			if(rs.next()) {
				if(bdto.getPass().equals(rs.getString("pass"))) {
					// 게시판 정보 수정
					// 3.sql 작성 & pstmt 객체
					sql = "update itwill_board set name=?,subject=?,content=? where bno = ?";
					pstmt = con.prepareStatement(sql);
					
					pstmt.setString(1, bdto.getName());
					pstmt.setString(2, bdto.getSubject());
					pstmt.setString(3, bdto.getContent());
					pstmt.setInt(4, bdto.getBno());
					
					// 4. sql 구문 실행
					result = pstmt.executeUpdate();
					// result = 1;
				}else {
					// 게시판 비밀번호 오류
					result = 0;
				}				
			}else {
				// 게시판 글 없음
				result = -1;
			}
			
			System.out.println(" DAO : 게시판 정보를 수정완료! ("+result+")");
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}
		
		return result;
	}
	// 특정 글정보 수정하는 메서드 -updateBoard(bdto)

	// 특정 글 삭제 메서드-deleteBoard(BoardDTO bdto) 
	public int deleteBoard(BoardDTO bdto) {
		int result = -1;
		
		try {
			// 1.2. 디비연결
			con = getCon();
			// 3. sql 구문 & pstmt 객체 
			sql = "select pass from itwill_board where bno = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, bdto.getBno());
			//4. sql 실행
			rs = pstmt.executeQuery();
			// 5.데이터 처리 
			if(rs.next()) {
				if(bdto.getPass().equals(rs.getString("pass"))) {
					// 삭제
					// 3. sql 작성
					sql = "delete from itwill_board where bno=?";
					pstmt = con.prepareStatement(sql);
					
					pstmt.setInt(1, bdto.getBno());
					// 4. sql 실행
					result = pstmt.executeUpdate();
				}else {
					result = 0;
				}
			}else {
				result = -1;
			}
			System.out.println(" DAO : 글 삭제 완료! ("+result+")");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}
		
		return result;
	}
	// 특정 글 삭제 메서드-deleteBoard(BoardDTO bdto) 
	
	// 답글 쓰기 - reInsertBoard(dto)
	public void reInsertBoard(BoardDTO dto) {
		int bno = 0;
		try {
			// 1. 글번호 계산
			//1.2. 디비연결
			con = getCon();
			//3. sql 작성 & pstmt 객체
			sql = "select max(bno) from itwill_board";
			pstmt = con.prepareStatement(sql);
			//4. sql 실행
			rs = pstmt.executeQuery();
			//5. 데이터 처리
			if(rs.next()) {
				//bno = rs.getInt(1) + 1;
				bno = rs.getInt("max(bno)") + 1;
			}
			
			System.out.println(" DAO : 답글번호 : "+bno);
			
			// 2. 답글 순서 재배치
			// 3. sql 작성(update) & pstmt 객체
			sql = "update itwill_board set re_seq = re_seq + 1 "
					+ "where re_ref = ? and re_seq > ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, dto.getRe_ref());
			pstmt.setInt(2, dto.getRe_seq());
			
			// 4. sql 실행(update)
			int tmp = pstmt.executeUpdate();
			
			if(tmp != 0) {
				System.out.println(" DAO : 답글 순서 재배치 완료! ");
			}
			
			// 3. 답글 작성 (insert)
			// 3.sql 작성 & pstmt 객체
			sql = "insert into itwill_board "
					+ "values(?,?,?,?,?,?,?,?,?,now(),?,?)";
			pstmt = con.prepareStatement(sql);
			
			pstmt.setInt(1, bno);
			pstmt.setString(2, dto.getName());
			pstmt.setString(3, dto.getPass());
			pstmt.setString(4, dto.getSubject());
			pstmt.setString(5, dto.getContent());
			pstmt.setInt(6, 0);  //글 작성시 항상 0
			pstmt.setInt(7, dto.getRe_ref());  // 원글ref == 답글ref
			pstmt.setInt(8, dto.getRe_lev()+1);  // 원글lev + 1  
			pstmt.setInt(9, dto.getRe_seq()+1);  // 원글seq + 1
			pstmt.setString(10, dto.getIp());
			pstmt.setString(11, dto.getFile());
			
			//4. sql 실행
			pstmt.executeUpdate();
			
			System.out.println(" DAO : 답글 작성 완료! ");
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CloseDB();
		}
	}
	// 답글 쓰기 - reInsertBoard(dto)
	
	
}// DAO

 


 

 

BoardWriteAction

package com.itwillbs.board.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;

public class BoardWriteAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("\t M : BoardWriteAction_execute() 호출 ");
		
		// 한글 처리 (생략 -> 필터 설정)
		// request.setCharacterEncoding("UTF-8");
		
		// 전달정보 저장
		//		String name = request.getParameter("name");
		//		String subject = request.getParameter("subject");
		//		String content = request.getParameter("content");
		//		String pass = request.getParameter("pass");
		// DTO객체에 저장
		BoardDTO dto = new BoardDTO();
		dto.setName(request.getParameter("name"));
		dto.setSubject(request.getParameter("subject"));
		dto.setContent(request.getParameter("content"));
		dto.setPass(request.getParameter("pass"));
		
		dto.setIp(request.getRemoteAddr());
		
		System.out.println("\t M : "+dto);
		
		// BoardDAO 객체 생성 - 글쓰기 수행 메서드
		BoardDAO bdao = new BoardDAO();
		bdao.insertBoard(dto);
		
		// 페이지 이동준비		
		ActionForward forward = new ActionForward();
		forward.setPath("./BoardList.bo");
		forward.setRedirect(true);
		
		return forward;
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		 <jsp:include page="../inc/top.jsp"/>
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->
		<form action="./BoardWriteAction.bo" method="post">
			<article>
				<h1>아이티윌 소식 게시판</h1>
				<table id="notice">
					<tr>
						<th class="ttitle">게시판 글쓰기</th>
						<th class="twrite"></th>
					</tr>
					<tr>
						<td>글쓴이</td>
						<td><input type="text" name="name"></td>
					</tr>
					<tr>
						<td>제목</td>
						<td><input type="text" name="subject"></td>
					</tr>
					<tr>
						<td>내용</td>
						<td><input type="text" name="content"></td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pass"></td>
					</tr>
				</table>
				<div id="table_search">
					<input type="submit" value="글쓰기" class="btn">
				</div>
				<div class="clear"></div>
				<div id="page_control"></div>
			</article>
		</form>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

 

BoradContentAction

package com.itwillbs.board.action;

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;

public class BoardContentAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardContentAction_execute 호출 ");
		
		// 전달정보 저장 (bno,pageNum,search(생략))
		int bno = Integer.parseInt(request.getParameter("bno"));
		String pageNum = request.getParameter("pageNum");
		
		BoardDAO bdao = new BoardDAO(); 
		// BoardDAO 객체  - 특정 글 조회수 1증가()
		bdao.updateReadcount(bno);
		//      "         - 특정 글의 정보를 가져오는()
		BoardDTO dto = bdao.getBoard(bno);
		
		// 글정보를 request 영역에 저장
		request.setAttribute("dto", dto);
		// pageNum값도 request 영역에 저장 (view 페이지에서 리스트갈때 사용)
		request.setAttribute("pageNum",pageNum);
		
		// 페이지 이동준비 (./board/content.jsp)
		ActionForward forward = new ActionForward();
		forward.setPath("./board/content.jsp");
		forward.setRedirect(false);
		
		return forward;
	}

}

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		<jsp:include page="../inc/top.jsp" />
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->

		<article>
			<h1>아이티윌 소식 게시판</h1>
			<table id="notice">
				<tr>
					<th class="ttitle">게시판 본문내용</th>
					<th class="twrite"></th>
				</tr>
				<tr>
					<td>글번호</td>
					<td>${dto.bno }</td>
				</tr>
				<tr>
					<td>글쓴이</td>
					<%-- <td><input type="text" name="name" value="${dto.name }" readonly></td> --%>
					<td>${dto.name }</td>
				</tr>
				<tr>
					<td>제목</td>
					<td>${dto.subject }</td>
				</tr>
				<tr>
					<td>내용</td>
					<td>${dto.content }</td>
				</tr>
				<tr>
					<td>조회수</td>
					<td>${dto.readcount }</td>
				</tr>
				<tr>
					<td>첨부파일</td>
					<td>
					  <a href="./upload/${dto.file }" download>${dto.file }</a>
					</td>
				</tr>
				<tr>
					<td>작성일</td>
					<td>${dto.date }</td>
				</tr>


			</table>
			<div id="table_search">
				<input type="button" value="수정하기" class="btn" 
				       onclick=" location.href='./BoardUpdate.bo?bno=${dto.bno}&pageNum=${pageNum }'; ">
				<input type="button" value="삭제하기" class="btn"  
				       onclick="location.href='./BoardDelete.bo?bno=${dto.bno}&pageNum=${pageNum }';">
				<input type="button" value="답글쓰기" class="btn" 
				        onclick=" location.href='./BoardReWrite.bo?bno=${dto.bno}&pageNum=${pageNum }&re_ref=${dto.re_ref}&re_lev=${dto.re_lev}&re_seq=${dto.re_seq }'; ">
				<input type="button" value="목록으로" class="btn" 
				       onclick=" location.href='./BoardList.bo?pageNum=${pageNum}'; ">
			</div>
			<div class="clear"></div>
			<div id="page_control"></div>
		</article>

		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

BoardDeleteAction

package com.itwillbs.board.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;
import com.itwillbs.util.JSMoveFunction;

public class BoardDeleteAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardDeleteAction_execute() 호출 ");
		
		// 전달정보 저장(bno,pass,pageNum)
		BoardDTO bdto = new BoardDTO();
		bdto.setBno(Integer.parseInt(request.getParameter("bno")));
		bdto.setPass(request.getParameter("pass"));
		
		String pageNum = request.getParameter("pageNum");
		
		// 디비에 가서 해당 글정보를 삭제 
		BoardDAO bdao = new BoardDAO();
		int result = bdao.deleteBoard(bdto);
		
		if(result == 0) {
			JSMoveFunction.alertBack(response, "비밀번호 오류!");
			return null;
		}
		
		if(result == -1) {
			JSMoveFunction.alertBack(response, "게시판 글없음!");
			return null;
		}
		
		JSMoveFunction.alertLocation(response, "삭제 완료!", "./BoardList.bo?pageNum="+pageNum);
		
		return null;
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		 <jsp:include page="../inc/top.jsp"/>
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->
		<form action="./BoardDeleteAction.bo?pageNum=${param.pageNum }" method="post">
			<input type="hidden" name="bno" value="${param.bno }">
		
			<article>
				<h1>아이티윌 소식 게시판</h1>
				<table id="notice">
					<tr>
						<th class="ttitle">게시판 글삭제하기</th>
						<th class="twrite"></th>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pass"></td>
					</tr>
				</table>
				<div id="table_search">
					<input type="submit" value="글 삭제하기" class="btn">
				</div>
				<div class="clear"></div>
				<div id="page_control"></div>
			</article>
		</form>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

BoardFileWriteAction

package com.itwillbs.board.action;

import java.io.File;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;

public class BoardFileWriteAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardFileWriteAction_execute() 호출 ");
		
		// upload 가상의 폴더 생성
		String realPath = request.getRealPath("/upload");
		System.out.println(" M : realPath :"+realPath);
		// 첨부파일의 크기 설정 (5MB)
		int maxSize = 5 * 1024 * 1024; 
		
		// 첨부파일업로드 => 객체 생성
		MultipartRequest multi =
				new MultipartRequest(
						request,
						realPath,
						maxSize,
						"UTF-8",
						new DefaultFileRenamePolicy()
						);
		
		System.out.println(" M : 파일업로드 성공! ");
		
//		File file = new File(realPath+"/"+multi.getFilesystemName("file"));
//		file.delete();
		
		// 나머지 정보저장
		BoardDTO dto = new BoardDTO();
		dto.setName(multi.getParameter("name"));
		dto.setSubject(multi.getParameter("subject"));
		dto.setContent(multi.getParameter("content"));
		dto.setPass(multi.getParameter("pass"));
		dto.setFile(multi.getFilesystemName("file"));
		dto.setIp(request.getRemoteAddr());
		
		// BoardDAO 객체 -> 첨부파일 저장
		BoardDAO bdao = new BoardDAO();
		bdao.insertBoard(dto);
		
		// 페이지 이동
		ActionForward forward = new ActionForward();
		forward.setPath("./BoardList.bo");
		forward.setRedirect(true);		
		return forward;
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		 <jsp:include page="../inc/top.jsp"/>
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->
		<form action="./BoardFileWriteAction.bo" method="post" enctype="multipart/form-data" >
			<article>
				<h1>아이티윌 소식 게시판</h1>
				<table id="notice">
					<tr>
						<th class="ttitle">게시판 글쓰기</th>
						<th class="twrite">(첨부파일)</th>
					</tr>
					<tr>
						<td>글쓴이</td>
						<td><input type="text" name="name"></td>
					</tr>
					<tr>
						<td>제목</td>
						<td><input type="text" name="subject"></td>
					</tr>
					<tr>
						<td>내용</td>
						<td><input type="text" name="content"></td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pass"></td>
					</tr>
					<tr>
						<td>첨부파일</td>
						<td><input type="file" name="file" accept=".pdf"></td>
					</tr>
				</table>
				<div id="table_search">
					<input type="submit" value="글쓰기" class="btn">
				</div>
				<div class="clear"></div>
				<div id="page_control"></div>
			</article>
		</form>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

 

BoardListAction

package com.itwillbs.board.action;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;

public class BoardListAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardListAction_execute() 실행 ");
		
		// 전달정보 검색어 정보 저장
		String search = request.getParameter("search");
		System.out.println(" M : 검색어 : "+search );
		
		// 기존에 저장된 글정보를 가져와서 화면에 출력
		BoardDAO bdao = new BoardDAO();
		
		int count = 0;
		if(search == null) { // 검색어 X
			System.out.println(" M : 검색어 없음! ");
			count = bdao.getBoardCount();
		}else { // 검색어 O - 검색결과O/X 
			System.out.println(" M : 검색어 있음! ("+search+")");
			count = bdao.getBoardCount(search);
		}		
		System.out.println(" M : 글 개수 : " + count);

		/********************* 페이징처리 1 *******************/
		// 한 페이지에 출력할 글의 개수 설정
		int pageSize = 3;

		// 현 페이지가 몇페이지 인지확인
		String pageNum = request.getParameter("pageNum");
		if (pageNum == null) {
			pageNum = "1";
		}

		// 시작행 번호 계산하기
		// 1 11 21 31 41 .....
		int currentPage = Integer.parseInt(pageNum);
		int startRow = (currentPage - 1) * pageSize + 1;

		// 끝행 번호 계산
		// 10 20 30 40 50 .....
		int endRow = currentPage * pageSize;

		/********************* 페이징처리 1 *******************/

		// DAO - 글정보 모두(list)를 가져오는 메서드 호출
		ArrayList boardList = null;
		if (count > 0 && search == null) {
			boardList = bdao.getBoardList(startRow, pageSize);
		}else if(count > 0 && search != null ) {
			boardList = bdao.getBoardList(startRow, pageSize,search);
		}else {
			// 글이 없는경우
		}
		System.out.println(" M : size :" + boardList.size());

		// 리스트를 출력 => 연결된 뷰페이지에서 출력하도록 정보 전달
		request.setAttribute("boardList", boardList);

		/******************* 페이징처리 2 *********************/
		// 페이지 블럭(1,2,3,.....,10) 생성

		// 전체 페이지수
		// 글 15 / 페이지당 10 => 2개
		// 글 78 / 페이지당 10 => 8개
		int pageCount = count / pageSize + (count % pageSize == 0 ? 0 : 1);

		// 한 화면에 보여줄 페이지 블럭개수
		int pageBlock = 3;

		// 페이지 블럭의 시작번호 계산
		// 1페이지 => 1 , 11페이지 => 11
		// 5페이지 => 1 , 25페이지 => 21
		int startPage = ((currentPage - 1) / pageBlock) * pageBlock + 1;

		// 페이지 블럭의 마지막번호 계산
		// 1페이지 => 10, 13페이지 => 20
		int endPage = startPage + pageBlock - 1;
		// 페이지의 글이 없는경우
		if (endPage > pageCount) {
			endPage = pageCount;
		}

		/******************* 페이징처리 2 *********************/

		// 페이징 처리에 필요한 정보 모두를 request영역에 저장해서 전달
		request.setAttribute("pageNum", pageNum);
		request.setAttribute("count", count);
		request.setAttribute("pageCount", pageCount);
		request.setAttribute("pageBlock", pageBlock);
		request.setAttribute("startPage", startPage);
		request.setAttribute("endPage", endPage);
		
		// 페이지 이동준비 
		ActionForward forward = new ActionForward();
		forward.setPath("./board/boardList.jsp");
		forward.setRedirect(false);

		return forward;
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
	 	<jsp:include page="../inc/top.jsp"/>		
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<%-- ${requestScope.boardList } --%>
		<!-- 게시판 -->
		<article>
			<h1>Notice</h1>
			<table id="notice">
				<tr>
					<th class="tno">No.</th>
					<th class="ttitle">Title</th>
					<th class="twrite">Writer</th>
					<th class="tdate">Date</th>
					<th class="tread">Read</th>
				</tr>
				
				<c:forEach var="dto" items="${boardList }">
					<tr>
						<td>${dto.bno }</td>
						
						<td class="left">
						   <c:if test="${dto.re_lev > 0}">
							   <img src="./images/board/level.gif" width="${dto.re_lev * 10 }">
							   <img src="./images/board/re.gif">
						   </c:if>
						   <a href="./BoardContent.bo?bno=${dto.bno }&pageNum=${pageNum}&search=${param.search}">
						   	  ${dto.subject}
						   </a>
						   <c:if test="${ !empty dto.file }">
						   		<img src="./images/board/save.png" width="15">
						   </c:if>
						</td>
						
						<td>${dto.name }</td>
						<td class="cdate">${dto.date }</td>
						<td>${dto.readcount }</td>
					</tr>
				</c:forEach>
				
			</table>
			
			<div id="table_search">
			   <form action="./BoardList.bo" method="get">
				<input type="text" name="search" class="input_box">
				<input type="submit" value="search" class="btn">
			   </form>
			</div>
			
			<div class="clear"></div>
			<div id="page_control">
				<c:if test="${startPage > pageBlock }">
					<a href="./BoardList.bo?pageNum=${startPage-pageBlock }&search=${param.search}">Prev</a>
				</c:if>
				
				<c:forEach var="i" begin="${startPage }" end="${endPage }" step="1">
					<a href="./BoardList.bo?pageNum=${i }&search=${param.search}">${i }</a>
				</c:forEach>
				
				<c:if test="${endPage < pageCount }">
					<a href="./BoardList.bo?pageNum=${startPage+pageBlock }&search=${param.search}">Next</a>
				</c:if>
			</div>
		</article>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->	
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

 

BoardReWriteAction

package com.itwillbs.board.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;

public class BoardReWriteAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardReWriteAction_execute() 호출 ");
		
		// 한글처리(필터) 생략
		// 전달정보 저장 (BoardDTO)
		BoardDTO dto = new BoardDTO();
		dto.setBno(Integer.parseInt(request.getParameter("bno")));
		dto.setSubject(request.getParameter("subject"));
		dto.setName(request.getParameter("name"));
		dto.setContent(request.getParameter("content"));
		dto.setPass(request.getParameter("pass"));
		dto.setRe_ref(Integer.parseInt(request.getParameter("re_ref")));
		dto.setRe_lev(Integer.parseInt(request.getParameter("re_lev")));
		dto.setRe_seq(Integer.parseInt(request.getParameter("re_seq")));
		// + 사용자의 IP주소 추가
		dto.setIp(request.getRemoteAddr());
		// System.out.println(" M : "+ dto );
		// pageNum 저장
		String pageNum = request.getParameter("pageNum");
		
		// BoardDAO객체 생성 -> 답글쓰기 메서드 
		BoardDAO bdao = new BoardDAO();
		bdao.reInsertBoard(dto);

		// 페이지 이동준비(list)
		ActionForward forward = new ActionForward();
		forward.setPath("./BoardList.bo?pageNum="+pageNum);
		forward.setRedirect(true);
		
		return forward;
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		 <jsp:include page="../inc/top.jsp"/>
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->
		<form action="./BoardReWriteAction.bo" method="post">
			<!-- 전달받은 정보 저장 & 전달 -->
			<input type="hidden" name="bno" value="${param.bno }">
			<%-- <input type="hidden" name="bno" value="<%=request.getParameter("bno")%>"> --%>
			<input type="hidden" name="re_ref" value="${param.re_ref }">
			<input type="hidden" name="re_lev" value="${param.re_lev }">
			<input type="hidden" name="re_seq" value="${param.re_seq }">
			<input type="hidden" name="pageNum" value="${param.pageNum }">
		
			<article>
				<h1>아이티윌 소식 게시판</h1>
				<table id="notice">
					<tr>
						<th class="ttitle">게시판 답글쓰기</th>
						<th class="twrite"></th>
					</tr>
					<tr>
						<td>글쓴이</td>
						<td><input type="text" name="name"></td>
					</tr>
					<tr>
						<td>제목</td>
						<td><input type="text" name="subject" value="[답글]"></td>
					</tr>
					<tr>
						<td>내용</td>
						<td><input type="text" name="content"></td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pass"></td>
					</tr>
				</table>
				<div id="table_search">
					<input type="submit" value="답글쓰기" class="btn">
				</div>
				<div class="clear"></div>
				<div id="page_control"></div>
			</article>
		</form>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

 

BoardUpdateAction

package com.itwillbs.board.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;

public class BoardUpdateAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardUpdateAction_execute() 호출 ");
		
		// 전달정보 bno/pageNum 받기
		int bno = Integer.parseInt(request.getParameter("bno"));
		String pageNum = request.getParameter("pageNum");
		
		// 기존에 저장된 글정보를 가져오기
		BoardDAO bdao = new BoardDAO();
		
		BoardDTO bdto = bdao.getBoard(bno);
		
		// request 영역에 정보저장후 전달
		request.setAttribute("bdto", bdto);
		request.setAttribute("pageNum", pageNum);
		
		// 페이지 이동준비
		ActionForward forward = new ActionForward();
		forward.setPath("./board/updateForm.jsp");
		forward.setRedirect(false);
		
		return forward;
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/default.css" rel="stylesheet" type="text/css">
<link href="./css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
	<div id="wrap">
		<!-- 헤더들어가는 곳 -->
		 <jsp:include page="../inc/top.jsp"/>
		<!-- 헤더들어가는 곳 -->

		<!-- 본문들어가는 곳 -->
		<!-- 메인이미지 -->
		<div id="sub_img_center"></div>
		<!-- 메인이미지 -->

		<!-- 왼쪽메뉴 -->
		<jsp:include page="../inc/left.jsp" />
		<!-- 왼쪽메뉴 -->

		<!-- 게시판 -->
		<form action="./BoardUpdateProAction.bo?pageNum=${pageNum }" method="post">
			<input type="hidden" name="bno" value="${bdto.bno }">
			<%-- <input type="hidden" name="pageNum" value="$ {pageNum }"> --%>
		
			<article>
				<h1>아이티윌 소식 게시판</h1>
				<table id="notice">
					<tr>
						<th class="ttitle">게시판 글 수정하기</th>
						<th class="twrite"></th>
					</tr>
					<tr>
						<td>글쓴이</td>
						<td><input type="text" name="name" value="${bdto.name }"></td>
					</tr>
					<tr>
						<td>제목</td>
						<td><input type="text" name="subject" value="${bdto.subject }"></td>
					</tr>
					<tr>
						<td>내용</td>
						<td><input type="text" name="content" value="${bdto.content }"></td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pass" placeholder=" 비밀번호를 입력하세요 ."></td>
					</tr>
				</table>
				<div id="table_search">
					<input type="submit" value="글 수정하기" class="btn">
				</div>
				<div class="clear"></div>
				<div id="page_control"></div>
			</article>
		</form>
		<!-- 게시판 -->
		<!-- 본문들어가는 곳 -->
		<div class="clear"></div>
		<!-- 푸터들어가는 곳 -->
		<footer>
			<hr>
			<div id="copy">
				All contents Copyright 2011 FunWeb 2011 FunWeb Inc. all rights reserved<br> Contact mail:funweb@funwebbiz.com Tel +82 64 123 4315 Fax +82 64 123 4321
			</div>
			<div id="social">
				<img src="./images/facebook.gif" width="33" height="33" alt="Facebook"> <img src="./images/twitter.gif" width="34" height="34" alt="Twitter">
			</div>
		</footer>
		<!-- 푸터들어가는 곳 -->
	</div>
</body>
</html>

 

 

BoardUpdateProAction

package com.itwillbs.board.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itwillbs.board.db.BoardDAO;
import com.itwillbs.board.db.BoardDTO;
import com.itwillbs.util.Action;
import com.itwillbs.util.ActionForward;
import com.itwillbs.util.JSMoveFunction;

public class BoardUpdateProAction implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(" M : BoardUpdateProAction_execute() 호출 ");
		
		// 한글처리 => 필터사용(생략)
		
		// 전달정보 저장(bno,name,subject,content,pass, pageNum)
		// => BoardDTO 객체에 저장
		BoardDTO bdto = new BoardDTO();
		bdto.setBno(Integer.parseInt(request.getParameter("bno")));
		bdto.setName(request.getParameter("name"));
		bdto.setSubject(request.getParameter("subject"));
		bdto.setContent(request.getParameter("content"));
		bdto.setPass(request.getParameter("pass"));
		
		String pageNum = request.getParameter("pageNum");
		
		// 전달받은 정보를 사용해서 기존의 정보 수정
		BoardDAO bdao = new BoardDAO();
		int result = bdao.updateBoard(bdto);
		
		if(result == 0) {
			//JS사용 페이지 이동
			JSMoveFunction.alertBack(response, " 비밀번호 오류! ");
			return null;
		}
		
		if(result == -1) {
			JSMoveFunction.alertBack(response, " 게시판 글 없음! ");
			 return null;
		}
		
		//result == 1
		JSMoveFunction.alertLocation(response, "수정 성공!", "./BoardList.bo?pageNum="+pageNum);
		
		return null;
	}

}