⛏️/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는 폴더 따로 들어가서 파일만 복사 붙여넣기
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;
}
}