목차
1. 글 작성
2. 글 목록
1. 글 작성
1) 뷰 페이지(qna_board_write.jsp)
- 첨부 파일을 업로드 하게 되므로, <form> 태그에서 전송 방식은 ‘post’로 해야하며, enctype 속성을 포함해야 한다.
(ex. <form method="post" action="<%=request.getContextPath() %>/BoardAddAction.do"
enctype="multipart/form-data"> )
- 글 작성 양식에서는 글쓴이(board_name), 비밀번호(board_pass_, 제목(board_subject), 내용(board_content), 파일 첨부(board_file) 값이 전달된다.
- “/BoardAddAction.do” 로 컨트롤러를 호출한다.
- qna_board_write.jsp → BoardFrontController.java
2) 컨트롤러 클래스(BoardFrontController.java)
- 글 작성 폼(qna_board_write.jsp)에서 "/BoardAddAction.do"로 요청한 값을 받아 처리한다.
- 서비스 클래스인 BoardAddAction의 객체를 생성하고 execute() 메소드를 호출한다.
- BoardAddAction으로부터 forward 값을 리턴받으면 뷰 페이지로 포워딩한다.
- BoardFrontController.java → BoardAddAction.java
3) 서비스 클래스(BoardAddAction.java)
- 글 작성 폼(qna_board_write.jsp)에서 첨부파일을 업로드하는 기능이 있으므로, MultipartRequest 객체를 생성한다.
- 글 작성 폼에서 입력한 값은 생성된 MultipartRequest 객체를 통해 getParameter() 메소드로 불러온다.
- 글 작성(insert) 후 테이블에 데이터가 입력되었는지 확인하고, path 값으로 업로드 폴더에 데이터가 있는지 확인한다.
- 글 작성을 성공하면 "./BoardListAction.do"로 컨트롤러를 호출한다.
- BoardAddAction.java → BoardFrontController.java
2. 글 목록
1) 컨트롤러 클래스(BoardFrontController.java)
- 서비스 클래스(BoardAddAction.java)에서 "./BoardListAction.do"로 요청한 값을 받아 처리한다.
- 서비스 클래스인 BoardListAction의 객체를 생성하고 execute() 메소드를 호출한다.
- BoardListAction으로부터 forward 값을 리턴받으면 뷰 페이지로 포워딩한다.
- BoardFrontController.java → BoardListAction.java
2) 서비스 클래스(BoardListAction.java)
- 게시판 목록을 보여주기 위한 서비스 클래스에서는 기본 변수와 생성된 기본 변수에서 파생되는 파생 변수를 설정한다. (ex. 현재 페이지 번호, 한 화면에 출력할 데이터 개수 등)
- 필요한 값들을 설정하는 과정에서 DAO 객체를 생성하고 필요한 메소드를 호출한다.
- 구해온 값들은 request 객체로 공유 설정한다.
(ex. request.setAttribute("page", page); )
- ActionForward 객체를 생성하고 전송 방식과 경로를 설정한 후 리턴한다.
- request 객체로 공유한 값을 포워딩된 페이지에서 사용하기 위해서는 전송 방식이 dispatcher 방식으로 설정되어야 한다.
- “/board/qna_board_list.jsp”로 컨트롤러를 호출한다.
- BoardListAction.java → BoardFrontController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
package service;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.BoardDAO;
import model.BoardBean;
public class BoardListAction implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("BoardListAction");
int page = 1; // 현재 페이지 번호
int limit = 10; // 한 화면에 출력할 데이터 개수
if(request.getParameter("page") != null) {
page = Integer.parseInt(request.getParameter("page"));
}
// page = 1 : startRow = 1, endRow = 10;
// page = 2 : startRow = 11, endRow = 20;
int startRow = (page - 1) * limit + 1;
int endRow = page * limit;
BoardDAO dao = BoardDAO.getInstance(); // DAO 객체 생성해서 DB 연동
// 총 데이터 개수
int listcount = dao.getCount();
System.out.println("listcount:"+listcount); // index 파일 실행하고 콘솔 창 확인
List<BoardBean> boardlist = dao.getList(startRow, endRow);
System.out.println("boardlist:"+boardlist);
// 총 페이지 수
int pageCount = listcount/limit + ((listcount%limit == 0) ? 0 : 1);
int startPage = ((page - 1)/10) * limit + 1; // 1, 11, 21 ...
int endPage = startPage + 10 - 1; // 10, 20, 30 ...
if(endPage > pageCount) {
endPage = pageCount;
}
// 공유 설정
request.setAttribute("page", page);
request.setAttribute("listcount", listcount);
request.setAttribute("boardlist", boardlist);
request.setAttribute("pageCount", pageCount);
request.setAttribute("startPage", startPage);
request.setAttribute("endPage", endPage);
ActionForward forward = new ActionForward();
// request 객체로 공유를 한 경우에는 dispatcher 방식으로 포워딩이 되어야
// 포워딩되는 view 페이지에서 공유한 값에 접근할 수 있다.
forward.setRedirect(false); // dispatcher 방식으로 포워딩
forward.setPath("./board/qna_board_list.jsp");
return forward;
}
}
|
cs |
3) 컨트롤러 클래스(BoardFrontController.java)
- BoardListAction으로부터 forward 값을 리턴받으면 dispatcher 방식으로 뷰 페이지(qna_board_list.jsp)로 포워딩한다.
- BoardFrontController.java → qna_board_list.jsp
4) 뷰 페이지(qna_board_list.jsp)
- 글 목록을 보여주는 뷰 페이지에서는 JSTL 코어 라이브러리와 국제화 라이브러리를 사용하게 되므로, 각각의 라이브러리를 불러오는 코드를 추가해야 한다.
(ex. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> )
- 게시판 목록을 보여주기 위한 서비스 클래스(BoardListAction.java)에서 request 객체로 공유한 값은 EL 태그로 가져올 수 있다.( ${listcount} )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
글 쓰기 <br>
글 개수 : ${listcount}개 <br>
<table border=1 width=700 align=center>
<caption><h3>게시판 목록</h3></caption>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>날짜</th>
<th>조회수</th>
</tr>
</table>
|
cs |
'JSP' 카테고리의 다른 글
75일차: Model 2 게시판(3): 댓글 작성 / 글 수정_ 2021.10.01 (0) | 2021.10.01 |
---|---|
74일차: Model 2 게시판(2): 글 목록 / 상세 페이지_ 2021.09.30 (0) | 2021.09.30 |
72일차: Model 2 회원 관리(3)_ 2021.09.28 (0) | 2021.09.28 |
71일차: Model 2 회원 관리(2)_ 2021.09.27 (0) | 2021.09.27 |
70일차: Model 2 회원 관리(1)_ 2021.09.24 (0) | 2021.09.24 |