본문 바로가기
WEB/JSP

게시판 만들기 01. 게시판 목록 구현

by 둥바 2022. 8. 29.

View단

- 시작 페이지 : index.jsp

- 게시판 목록 : list.jsp

- 글쓰기 페이지 : write.jsp

- 댓글 목록 : comment_list.jsp

- 수정,삭제 기능 : edit.jsp

- 답변 달기 : reply.jsp

- 검색 페이지 : search.jsp

 

게시판 목록 구현

 

1) 어노테이션이 아니라 web.xml에 서블릿 등록

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>jsp00</display-name>
  
  <!-- 서블릿 등록 -->
  <servlet>
  	<servlet-name>board</servlet-name>
  	<servlet-class>board.BoardController</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>board</servlet-name>
  	<url-pattern>/board_servlet/*</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
</web-app>

 

2) index.jsp 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작 페이지</title>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<c:redirect url="/board_servlet/list.do"></c:redirect>

<%-- <% 
response.sendRedirect(request.getContextPath()+"/board_servlet/list.do");
%> --%>

</body>
</html>

 

3) 요청이 들어왔으므로, 이를 처리해줄 Controller의 틀을 잡기

- URL,컨텍스트 패스값

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



//@WebServlet("/BoardController") (web.xml에서 매핑처리하면 반드시 어노테이션은 지워야함)
public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//클라이언트에서 요청한 주소 처리
		String url = request.getRequestURL().toString();
		//url은 StringBuffer를 쓰므로 toString()작업
		//컨텍스트 패스
		String contextPath=request.getContextPath();

		if(url.indexOf("list.do")!=-1) {
			System.out.println("list.do 호출");
		}
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

4) Constants.java(상수값 처리) - common 패키지 아래에 만들기

이 때는 파일의 업로드 패스값과 최대 업로드 용량을 정해놓는다.

 

package common;

public class Constants {

	//파일이 업로드되고 관리되는 디렉토리
	public static final String UPLOAD_PATH = "c:\\upload\\";
	//파일 업로드 용량 제한(10MB)
	public static final int MAX_UPLOAD = 10*1024*1024;
	
}

 

5) DTO,DAO 만들어 놓기

package board.dto;

import java.sql.Date;

public class BoardDTO {
	private int num; //게시물번호
	private String writer; //작성자 
	private String subject; //제목
	private String passwd; //수정,삭제 비밀번호
	private Date reg_date; //작성일자
	private int readcount; //조회수
	private int ref; //게시물 그룹
	private int re_step; //게시물 그룹 순번
	private int re_level;//답변 단계
	private String content; //본문
	private String ip; //작성자 ip
	private int comment_count; //댓글 갯수처리(테이블에 없음)
	private String filename; //파일네임
	private int filesize; //파일사이즈
	private int down; //다운로드 횟수
	private String ext; //첨부파일의 확장자(테이블에 없음)
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public Date getReg_date() {
		return reg_date;
	}
	public void setReg_date(Date reg_date) {
		this.reg_date = reg_date;
	}
	public int getReadcount() {
		return readcount;
	}
	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}
	public int getRef() {
		return ref;
	}
	public void setRef(int ref) {
		this.ref = ref;
	}
	public int getRe_step() {
		return re_step;
	}
	public void setRe_step(int re_step) {
		this.re_step = re_step;
	}
	public int getRe_level() {
		return re_level;
	}
	public void setRe_level(int re_level) {
		this.re_level = re_level;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public int getComment_count() {
		return comment_count;
	}
	public void setComment_count(int comment_count) {
		this.comment_count = comment_count;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public int getFilesize() {
		return filesize;
	}
	public void setFilesize(int filesize) {
		this.filesize = filesize;
	}
	public int getDown() {
		return down;
	}
	public void setDown(int down) {
		this.down = down;
	}
	public String getExt() {
		return ext;
	}
	public void setExt(String ext) {
		this.ext = ext;
	}
	@Override
	public String toString() {
		return "BoardDTO [num=" + num + ", writer=" + writer + ", subject=" + subject + ", passwd=" + passwd
				+ ", reg_date=" + reg_date + ", readcount=" + readcount + ", ref=" + ref + ", re_step=" + re_step
				+ ", re_level=" + re_level + ", content=" + content + ", ip=" + ip + ", comment_count=" + comment_count
				+ ", filename=" + filename + ", filesize=" + filesize + ", down=" + down + ", ext=" + ext + "]";
	}
	
	
}

 

package board.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import board.dto.BoardDTO;
import sqlmap.MybatisManager;

public class BoardDAO {

	//게시물 목록 리스트
	public List<BoardDTO> list(){
		List<BoardDTO> list = null;
		SqlSession session = null;
		
		try {
			session = MybatisManager.getInstance().openSession();
			list = session.selectList("board.list");//네임스페이스.아이디
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(session!=null) session.close();
		}
		return list;
	}
}

 

6) xml에서 스페이스/아이디 등록

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="board">
<select id="list" resultType="board.dto.BoardDTO"> 
select num,writer,subject,reg_date,readcount,filename,filesize,down,ip 
from board 
order by num desc </select>



</mapper>

 

7) 등록한 뒤 sqlMapConfig에서 매퍼파일 등록해주기

	<mappers>
		<mapper resource="/memo/mapper/memo.xml"/>
		<mapper resource="/board/mapper/board.xml"/>
	</mappers>

 

8) 서블릿에서 list 메소드로  List를 받아 웹 영역에 저장한 뒤 list.jsp로 포워딩 시키기

package board;

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

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

import board.dao.BoardDAO;
import board.dto.BoardDTO;



public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String url = request.getRequestURL().toString();
		String contextPath = request.getContextPath();
		BoardDAO dao = new BoardDAO();
		if(url.indexOf("list.do")!=-1) {
			List<BoardDTO> list=dao.list();
			request.setAttribute("list", list);
			String page="/board/list.jsp";
			RequestDispatcher rd=request.getRequestDispatcher(page);
			rd.forward(request, response);
		}
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

9) list.jsp 만들기

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Insert title here</title>
<%@ include file="../include/header.jsp" %>

</head>
<body>
<h2>게시판</h2>
<button id="btnWrite">글쓰기</button>
<table border="1" style="width: 100%;">
  <tr>
    <th>번호</th>
    <th>이름</th>
    <th>제목</th>
    <th>날짜</th>
    <th>조회수</th>
    <th>첨부파일</th>
    <th>파일사이즈</th>
    <th>다운로드</th>
    <th>IP주소</th>
  </tr>
<c:forEach var="dto" items="${list}">  
  <tr>
    <td>${dto.num}</td>
    <td>${dto.writer}</td>
    <td>${dto.subject}</td>
    <td>${dto.reg_date}</td>
    <td>${dto.readcount}</td>
    <td>${dto.filename}</td>
    <td>${dto.filesize}</td>
    <td>${dto.down}</td>
    <td>${dto.ip}</td>
  </tr>
</c:forEach>  
</table>
</body>
</html>

 

index.jsp를 실행시켜보면,