Q1. 게시판 List 출력하기
writeForm과 writePro를 통해 테이블에 추가한 내용을 List로 출력한다
[ 게시판 구성 파일 ]
#1 내용에서 추가될 3,6번 내용을 다룬다
1. Board.sql
2. DataBean.java_(class)
3. DBBean.java _(class)
4. writeForm.jsp
5. writePro.jsp
6. list.jsp
MVC 1 게시판 만들기 [#0 DB연동] 과 [#1 글쓰기] 가 진행되어있다는 가정
3. DBBean.java _(class)
package board;
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 javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDBBean {
private static BoardDBBean instance = new BoardDBBean();
//.jsp페이지에서 DB연동빈인 BoardDBBean클래스의 메소드에 접근시 필요
public static BoardDBBean getInstance() {
return instance;
}
private BoardDBBean() {}
//커넥션풀로부터 Connection객체를 얻어냄
private Connection getConnection() throws Exception {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/basicjsp");
return ds.getConnection();
}
// #1 (inset문) 생략 (writePro.jsp페이지에서 사용)
// List 생성
// 글의 목록(복수개의 글)을 가져옴(select문) <=list.jsp에서 사용
public List<BoardDataBean> getArticles(int start, int end)
throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<BoardDataBean> articleList=null;
try {
conn = getConnection();
pstmt = conn.prepareStatement(
"select * from (select rownum as rnum,A.* from (select * from board order by ref desc,re_step asc) A where rownum<=?) where rnum>=?");
System.out.println("start : "+start+" end : "+end);
pstmt.setInt(1, end);
pstmt.setInt(2, start);
rs = pstmt.executeQuery();
if (rs.next()) {
articleList = new ArrayList<BoardDataBean>(end);
do{
BoardDataBean article= new BoardDataBean();
article.setNum(rs.getInt("num"));
article.setWriter(rs.getString("writer"));
article.setEmail(rs.getString("email"));
article.setSubject(rs.getString("subject"));
article.setPasswd(rs.getString("passwd"));
article.setReg_date(rs.getTimestamp("reg_date"));
article.setReadcount(rs.getInt("readcount"));
article.setRef(rs.getInt("ref"));
article.setRe_step(rs.getInt("re_step"));
article.setRe_level(rs.getInt("re_level"));
article.setContent(rs.getString("content"));
article.setIp(rs.getString("ip"));
articleList.add(article);
}while(rs.next());
}
} catch(Exception ex) {
System.out.println("List<BoardDataBean> getArticles(int start, int end) 익셉션 발생");
ex.printStackTrace();
} finally {
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
return articleList;
}
// List 페이징. 게시글 10개가 넘어가면 다음페이지에 출력
// board테이블에 저장된 전체글의 수를 얻어냄(select문)<=list.jsp에서 사용
public int getArticleCount()
throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int x=0;
try {
conn = getConnection();
pstmt = conn.prepareStatement("select count(*) from board");
rs = pstmt.executeQuery();
if (rs.next()) {
x= rs.getInt(1);
}
} catch(Exception e) {
System.out.println("getArticleCount() 익셉션 발생");
e.printStackTrace();
} finally {
if (rs != null) try { rs.close(); } catch(Exception ex) {}
if (pstmt != null) try { pstmt.close(); } catch(Exception ex) {}
if (conn != null) try { conn.close(); } catch(Exception ex) {}
}
return x;
}
}
6. list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "board.BoardDBBean" %>
<%@ page import = "board.BoardDataBean" %>
<%@ page import = "java.util.List" %>
<%@ page import = "java.text.SimpleDateFormat" %>
<%!int pageSize = 10;
SimpleDateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm");%>
<%
String pageNum = request.getParameter("pageNum");
if (pageNum == null) {
pageNum = "1";
}
int currentPage = Integer.parseInt(pageNum);
int startRow = (currentPage - 1) * pageSize + 1;
int endRow = currentPage * pageSize;
int count = 0;
int number = 0;
List<BoardDataBean> articleList = null;
BoardDBBean dbPro = BoardDBBean.getInstance();
count = dbPro.getArticleCount();
if (count > 0) {
articleList = dbPro.getArticles(startRow, endRow);
}
number = count-(currentPage-1)*pageSize;
%>
<html>
<head>
<title>게시판</title>
</head>
<body>
<p>글목록(전체 글:<%=count%>)</p>
<table>
<tr>
<td align="right">
<a href="writeForm.jsp">글쓰기</a>
</td>
</tr>
</table>
<%
if (count == 0) {
%>
<table>
<tr>
<td align="center">
게시판에 저장된 글이 없습니다.
</td>
</table>
<%
} else {
%>
<table>
<tr height="30" bgcolor="<%=value_c%>">
<td align="center" width="50" >번 호</td>
<td align="center" width="250" >제 목</td>
<td align="center" width="100" >작성자</td>
<td align="center" width="150" >작성일</td>
<td align="center" width="50" >조 회</td>
<td align="center" width="100" >IP</td>
</tr>
<%
for (int i = 0 ; i < articleList.size() ; i++) {
BoardDataBean article = articleList.get(i);
%>
<tr height="30">
<td width="50" > <%=number--%></td>
<td width="250" align="left">
<%
int wid=0;
if(article.getRe_level()>0){
wid=5*(article.getRe_level());
%>
<img src="images/level.png" width="<%=wid%>" height="16">
<img src="images/re.png">
<% }else{%>
<img src="images/level.png" width="<%=wid%>" height="16">
<% }%>
<a href="content.jsp?num=<%=article.getNum()%>&pageNum=<%=currentPage%>">
<%=article.getSubject()%></a>
<% if(article.getReadcount()>=20){%>
<img src="images/hot.gif" border="0" height="16"><%}%> </td>
<td width="100" align="left">
<a href="mailto:<%=article.getEmail()%>">
<%=article.getWriter()%></a></td>
<td width="150"><%= sdf.format(article.getReg_date())%></td>
<td width="50"><%=article.getReadcount()%></td>
<td width="100" ><%=article.getIp()%></td>
</tr>
<%}%>
</table>
<%}%>
<!-- 페이지 당 10개 게시물이 넘어갈 경우 다음 페이지로 -->
<%
if (count > 0) {
int pageCount = count / pageSize + (count % pageSize == 0 ? 0 : 1);
int startPage =1;
if(currentPage % 10 != 0)
startPage = (int)(currentPage/10)*10 + 1;
else
startPage = ((int)(currentPage/10)-1)*10 + 1;
int pageBlock = 10;
int endPage = startPage + pageBlock - 1;
if (endPage > pageCount) endPage = pageCount;
if (startPage > 10) { %>
<a href="list.jsp?pageNum=<%= startPage - 10 %>">[이전]</a>
<% }
for (int i = startPage ; i <= endPage ; i++) { %>
<a href="list.jsp?pageNum=<%= i %>">[<%= i %>]</a>
<% }
if (endPage < pageCount) { %>
<a href="list.jsp?pageNum=<%= startPage + 10 %>">[다음]</a>
<%
}
}
%>
</body>
</html>'DEV Heart' 카테고리의 다른 글
| JAVA 예약어 [ this ] (0) | 2021.09.13 |
|---|---|
| [ MVC 1 게시판 ] #3 상세 내용 보기(content) (0) | 2021.09.08 |
| [ MVC 1 게시판 ] #2 글쓰기 (WriteForm) (0) | 2021.09.08 |
| [ MVC 1 게시판 ] #1 DB연동 (JavaBean) (0) | 2021.09.08 |
| [ HashMap ] #3 HashMap으로 2개 Table 출력하기 (Inner Join) (0) | 2021.09.01 |