[JSP] - 게시물 추천, 좋아요 중복없이 한번만 하기
○ 게시물 추천, 좋아요 중복없이 한번만 하기 |
// LkieyDTO.java package likey; public class LikeyDTO { String userID; String userWriteTitle; String userIP; public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public String getUserWriteTitle() { return userWriteTitle; } public void setUserWriteTitle(String userWriteTitle) { this.userWriteTitle = userWriteTitle; } public String getUserIP() { return userIP; } public void setUserIP(String userIP) { this.userIP = userIP; } public LikeyDTO(String userID, String userWriteTitle, String userIP) { super(); this.userID = userID; this.userWriteTitle = userWriteTitle; this.userIP = userIP; } } // LikeyDAO.java (좋아요 추천 디비 접근) package likey; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class LikeyDAO { private Connection conn; public LikeyDAO() { try { String dbURL = "jdbc:mysql://localhost:3306/test"; String dbID = "root"; String dbPassword = "wlgns930"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(dbURL, dbID, dbPassword); } catch (Exception e) { e.printStackTrace(); } } // userID, userWriteTitle 둘 다 pk, nn 이므로 중복이 불가 !!! // 좋아요한 사람들의 데이터베이스 추가 기능 public int like(String userID, String userWriteTitle, String userIP) { String SQL = "INSERT INTO LIKEY VALUES (?, ?, ?)"; try { PreparedStatement pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); pstmt.setString(2, userWriteTitle); pstmt.setString(3, userIP);
return pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return -1; }
} // fileDAO.java (추천 및 좋아요 통해 실제 해당 개수가 올라가는) // 게시물 추천 public int like(String userWriteTitle) { PreparedStatement pstmt = null; try { String SQL = "UPDATE userwritetest SET userLikeAmount = userLikeAmount + 1 WHERE userWriteTitle = ?"; pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userWriteTitle); return pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { try { if(pstmt != null) pstmt.close(); if(conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } return -1; } // userWriteDetailView.jsp (유저 게시물들 자세히 보기) <!-- 추천 및 삭제 폼 --> <div class="row"> <div class="col-lg-6 mt-3"> <a onclick="return confirm('추천하시겠습니까?')" href="./userLikeAction.jsp?userWriteTitle=<%=userWriteTitle%>">추천</a> <a onclick="return confirm('삭제하시겠습니까?')" href="./userDeleteAction.jsp?userWriteID=<%= userWriteID %>&userWriteTitle=<%=userWriteTitle%>">삭제</a> </div> </div> // userLikeAction.jsp (실제 좋아요 추천 기능을 담당) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="user.UserDAO"%> <%@ page import="file.fileDAO"%> <%@ page import="likey.LikeyDAO"%> <%@ page import="java.io.PrintWriter"%> <%! public static String getClientIP(HttpServletRequest request) { String ip = request.getHeader("X-FORWARDED-FOR"); if (ip == null || ip.length() == 0) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0) { ip = request.getRemoteAddr() ; } return ip; } %> <% // 로그인한 유저의 아이디를 가져오기(세션 확인) String userID = null; if(session.getAttribute("userID") != null) { userID = (String) session.getAttribute("userID"); } if(userID == null) { PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('로그인을 해주세요.');"); script.println("location.href = 'userLogin.jsp'"); script.println("</script>"); script.close(); return; } request.setCharacterEncoding("UTF-8");
// 이전의 파라매터로 보낸 게시판 글제목 가져오기 String userWriteTitle = null; if(request.getParameter("userWriteTitle") != null) { userWriteTitle = (String) request.getParameter("userWriteTitle"); }
fileDAO file = new fileDAO(); LikeyDAO likeyDAO = new LikeyDAO(); // userID와 userWriteTtilte을 PK, NN 설정이기때매 중복이 불가 int result = likeyDAO.like(userID, userWriteTitle, getClientIP(request)); // 정상적으로 1번 데이터가 들어가면 1이 출력되고 if (result == 1) { result = file.like(userWriteTitle); if (result == 1) { // 1인경우 디비에서 해당 게시물 추천 완료 PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('추천이 완료되었습니다.');"); script.println("location.href='index.jsp'"); script.println("</script>"); script.close();
return; } else { PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('데이터베이스 오류가 발생했습니다.');"); script.println("history.back();"); script.println("</script>"); script.close();
return; } } else { // 이미 PK, NN으로 설정되어 중복되면 1 반환이 되지 않음 PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('이미 추천을 누른 글입니다.');"); script.println("history.back();"); script.println("</script>"); script.close(); return; } %> |
'JSP 개발 참고' 카테고리의 다른 글
[JSP] - 뒤로가기 history.back() 이벤트 (0) | 2018.06.14 |
---|---|
[JSP] - 자신이 쓴 게시물만 삭제하기 (0) | 2018.05.16 |
[JSP] - 이미지컨텐츠 row 분할하여 출력(nth-child) (0) | 2018.05.14 |
[JSP] - 다른 테이블에서 작성자 프로필사진 가져오기 (0) | 2018.05.06 |
[JSP] - 게시물 상세 DB 출력하기 (0) | 2018.05.05 |