KIC/JSP

day54 - JSP(공지사항 페이지)

바차 2021. 9. 1. 01:16
반응형

[BoardController,java]

package controller;

import java.io.IOException;
import java.util.List;

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

import com.oreilly.servlet.MultipartRequest;

import dao.BoardDao;
import dao.MemberDao;
import model.Board;
import model.Member;

public class BoardController extends Action{
	public String hello(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		request.setAttribute("hello", "hello 테스트 입니다.");
		
		return "/view/hello.jsp";
	}
	
	public String list(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		/*
		 * 게시물 목록 보기 
		 * 1. pageNum 파라미터 존재. pageNum 파라미터 없으면 1로 설정. 
		 * 2. 10건의 게시물 출력. => db에서
		 *    해당 페이지에 출력되는 게시물만 조회. 순서 : 최근 게시물 순으로 
		 * 3. 화면에 출력.
		 * 4. boardid 파라메터가 없으면 session을 수정하지 않음 default는 1임
		 */

		// TODO Auto-generated method stub
		HttpSession session = request.getSession();
		
		//pageNum 이 넘어와야 pageNum이 바뀜
		if(request.getParameter("pageNum") != null) {
			session.setAttribute("page", request.getParameter("pageNum"));
		}
		
		//boardid가 넘어와야 세션이 변경됨 : 현재 게시판 분류에 따른 입력, 수정을 적용
		if(request.getParameter("boardid") != null) {
			session.setAttribute("boardid", request.getParameter("boardid"));
			session.setAttribute("pageNum", "1");
		}
		
		String pageNum = (String) session.getAttribute("pageNum");
		if(pageNum == null) pageNum = "1";
		int pageInt = Integer.parseInt(pageNum);
		
		String boardid = (String)session.getAttribute("boardid");
		if(boardid == null) boardid = "1";
		
		int limit = 3; // 한 페이지에 출력할 게시물 건수
		BoardDao dao = new BoardDao();
		int boardcount = dao.boardCount(boardid); //등록된 전체 게시물의 건수
		/*
		 * pageInt-현재 페이지 넘버, 
		 * limit-한페이지에 출력할 게시물 건수
		 * boardcount--등록된 전체 게시물의 건수
		 * boardid-공지사항(1),자유게시판(2), QnA(3)
		 */

		List<Board> list = dao.list(pageInt, limit, boardcount, boardid); // 화면에 출력된 게시물 데이터
		// 13 ---> boardcount/limit : 4 + 1
		int maxpage = (int)(boardcount/limit) + (boardcount % limit == 0 ? 0 : 1);
		int bottomLine = 3;
		//page 1,2,3 : 1, 4,5,6 : 2
		int startpage = 1 + (pageInt -1) * limit;
		int endpage = 3 + (pageInt -1) * limit;
		
		int boardnum = boardcount - (pageInt -1 )*limit ;
		String boardName = "";
		
		switch(boardid) {
			case "1": {
				boardName = "공지사항"; 
				break;
			}
			case "2": {
				boardName = "자유게시판"; 
				break;
			}
			case "3": {
				boardName = "QnA"; 
				break;
			}
			default:
				boardName="공지사항";
		}
		
		request.setAttribute("boardcount", boardcount);
		request.setAttribute("list", list);
		request.setAttribute("boardnum", boardnum);
		request.setAttribute("startpage", startpage);
		request.setAttribute("endpage", endpage);
		request.setAttribute("bottomLine", bottomLine);
		request.setAttribute("maxpage", maxpage);
		request.setAttribute("pageNum", pageNum);
		request.setAttribute("boardName", boardName);
		
		
		
		return "/view/board/list.jsp";
	}
	
	public String memberInput(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		request.setAttribute("input", "member Input 테스트 입니다.");
		
		return "/view/memberInput.jsp";
	}
	
	public String writenForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub

		return "/view/board/writenForm.jsp";
	}
	
	public String writePro(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		String uploadpath = request.getServletContext().getRealPath("/") + "upfile";
		int size = 10 * 1024 * 1024;
		MultipartRequest multi;
		
		//board session 저장 내용: defualt 1
		String boardid = (String)request.getSession().getAttribute("boardid");
		if(boardid == null) boardid="1";
		
		try {
			multi = new MultipartRequest(request, uploadpath, size, "utf-8");
			Board board = new Board();
			board.setName(multi.getParameter("name"));
			board.setSubject(multi.getParameter("subject"));
			board.setPass(multi.getParameter("pass"));
			board.setContent(multi.getParameter("content"));
			board.setFile1(multi.getParameter("file1"));
			board.setBoardid(boardid);
			if(board.getFile1() == null) board.setFile1("");
			
			BoardDao dao = new BoardDao();
			
			String msg = "게시물 등록 실패";
			String url = "board/writenForm";
			if(dao.insert(board)) {
				msg = "게시물 등록 성공";
				url = "board/list";
			}
			request.setAttribute("msg", msg);
			request.setAttribute("url", url);
			
		}catch(IOException e) {
			e.printStackTrace();
		}
		return "/view/alert.jsp";
		
	}
}

 

[BoardDao.java]

package dao;

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

import model.Board;
import util.DBConnection;

public class BoardDao {
	public boolean insert(Board board) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		System.out.println("insert:"+board);
		int num = 0;
		String sql1 = "select multiboardseq.nextval from dual";
		String sql2 = "insert into multiboard " + "(num, name, pass, subject, content, file1, regdate,"
				+ "readcnt, ref, reflevel, refstep, boardid)" + "  values  (?,?,?,?,?,?,sysdate,0,?,?,?,?)";
		//---------------------------
		int ref = 0, reflevel = 0, refstep = 0;
		//---------------------------
		try {
			pstmt = conn.prepareStatement(sql1);
			rs = pstmt.executeQuery();
			if(rs.next()) num = rs.getInt(1);
			// ---------------- 답글인 경우
			if(board.getNum() > 0) {
				ref = board.getRef();
				reflevel = board.getReflevel() + 1;
				refstep = board.getRefstep() + 1;
			}else {
				
				ref = num;
			}
			// ---------------- 답글인 경우
			pstmt = conn.prepareStatement(sql2);
			pstmt.setInt(1, num);
			pstmt.setString(2, board.getName());
			pstmt.setString(3, board.getPass());
			pstmt.setString(4, board.getSubject());
			pstmt.setString(5, board.getContent());
			pstmt.setString(6, board.getFile1());
			pstmt.setInt(7, ref);
			pstmt.setInt(8, reflevel);
			pstmt.setInt(9, refstep);
			pstmt.setString(10, board.getBoardid());
			pstmt.executeUpdate();
			return true;
				
			}catch(SQLException e) {
				e.printStackTrace();
		}
		finally {
			DBConnection.close(conn, pstmt, null);
		}
		return false;
	}
	
	public int boardCount(String boardid) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = conn.prepareStatement("select count(*) count from multiboard where boardid  = ?");
			pstmt.setString(1, boardid);
			rs = pstmt.executeQuery();
			rs.next();
			return rs.getInt(1);
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			DBConnection.close(conn, pstmt, rs);
		}
		return 0;
	}
	
	public List<Board> list(int pageInt, int limit, int boardcount, String boardid){
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<Board> list = new ArrayList<Board>();
		//----------------------
		int start = (pageInt - 1) * limit + 1;
		int end = start + limit -1;
		String sql = "select * from (select rownum rnum, a.* "
				+ " from (select * from multiboard where boardid = ? order by ref desc, refstep) a) "
				+ "where rnum between ? and ?";
		System.out.println(sql);
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, boardid);
			pstmt.setInt(2, start);
			pstmt.setInt(3, end);
			System.out.println(start + ":" + end);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				Board b = new Board();
				b.setNum(rs.getInt("num"));
				b.setName(rs.getString("name"));
				b.setPass(rs.getString("pass"));
				b.setSubject(rs.getString("subject"));
				b.setContent(rs.getString("content"));
				b.setFile1(rs.getString("file1"));
				b.setRef(rs.getInt("ref"));
				b.setReflevel(rs.getInt("reflevel"));
				b.setRefstep(rs.getInt("refstep"));
				b.setReadcnt(rs.getInt("readcnt"));
				b.setRegdate(rs.getTimestamp("regdate"));
				list.add(b);
				
				
			}
			return list;
			
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			DBConnection.close(conn, pstmt, rs);
		}
		return null;
	}

}

 

 

 

 

300x250