본인 게시물 조회수 증가 방지
게시판을 만들고 조회수 증가까지 구현하는 것이 강사님의 요구사항이었다.
그 증가에는 어떠한 조건이 없었기 때문에 게시물 클릭 후
화면이 전환하면서 조회수가 증가하는 메소드가 실행되도록 구현했었다.
문제는 내가 작성한 게시물을 클릭해도 계속해서 게시물의 조회수가 증가하는 것인데
그 부분이 거슬려서 명령어를 추가해서 제한을 걸어버렸다.
Controller
1. 로그인이 되어있다면 세션으로부터 로그인이 된 정보를 받아올 수 있다.
(UserVo authUser = (UserVo)session.getAttribute("authUser");)
2. 게시물 번호로 게시물 작성자에 대한 정보를 얻어온다.
(BoardVo board = bDao.getBoard(boardNo);)
3. if문을 사용해서 로그인, 로그아웃 상태를 확인한다
그 후 로그인이 되어있지 않으면 null 상태로 authUser에 반환되었을 것이므로
무조건 조회수를 증가시킨다.
(if(authUser == null) { bDao.boardCount(boardNo);})
4. 로그인한 상태라면 로그인 사용자의 정보와 게시물 작성자에 대한 정보가 일치한 지 확인한 후
그 둘이 일치하지 않을 경우에 조회수를 증가시킨다.
else {
if(authUser.getNo() != board.getUserNo()){
bDao.boardCount(boardNo);
System.out.println("hit");
}
}
else if("read".equals(action)) {
HttpSession session = request.getSession();
UserVo authUser = (UserVo)session.getAttribute("authUser");
int boardNo = Integer.parseInt(request.getParameter("no"));
BoardDao bDao = new BoardDao();
BoardVo board = bDao.getBoard(boardNo);
if(authUser == null) {
bDao.boardCount(boardNo);
System.out.println("hit");
}else {
if(authUser.getNo() != board.getUserNo()){
bDao.boardCount(boardNo);
System.out.println("hit");
}
}
// 조회수 증가를 바로 반영한 정보를 가져오기 위해 다시 한번 getBoard.
board = bDao.getBoard(boardNo);
request.setAttribute("board", board);
WebUtil.forward(request, response, "/WEB-INF/views/board/read.jsp");
}
Dao
쿼리문에서 바로 +1을 시키는 방법으로 구현했다.
public int boardCount(int no) {
int count = -1;
getConnection();
try {
// SQL문 준비 / 바인딩 / 실행
String query = "";
query += " update board ";
query += " set hit = hit+1 ";
query += " where no = ? ";
pstmt = conn.prepareStatement(query);
pstmt.setInt(1, no);
count = pstmt.executeUpdate();
// 결과처리
System.out.println(count + "건의 게시글의 조회수가 증가되었습니다.");
} catch (SQLException e) {
System.out.println("error:" + e);
}
close();
return count;
}
사실 저 방법도 의미가 없는 게
내 게시물의 조회수를 올리고 싶다면 로그아웃 해서 클릭하면 조회수가 증가하게 된다.
궁극적으로 조회수가 필요한 홈페이지의 경우에는
다른 방법을 사용해서 동일 IP의 경우 조회수 증가를 제한 또는 일정 시간 동안 제한시키는 방향으로
구현해야 하지 않을까 생각한다.
'Server > Java' 카테고리의 다른 글
[Java] OpenJDK 11 설치 (0) | 2022.09.19 |
---|---|
[Java] JRE 버전 변경 (0) | 2022.06.14 |
[Jsp&Servlet] 검색과 리스팅을 한번에! Controller & DAO & jsp (0) | 2022.06.09 |
[Jsp&Servlet] EL 같은 이름의 내장 객체에 대한 우선 순위 (0) | 2022.06.09 |
[Jsp&Servlet] JSTL <c:foreach> , ${sessionScope}태그; 게시물 목록 불러오기 (0) | 2022.06.08 |