๐ก ๊ฒ์ํ์ ์ถ๊ฐ๋์ด์ผ ํ ๊ธฐ๋ฅ
ํ์ด์ง ๊ตฌํ / ๋ฆฌ์คํธ ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ / ๊ฒ์๋ฌผ ์ ์ฅ ์ ์ฒจ๋ถํ์ผ ์ ์ฅ, ์์ , ์ญ์ / ์์ธ ํ์ด์ง ์กฐํ์ ์ถ๊ฐ
๊ธฐ์กด ๊ฒ์๋ฌผ์ ๋ฆฌ์คํธ๋ฅผ ๋ฟ๋ ค์ฃผ๊ณ ์๋ getList( ) ๋ฉ์๋๋ ์ ์ฒด ๊ฒ์๋ฌผ์ ํํ์ด์ง์ ๋ฟ๋ ค์ฃผ๊ณ ์์๋ค.
์ฐ๋ฆฌ๋ ์์ ํ์ด์ง์ ๋ง๋ค์๊ณ , ํ ํ์ด์ง๋น ๋ค์ด๊ฐ ๊ฒ์๋ฌผ์ ์๋ฅผ ์ ์ํ๋ค.
[ Project / Servlet · JSP ] 1์ฐจ ๊ณผ์ Model 2 ๋ฐฉ์ - (1) ๊ฒ์ํ ๋ง๋ค๊ธฐ ( ํ์ด์ง ๋ฒํผ ๊ธฐ๋ฅ )
1์ฐจ ๊ณผ์ ๋ VO์ DAO๋ฅผ ์ฌ์ฉํ Model 2 ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ํ ๋ง๋ค๊ธฐ์ด๋ค. ์ต๊ทผ ๋ฐฐ์ด ๊ฒ๋ค์ ํ์ฉํด ๋ณด๊ธฐ ์ํ ํ๋ก์ ํธ์ธ๋ฐ, ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ํ ๋ฆฌ์คํธ ์ถ๋ ฅ, ์์ธ ํ์ด์ง, ์์ , ์ญ์ ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋
jimin-log.tistory.com
๋๋ฌธ์ ์ฐ๋ฆฌ๋ getList( ) ๋ฉ์๋๋ ํํ์ด์ง๋น ๋ค์ด๊ฐ๋ ๊ฒ์๋ฌผ ๋ด์ฉ๋ง ๋ฟ๋ ค์ค ์ ์๋๋ก ์์ ๋์ด์ผํ๋ค.
์ด๋ฒ์๋ ํ ํ์ด์ง๋น ๊ฒ์๋ฌผ ๋ฆฌ์คํธ๋ฅผ ๋๋์ด ๋ฟ๋ ค์ฃผ๋ ๊ธฐ๋ฅ๊ณผ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๋ ค๊ณ ํ๋ค.
๐ก ๋ฆฌ์คํธ์ ํ์ํ ๋ด์ฉ
1 ) ํ ํ์ด์ง ๋น ๊ฒ์๋ฌผ ์ ( 10๊ฐ )
2 ) ํ์ด์ง ์ด๋ํ๋ฉด ๊ฒ์๋ฌผ์ ๋ณํ ( start / end)
1ํ์ด์ง = 1๋ฒ๋ถํฐ 10๋ฒ ๊ฒ์๋ฌผ ๋ ธ์ถ
2ํ์ด์ง = 11๋ฒ๋ถํฐ 20๋ฒ ๊ฒ์๋ฌผ ๋ ธ์ถ
3 ) ํค์๋ ๊ฒ์์ ๊ฒ์๋ฌผ ๋ณํ
1. ๋ฆฌ์คํธ ๊ตฌํ
๐ซ BoardVo.java
๋จผ์ ์์ํ๊ธฐ ์ ์ ๋ฆฌ์คํธ๋ฅผ ๋ฝ์์ฃผ๊ธฐ ์ํด์ BoardVo๋ ์ฐ๊ด์ด ๋์ด ์์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง๋ง ํ์ธ์ ํด๋ณด์.
๊ฐ ๊ฒ์๋ฌผ์ ๋ด์ฉ์ ๋ฐ์์ฃผ๊ธฐ ์ํ ๋ณ์๋ค์ด ๋ค์ด๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์คํธ์ ๋ค์ด๊ฐ๋ ๋ด์ฉ๋ค์ ๋ด์ ์์ฑ์๋ ์๋ค.
public class BoardVo {
private int num;
private int no;
private String title;
private String content;
private int hit;
private String regDate;
private int userNo;
private String userName;
...
// ๋ฆฌ์คํธ ๊ฐ์ฒด
public BoardVo(int no, String title, String content, int hit, String regDate, int userNo, String userName) {
this(no, title, hit, regDate, userNo, userName);
this.content = content;
}
...
}
๐ซ BoardDao.java
public List < BoardVo > getList ( ) ;
๊ธฐ์กด ๋ฆฌ์คํธ ๋ฉ์๋๋ ํ์ด์ง ๊ฐ๊ณผ ํค์๋ ๊ฐ์ ๋ฐ์์ ์ฌ์ฉํ ์ ์์๋ค.
์ฐ๋ฆฌ๋ ๊ฒ์ ํค์๋, ํ์ด์ง ๊ฐ ์ ๋ฐ์์ฃผ์ด ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
public List<BoardVo> getList(String kwd,String nowPage);
๐ซ BoardDaoImpl.java
1. ๊ฒ์์ด, ํ์ ํ์ด์ง๋ฅผ ๋ฐ๋ ๊ฒ์๋ฌผ ๋ชฉ๋ก์กฐํ
public List<BoardVo> getList(String kwd,String nowPage) {
...
}
1) ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก ๋ฐ์ ํค์๋์ ํ์ด์ง ๋ฒํธ๊ฐ ํน์ null๊ฐ์ ๋ฐ์ ๊ฒฝ์ฐ ์ด๊ธฐํ ํด์ค๋ค.
if(kwd == null) kwd = "";
if(nowPage == null) nowPage = "1";
2) ํ์ด์ง ๋ฒํผ์ ํด๋ฆญํ์ ๊ฒฝ์ฐ ๋ฐ์์ค๋ ๋ฆฌ์คํธ์ ์์๊ณผ ๋์ด ๋ณ๊ฒฝ๋์ด์ผํ๋ค.
ํ์ด์ง ์์ฑ์์ ๊ฐ์ ๋ฃ์ด start์ end ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
ex) 2ํ์ด์ง ํด๋ฆญ์ > 11๋ฒ ๋ถํฐ 20๋ฒ ์ถ๋ ฅ
pageingVo pageing = getListCount(kwd ,nowPage);
int start = pageing.getStart();
int end = pageing.getEnd();
3) SQL๋ฌธ์ ๋ฃ๊ธฐ ์ํด ๊ฐ ์์
์ ๋ค๋ก ์ด๋ค ๊ฐ์ด ์์ด๋ ํด๋น ํค์๋๊ฐ ์์ผ๋ฉด ๊ฒ์์ด ๋๊ฒ ํ๋ ค๋ฉด ํค์๋์ %๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผํ๋ค.
String kwdup = "%" + kwd + "%";
4) DB ์ฐ๊ฒฐ๊ณผ ๋ฐํ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํ ์ค๋น
๋ฉ์๋ ๋ฐํ ๊ฐ์ ๊ตฌํด์ฃผ๋ ๋ถ๋ถ์ด ์คํ์ด ๋์ง ์๋๋ผ๋ ๊ฐ์ด ์์ด์ ์ค๋ฅ๊ฐ ๋์ง ์๊ธฐ ์ํด ๋ฐํ๋๋ List๋ฅผ ์ด๊ธฐํํด์ค๋ค.
DB๊ฐ ์ ์์ด ๋๊ณ ๋ด์ฉ์ด ์ ์คํ๋๋ค๋ฉด, try ์์์ ์ค์ ๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์ด์ฉํด ๊ฐ์ ๋ฐ๊ณ List์ ๋ฃ์ด์ ๋ฉ์๋์ ๋ฐํ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ค.
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<BoardVo> list = new ArrayList<BoardVo>();
try {
conn = getConnection();
5) SQL๋ฌธ
๊ฒ์์ ํ๋ฉด ์ ๋ชฉ, ๋ด์ฉ, ๊ธ์ด์ด, ์์ฑ์ผ ์์์ ํด๋น ํค์๋๊ฐ ์๋์ง ๊ฒ์์ด ๊ฐ๋ฅํ๋ค.
์์์ ๋ฐ์์ค ์์ ๋ฒํธ์ ๋ง์ง๋ง ๋ฒํธ๋ ๋ฃ์ด์ค์ ํ ํ์ด์ง์ ๋ค์ด๊ฐ ๋ฆฌ์คํธ๋ง ์ถ์ถ์ด ๊ฐ๋ฅํ๋ค.
// 3. SQL๋ฌธ ์ค๋น / ๋ฐ์ธ๋ฉ / ์คํ
String query = "SELECT b.*" +
"FROM (" +
" SELECT ROWNUM num,T1.NO,T1.TITLE,T1.HIT,T1.REG_DATE ,T1.CONTENT,T1.USER_NO,T2.NAME " +
" FROM (SELECT * " +
" FROM BOARD " +
" ORDER BY REG_DATE desc)T1 " +
" INNER JOIN USERS T2 " +
" ON (T1.USER_NO = T2.NO) " +
" WHERE T1.TITLE LIKE ? " +
" OR T1.CONTENT LIKE ? " +
" OR T1.REG_DATE LIKE ? " +
" OR T2.NAME LIKE ?) b " +
"WHERE num BETWEEN ? AND ?";
pstmt = conn.prepareStatement(query);
pstmt.setString(1, kwdup);
pstmt.setString(2, kwdup);
pstmt.setString(3, kwdup);
pstmt.setString(4, kwdup);
pstmt.setInt(5, start);
pstmt.setInt(6, end);
rs = pstmt.executeQuery();
// 4.๊ฒฐ๊ณผ์ฒ๋ฆฌ
while (rs.next()) {
int num = rs.getInt("num");
int no = rs.getInt("no");
String title = rs.getString("title");
String content = rs.getString("content");
int hit = rs.getInt("hit");
String regDate = rs.getString("reg_date");
int userNo = rs.getInt("user_no");
String userName = rs.getString("name");
5) ์ถ์ถํ ๋ฆฌ์คํธ์ ๊ฐ๋ค์ BoardVo๋ก ๋ฃ์ด์ฃผ๊ณ list๋ก ๋ง๋ค์ด์ค๋ค.
๊ฒ์๋ฌผ์ด ์ ๋ ฅ๋ ๋ ์ง๊ฐ ์ฟผ๋ฆฌ๋ฌธ์์ sysdate๋ก ๋ค์ด๊ฐ ๋ ๋,์,์ผ,์๊ฐ์ด ๋ชจ๋ ์ถ๋ ฅ๋๊ฒ ๋์ด์๋ค.
๋ ๋ - ์ - ์ผ ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด์ ๋ ์ง ํฌ๋ฉง์ ๋ณ๊ฒฝํ์ฌ BoardVo ์ ๊ฐ์ ๋ฃ์ด์ฃผ์๋ค.
// ๋ ์ง ํฌ๋ฉง ๋ณ๊ฒฝ ( ๋
๋ ์๋ฌธ์ / ์ ๋๋ฌธ์ / ์ผ ์๋ฌธ์ )
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // ํฌ๋ฉง ์ค์
Date date = formatter.parse(regDate); // ํฌ๋ฉง์ ๋ฐ์ดํฐ ํ์
์ผ๋ก ๋ฐ์ ์ ์๋ค.
String regDate1 = formatter.format(date); // ๋ฐ์ดํฐํ์ ๋ค์ String ํ์
์ผ๋ก ๋ณ๊ฒฝ
BoardVo vo = new BoardVo(num, no, title,content, hit, newdate, userNo, userName);
list.add(vo);
}
} catch (SQLException | ParseException e) {
System.out.println("error:" + e);
} finally {
// 5. ์์์ ๋ฆฌ
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
System.out.println("error:" + e);
}
}
return list;
}
๐ซ BoardServlet.java
request.setCharacterEncoding("UTF-8");
String actionName = request.getParameter("a");
1. ์ ์ฒด ๊ฒ์๋ฌผ ๋ชฉ๋ก ์กฐํ
pageingVo pageing = dao.getListCount(kwd,nowpage);
if ("list".equals(actionName)) {
request.setCharacterEncoding("utf-8");
String kwd = request.getParameter("kwd");
String nowpage = request.getParameter("nowPage");
// ์ด๊ธฐํ
if(kwd == null) kwd = "";
if(nowpage == null) nowpage = "1";
// ๋ฆฌ์คํธ ๊ฐ์ ธ์ค๊ธฐ
BoardDao dao = new BoardDaoImpl();
List<BoardVo> list = dao.getList(kwd,nowpage);
pageingVo pageing = dao.getListCount(kwd,nowpage);
// ๋ฆฌ์คํธ ํ๋ฉด์ ๋ณด๋ด๊ธฐ
request.setAttribute("pageing", pageing);
request.setAttribute("list", list);
WebUtil.forward(request, response, "/WEB-INF/views/board/list.jsp");
}
2 . ๊ฒ์
List<BoardVo> list = dao.getList(kwd,nowpage);
else if ("search".equals(actionName)) {
request.setCharacterEncoding("utf-8");
String kwd = request.getParameter("kwd");
String nowpage = request.getParameter("nowPage");
if(kwd == null) kwd = "";
if(nowpage == null) nowpage = "1";
// ๋ฆฌ์คํธ ๊ฐ์ ธ์ค๊ธฐ
BoardDao dao = new BoardDaoImpl();
List<BoardVo> list = dao.getList(kwd,nowpage);
// ์ ์ฒด ๊ฐฏ์ ๋ฐ ํ์ด์ง์ง ์ค์ ์
ํ
pageingVo pageing = dao.getPaging(kwd,nowpage);
// ๋ฆฌ์คํธ ํ๋ฉด์ ๋ณด๋ด๊ธฐ
request.setAttribute("pageing", pageing);
request.setAttribute("list", list);
String url = "/WEB-INF/views/board/list.jsp";
WebUtil.forward(request, response, url);
}
๐ซ List.jsp
1. ๊ฒ์ ์ฐฝ
๊ฒ์ ํผ(form) Post ํ์์ผ๋ก BoardServlet.java ์ ์ ๋ฌ ํ๊ณ ์๋ค.
a ํ๊ทธ๋ก ์คํ ๊ฐ์ search๋ก ์ ๋ฌ / nowPage ์ด๊ธฐ ๊ฐ์ ์ฒ์์ 1ํ์ด์ง๋ก ์ ๋ฌํด์ค๋ค. kwd๋ก ๊ฒ์ ๊ฐ์ ์ ๋ฌํด์ฃผ๊ณ ๋ง์ฝ ํค์๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๋ฐ์์๊ฒฝ์ฐ, value ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ค์ ๊ฒ์ ํ์๋ ํค์๋๊ฐ ์ฌ๋ผ์ง์ง ์๊ฒ ํ์ํด์ค๋ค.
<form id="search_form" action="/mysite_jimin/board" method="post">
<input type="hidden" name="a" value="search">
<input type="hidden" name="nowPage" value="1">
<input type="text" id="kwd" name="kwd" value="${param.kwd}">
<input type="submit" value="์ฐพ๊ธฐ">
</form>
2. ๊ฒ์๋ฌผ ๋ฆฌ์คํธ
1 ) list ๊ฐ ์์ ์ ๋ ธ์ถ๋ ๋ด์ฉ
<c:if test="${list.size() == 0}">
...
</c:if>
2 ) list ๊ฐ ์์ผ๋ฉด ๋ฐ๋ณตํ์ฌ ์ถ๋ ฅํ๋ค.
<c:forEach items="${list}" var="vo">
...
</c:forEach>
<table class="tbl-ex">
<tr>
<th>๋ฒํธ</th>
<th>์ ๋ชฉ</th>
<th>๋ด์ฉ</th>
<th>๊ธ์ด์ด</th>
<th>์กฐํ์</th>
<th>์์ฑ์ผ</th>
<th> </th>
</tr>
<c:if test="${list.size() == 0}">
<tr>
<td colspan="7" style="text-aling:center;">๋ด์ฉ์ด ์์ต๋๋ค</td>
</tr>
</c:if>
<c:forEach items="${list}" var="vo">
<tr>
<td>${vo.num }</td>
<td><a href="/mysite_jimin/board?a=read&no=${vo.no }&nowPage=${pageing.nowPage}&kwd=${param.kwd}">${vo.title}</a></td>
<td>${vo.content}</td>
<td>${vo.userName}</td>
<td>${vo.hit}</td>
<td>${vo.regDate}</td>
<td>
<c:if test="${authUser.no == vo.userNo }">
<a href="/mysite_jimin/board?a=delete&no=${vo.no }&nowPage=7" class="del">์ญ์ </a>
</c:if>
</td>
</tr>
</c:forEach>
</table>
'BackEnd > Servlet ยท JSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Servlet&JSP ] HTTP ์์ฒญ ๋ฐ์ดํฐ GET ยท POST ยท HTTP message body (1) | 2023.03.20 |
---|---|
[ Servlet / JSP ] Model 1 ๋ฐฉ์๊ณผ Model 2 ๋ฐฉ์ ๋น๊ต (0) | 2023.02.22 |
[ Project / Servlet ยท JSP ] 1์ฐจ ๊ณผ์ Model 2 ๋ฐฉ์ - (1) ๊ฒ์ํ ๋ง๋ค๊ธฐ ( ํ์ด์ง ๋ฒํผ ๊ธฐ๋ฅ ) (0) | 2023.02.15 |
[ Servlet / JSP ] JDBC ์ฐ๋ (0) | 2023.02.05 |
[ Servlet / JSP ] JSTL ยท EL ๊ธฐ๋ณธ ๋ฌธ๋ฒ (0) | 2023.02.05 |