본문 바로가기
05_Server (04. JSP 프로그래밍 구현)

[3-1] 일반게시판서비스 기본세팅

by moca7 2024. 9. 11.

 

 

 

 

ㅁ 일반게시판서비스

- 일반게시판서비스_목록조회요청(페이징처리)

- 일반게시판서비스_작성요청(파일업로드) 

- 일반게시판서비스_수정요청

 

 

 

 

 

 

ㅁ 현재 일반게시판서비스 화면 구현 현황

 

 

 

 

 

- src/main/webapp/views/board 폴더에 일반게시판 목록, 상세, 수정, 작성페이지와 사진게시판 목록, 상세, 작성페이지들이 있다. 이건 받았다.

 

 

 

 

 

 

- "일반게시판목록페이지.html"이다.

- 공지사항 목록페이지와 비슷해보이지만 공지사항 목록페이지에는 페이징처리를 하지 않았다.

NOTICE 테이블의 전체 데이터를 싹 다 조회해왔었다.

- 만약 NOTICE 테이블에 데이터가 1000개 있다면 공지사항 목록페이지에 1000개의 게시글이 다 보여질 것이다.

다수의 데이터가 있을 수 있기 때문에 게시판 형태는 페이징처리를 해줘야 한다.

 

 

- 일반게시글 목록페이지에서 "게시글 데이터뿐" 아니라 "페이징 바"도 매번 동적으로 만들어줘야 한다.

내가 6번 페이지를 가면 페이징 바도 시작번호는 6, 끝번호는 10이 되어야 한다.

 

 

- 현재 내가 몇번 페이지를 보고 있고, 그 때 이 페이징 바의 목록을 몇개 단위씩(현재 5개) 할건지,

게시글도 몇개 단위씩 보여지게 할건지에 따라서 이 페이지는 다르게 보여진다.

 

 

 

 

 

 

- "일반게시글상세페이지.html"이다.

 

 

 

 

- "일반게시글작성페이지.html"이다.

 

 

 

- "일반게시글작성페이지.html"의 카테고리를 눌러본 화면이다.

 

 

 

 

 

- "일반게시글수정페이지.html"이다.

 

 

 

 

 

 

ㅁ 필요한 패키지, 클래스, xml 파일을 만든다.

 

 

 

 

 

 

ㅁ db.mappers 패키지에 board-mapper.xml 파일을 세팅한다.

 

 

- xml 파일은 항상 작성해야하는 구문이 있었다. 다른데서 가져온다.

 

 

 

 

 

 

 

 

 

ㅁ BoardDao.java를 기본세팅한다.

 

 
package com.br.web.board.model.dao;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;


public class BoardDao {
   
    private Properties prop = new Properties();
   
    public BoardDao() {
        try {
            prop.loadFromXML(new FileInputStream(BoardDao.class.getResource("/db/mappers/board-mapper.xml").getPath()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

 

 

 

- BoardDao.class.getResource() 메소드의 괄호 안의 경로 중 "슬래시"가 곧 "classes" 폴더를 가리킨다. 

현재 작업중인 곳은 NoticeDao.class 파일이다.

슬래시는 이 파일이 컴파일된 클래스 파일의 루트 폴더인 classes 폴더를 가리킨다.

(읽어들여야 하는 파일은 지금 작업중인 파일이 아니라, 동기화된 실제 배포되는 파일이다)

- getResource()로 파일을 찾고, getPath()로 그 파일의 경로가 반환된다.

 

 

 

 

 

ㅁ BoardService.java를 기본세팅한다.

 

 

 

- BoardService 클래스에는 BoardDao 객체를 만들어 놓는다.

 

 

 

 

 

 

ㅁ Board.java를 기본세팅한다.

 

 
package com.br.web.board.model.vo;

import java.sql.Date;

public class Board {
   
    private int boardNo;
    private int boardType;
    private String category;    // 작성하기시 카테고리번호 | 조회시 카테고리명
    private String boardTitle;
    private String boardContent;
    private String boardWriter; // 작성하기시 회원번호 | 조회시 회원아이디
    private int boardCount;
    private Date registDt;
    private String status;
   
    private String titleImgURL; // 해당 사진게시글의 대표이미지 경로
 
   
    public Board() {}

    public Board(int boardNo, int boardType, String category, String boardTitle, String boardContent,
            String boardWriter, int boardCount, Date registDt, String status) {
        super();
        this.boardNo = boardNo;
        this.boardType = boardType;
        this.category = category;
        this.boardTitle = boardTitle;
        this.boardContent = boardContent;
        this.boardWriter = boardWriter;
        this.boardCount = boardCount;
        this.registDt = registDt;
        this.status = status;
    }
   
   

    public Board(int boardNo, String category, String boardTitle, String boardWriter, int boardCount, Date registDt) {
        super();
        this.boardNo = boardNo;
        this.category = category;
        this.boardTitle = boardTitle;
        this.boardWriter = boardWriter;
        this.boardCount = boardCount;
        this.registDt = registDt;
    }

    public int getBoardNo() {
        return boardNo;
    }

    public void setBoardNo(int boardNo) {
        this.boardNo = boardNo;
    }

    public int getBoardType() {
        return boardType;
    }

    public void setBoardType(int boardType) {
        this.boardType = boardType;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String getBoardTitle() {
        return boardTitle;
    }

    public void setBoardTitle(String boardTitle) {
        this.boardTitle = boardTitle;
    }

    public String getBoardContent() {
        return boardContent;
    }

    public void setBoardContent(String boardContent) {
        this.boardContent = boardContent;
    }

    public String getBoardWriter() {
        return boardWriter;
    }

    public void setBoardWriter(String boardWriter) {
        this.boardWriter = boardWriter;
    }

    public int getBoardCount() {
        return boardCount;
    }

    public void setBoardCount(int boardCount) {
        this.boardCount = boardCount;
    }

    public Date getRegistDt() {
        return registDt;
    }

    public void setRegistDt(Date registDt) {
        this.registDt = registDt;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Board [boardNo=" + boardNo + ", boardType=" + boardType + ", category=" + category + ", boardTitle="
                + boardTitle + ", boardContent=" + boardContent + ", boardWriter=" + boardWriter + ", boardCount="
                + boardCount + ", registDt=" + registDt + ", status=" + status + "]";
    }
   
}
 

 

 

- category 필드는 insert할 때는 카테고리 번호가 들어가지만, select할 때는 카테고리명이 들어가게끔 구성했다.

- boardWriter 필드는 insert할 때는 회원번호가 들어가지만, select할 때는 회원아이디가 들어가게끔 구성했다.

(이렇게 하지 않고 필드를 두 개 둬도 된다)

 

- Date는 java.sql.Date를 import 한다.

- 기본생성자, 매개변수 생성자, 게터세터, toString 메소드를 만든다.

 

 

 

 

 

ㅁ 메인 페이지

 

 

 

 

 

- 메인페이지의 메뉴바에서 '일반게시판'을 누르는 순간, 일반게시판 목록페이지로 이동된다.

보통 메뉴바를 클릭하면 목록페이지 중에서도 1번 페이지로 이동된다.

 

 

 

 

 

 

- 어떤 쇼핑몰의 메인페이지다.

메뉴바의 q&a 게시판을 누르면 q&a 게시판으로 이동한다.

 

 

 

 

 

 

- q&a 게시판의 1번 페이지가 보여진다. 

- https://lovegram.co.kr/board/product/list.html?board_no=6

q&a 게시판을 클릭하는 순간 "list.html"이라는 url이 요청된다.

이때 board_no이 전달되는데 이건 무시. 지금 신경쓸 건 아님.

- 현재 1번 페이지 요청인데 메뉴바에서 클릭했을 때는 1번 페이지를 요청한다는 데이터가 넘어가진 않는다. 

 

 

 

 

 

 

 

 

 

- 목록페이지의 2번 페이지에 띄워줄 데이터가 조회돼서 보여진다.

- https://lovegram.co.kr/board/product/list.html?board_no=6&page=2

페이징 바에 있는 숫자를 눌렀을 때는 똑같이 "list.html"이라는 url로 요청하는데

key값으로 "page", value값으로 "2"가 넘어간다. 

 

 

- 메뉴바에 있는 메뉴 클릭 시에는 페이지 번호가 넘어가지 않는다. 

페이지 번호가 넘어가지 않으면, 그때는 1번 페이지를 요청하는 것으로 간주되어야 한다. 

페이징 바에 있는 숫자를 클릭했을 때는 현재 요청하는 페이지 번호가 넘어간다.

- 일반게시판도 이런 방식으로 만든다.