2019.02.20 Model2 : 게시판 만들기(4)

2019. 2. 20. 10:52JSP

#1 BBS(게시판)에서 변수값으로 

조회수 업데이트(올리기)하는 작업


bbs.jsp에서 bbsId값을 클릭했을 경우 해당하는 글의 내용이 보이는 하이퍼링크를 걸어준다.

-> 여기서 ? 뒤에 값이 파라미터의 값이므로 받아오는 변수이름도 같아야한다.



bbsDao.java에서 조회수를 업데이트할 메소드를 생성한다 -> hitUpdate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    // hitUpdate 조회수 업데이트 메소드
    public int hitUpdate(String bbsId) {
        StringBuffer query = new StringBuffer();
        con = this.getConnection();
        query.append("UPDATE bbs SET BBSHIT = BBSHIT + 1 WHERE BBSID=? "); // 업데이트 SQL문
        try {
            pstmt = con.prepareStatement(query.toString());
            pstmt.setString(1, bbsId);
            System.out.println(pstmt);
            result = pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            this.close(con, pstmt, null);
        }
        return result;
    }// hitUpdate
cs



메소드를 작업하게 될 bbsViewController.java를 com.bbs.controller패키지 안에서 생성한다.

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
package com.bbs.controller;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.bbs.dao.bbsDao;
import com.bbs.dto.bbsDto;
 
public class bbsViewController extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        process(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        process(req,resp);
    }
    
    
    //DB에서 bbsID값으로 검색하여 내용을 가져올 Dao의 메소드를 호출하는 메소드
    private void process(HttpServletRequest req, HttpServletResponse resp) {
        String bbsId = req.getParameter("bbsId"); //bbs.jsp에서 클릭된 bbsId 값을 받아온다.
        bbsDao bDAO = bbsDao.getInstance();
        bbsDto bDTO = new bbsDto();
        int result = bDAO.hitUpdate(bbsId);//조회수를 늘리는 메소드 호출
        bDTO = bDAO.selectById(bbsId); // bbsId값으로 자료를 조회해온다
        
        req.setAttribute("bbsView", bDTO); //받아온 내용은 bbsView에 셋팅
        RequestDispatcher rd = req.getRequestDispatcher("WEB-INF/bbsView.jsp");
        
        try {
            rd.forward(req, resp);
        } catch (ServletException | IOException e) {
            e.printStackTrace();
        }
    
    }
}
 
cs



#2 BBSID값으로 자료를 조회하는 작업


bbsDao에 bbsId값으로 조회하는 메소드를 작성한다.

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
    // bbsID값으로 DB의 해당하는 행을 출력하는 메소드
    public bbsDto selectById(String bbsId) {
        bbsDto bDTO = new bbsDto();
        con = this.getConnection();
        StringBuffer query = new StringBuffer();
 
        query.append("SELECT * ");
        query.append("FROM bbs ");
        query.append("WHERE BBSID = ? ");
        try {
            pstmt = con.prepareStatement(query.toString());
            pstmt.setString(1, bbsId);
            rs = pstmt.executeQuery(); // 유의할 것
 
            while (rs.next()) { 
                // 행은 하나이기 때문에 while은 필요없지만 형식상 추가한다.
                bDTO.setId(rs.getString("ID"));
                bDTO.setBbsId(rs.getString("BBSID"));
                bDTO.setBbsTitle(rs.getString("BBSTITLE"));
                bDTO.setBbsDate(rs.getString("BBSDATE"));
                bDTO.setBbsCategory(rs.getString("BBSCATEGORY"));
                bDTO.setBbsContent(rs.getString("BBSCONTENT"));
                bDTO.setBbsHit(rs.getString("BBSHIT"));
            }
 
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //rs를 사용해서 원칙적으로 끊어줘야되지만 계속사용하므로 굳이 끊어주지않아도 된다.
            this.close(con, pstmt, null); 
        }
        return bDTO;
    }// selectById
cs


마찬가지로 bbsViewController.java에서 생성된 메소드 selectById를 동작하게 추가한다.