본문 바로가기

Programming/SERVER

DAY 129. MVC2 패턴 - 쿠키를 활용한 게시글 조회수 기능

 

조회수 기능

 

- 새로 고침할 때마다 조회 수가 증가해서 조회 수가 조작될 수 있는 것을 방지하는 로직이다.

- 쿠키에 조회한 내용을 기록해놓고, 한 번 조회하고나면 그 뒤에는 새로고침하거나 다시 조회했던 게시물을 누른다고 해서 조회 수가 증가되지 않도록 한다.

 

 

01. ViewServlet.java

- 쿠키에 조회한 이력이 있는지 확인하는 로직

- Cookie 객체를 활용한다.

Cookie[] cookies = request.getCookies();
    	String boardHistory = "";
    	boolean hasRead = false;
    	
    	if(cookies != null) {
    		String name = null;
    		String value = null;
    				
    			for(Cookie cookie : cookies) {
    				name = cookie.getName();
    				value = cookie.getValue();
    				
    					if("boardHistory".equals(name)) {
    						boardHistory = value;
    						if(value.contains("|" + no + "|")) {
    							hasRead = true;
    							
    							break;
    						}
    					}
    			}
    	}
    	
    	// 2. 읽은 적 없는 게시글이면 cookie에 기록
    	if(!hasRead) {
    		Cookie cookie = new Cookie("boardHistory", boardHistory + "|" + no + "|");
    		
    		cookie.setMaxAge(-1);
    		response.addCookie(cookie);
    	}

 

02. BoardService.java

- 기존에 연결되어있던 게시글 번호로 해당 게시글을 찾는 메소드 findBoardbyNo의 매개값으로  boolean hasRead를 추가한다.

- 조회수 증가하는 로직을 추가한다.

if(board != null && !hasRead) {
	int result = dao.updateHits(connection, board);

  if(result > 0) {
  	commit(connection);
  } else {
  	rollback(connection);
  }

}

 

03. BoardDao.java

- PreparedStatement 객체 생성

- UPDATE 쿼리 작성

- PreparedStatement 의 변수에는 connection 객체로 얻어온 PreparedStatement 쿼리 결과를 담아준다.

- 위치 홀더에 해당하는 값 지정

- close(pstmt)