JSP_5강_1_게시판_전체 목록 페이지

열라뽕따히·2024년 3월 20일

JSP

목록 보기
23/43

Java Resources 패키지에 com.member.model, com.member.controller 패키지 두 개를 생성

com.member.model 패키지에 BoardDTO 클래스 생성


=============================코드=============================

package com.board.model;

public class BoardDTO {
	
	private int board_no;
	private String board_writer;
	private String board_title;
	private String board_cont;
	private String board_pwd;
	private int board_hit;
	private String board_date;
	private String board_update;
	
	
	public int getBoard_no() {
		return board_no;
	}
	
	public void setBoard_no(int board_no) {
		this.board_no = board_no;
	}
	
	public String getBoard_writer() {
		return board_writer;
	}
	
	public void setBoard_writer(String board_writer) {
		this.board_writer = board_writer;
	}
	
	public String getBoard_title() {
		return board_title;
	}
	
	public void setBoard_title(String board_title) {
		this.board_title = board_title;
	}
	
	public String getBoard_cont() {
		return board_cont;
	}
	
	public void setBoard_cont(String board_cont) {
		this.board_cont = board_cont;
	}
	
	public String getBoard_pwd() {
		return board_pwd;
	}
	
	public void setBoard_pwd(String board_pwd) {
		this.board_pwd = board_pwd;
	}
	
	public int getBoard_hit() {
		return board_hit;
	}
	
	public void setBoard_hit(int board_hit) {
		this.board_hit = board_hit;
	}
	
	public String getBoard_date() {
		return board_date;
	}
	
	public void setBoard_date(String board_date) {
		this.board_date = board_date;
	}
	
	public String getBoard_update() {
		return board_update;
	}
	
	public void setBoard_update(String board_update) {
		this.board_update = board_update;
	}
	
}



com.member.model 패키지에 BoardDAO 클래스 생성

board 테이블의 전체 게시물의 수를 조회하는 메서드를 생성하자


=============================코드=============================

package com.board.model;

import java.sql.*;

public class BoardDAO {

	// DB와 연결하는 객체
	Connection con = null;

	// DB에 SQL문을 전송하는 객체
	PreparedStatement pstmt = null;

	// SQL문을 실행한 후에 결과값을 가지고 있는 객체
	ResultSet rs = null;

	// SQL문을 저장할 객체
	String sql = null;

	// MemberDAO 객체를 싱글턴 방식으로 만들어보자
	// 1단계 : MemberDAO 객체를 정적(static) 멤버로 선언을 해주어야 함
	private static BoardDAO instance = null;  // instance 는 참조변수

	// 2단계 : 싱글턴 방식으로 객체를 만들기 위해서는 
	// 			우선적으로 기본생성자의 접근지정자를 public이 아닌 private으로 변경해주어야 함
	//				즉, 외부에서 직접적으로 기본생성자에 접근하여 호출하지 못하도록 하는 방법

	private BoardDAO() { }  // 기본 생성자

	// 3단계 : 기본 생성자 대신에 싱글턴 객체를 return 해주는 getInstance() 메서드를 만들어서
	// 			해당 getInstance() 메서드를 외부에서 접근이 가능하도록 해주면 됨
	public static BoardDAO getInstance() {

		if(instance == null) {
			instance = new BoardDAO();
		}

		return instance;

	}  // getInstance() 메서드 end


	// DB 연동 작업을 하는 메서드
	public void openConn() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "goott";
		String password = "99229922";


		try {
			// 1단계 : 오라클 드라이버를 메모리로 로딩 작업 진행
			Class.forName(driver);

			// 2단계 : 오라클 DB와 연결 작업 진행
			con = DriverManager.getConnection(url, user, password);

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

	}  // openConn() 메서드 end


	// DB에 연결되어 있던 자원을 종료하는 메서드
	public void closeConn(ResultSet rs, PreparedStatement pstmt, Connection con) {

		try {
			if(rs != null) {  	rs.close(); }
			if(pstmt != null) {   pstmt.close(); }
			if(con != null) {  	con.close(); }

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
	
	// DB에 연결되어 있던 자원을 종료하는 메서드
	public void closeConn(PreparedStatement pstmt, Connection con) {

		try {
			if(pstmt != null) {  	pstmt.close(); }
			if(con != null) {  	con.close(); }

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
	
	// board 테이블의 전체 게시물의 수를 조회하는 메서드
	public int getBoardCount() {
		int count = 0;
		
		try {
			openConn();
			sql = "select count(*) from board";
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				count = rs.getInt(1);  // 5
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeConn(rs, pstmt, con);
		}
		return count;
	}

}



wepapp 에 main.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>

		<div align = "center">
			<hr width = "30%" color = blue>
				<h3>BOARD 테이블 메인 페이지</h3>
			<hr width = "30%" color = blue>
			<br/> <br/>
			
			<%-- request.getContextPath() : 현재 프로젝트명을 문자열로 반환해주는 메서드 --%>
																		<%-- select는 별칭 --%>
			<a href = "<%=request.getContextPath() %>/list.go">[전체 게시물 목록]</a>
		</div>

</body>
</html>

=============================실행=============================



이제 list.go 서블릿을 만들어보자


=============================코드=============================

package com.board.controller;

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

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.board.model.BoardDAO;
import com.board.model.BoardDTO;


@WebServlet("/list.go")
public class ListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public ListServlet() {
        super();
       
    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 요청 : 전체 게시물 목록을 보여달라고 요청
		// 응답 : board 테이블에서 게시글 전체 목록을 조회하여
		//			  조회된 게시물 전체를 view page로 이동시키는 비즈니스 로직
		
		BoardDAO dao = BoardDAO.getInstance();
		
		// 게시물의 총 개수를 구하는 메서드 호출
		int count = dao.getBoardCount();
		
		// 게시물의 전체 리스트를 구하는 메서드 호출
		List<BoardDTO> boardList = dao.getBoardList();
		
		// 조회된 게시물 목록과 게시물 수를 view page로 이동 ==> 바인딩 작업
		request.setAttribute("List", boardList);
		request.setAttribute("Count", count);
		
		request.getRequestDispatcher("view/board_list.jsp").forward(request, response);
	}

}



view -> board_list.jsp 파일을 생성


=============================코드=============================

<%@page import="com.board.model.BoardDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	List<BoardDTO> boards = (List<BoardDTO>)request.getAttribute("List");
	int listCount =(int)request.getAttribute("Count");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div align = "center">
		<hr width = "30%" color = "tomato">
			<h3>BOARD 테이블 전체 게시물 목록 페이지</h3>
		<hr width = "30%" color = "tomato">
		<br/> <br/>
		
		<table border = "1" width = "450">
			<tr>
				<td colspan = "5" align = "right">
					전체 게시물 수 : <%=listCount %> 개
				</td>
			</tr>
			
			<tr>
				<th>게시글 No.</th> <th>글 제목</th> <th>작성자</th> <th>조회수</th> <th>작성일자</th>
			</tr>
			
			<%
				if(boards.size() != 0) {
					for(BoardDTO dto : boards) {
			%>		
					<tr>
						<td><%=dto.getBoard_no() %></td>
						<td><%=dto.getBoard_title() %></td>
						<td><%=dto.getBoard_writer() %></td>
						<td><%=dto.getBoard_hit() %></td>
						<td><%=dto.getBoard_date().substring(0,10) %></td>
					</tr>	
			<% 	}  // for문 end
				}else {
					// 게시물 전체 목록이 없는 경우
			%>		
					<tr>
						<td colspan = "5" align = "center">
							<h3>전체 게시물 목록이 없습니다...</h3>
						</td>
					</tr>
			<% } %>
			
		</table>
	</div>

</body>
</html>

=============================실행=============================

전체 게시물 목록 클릭!

0개의 댓글