[211212] 마이페이지 - 유저 (찜한 강의, 리뷰 수정)
cf) 일반 유저로 로그인 후 메인의 강의 목록클릭 -> 강의 상세페이지
https://talkingpotatosescape.tistory.com/94
마이페이지 - 고수 참고
mypage
신청 강의 보기
l_apply_list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"
import="com.web.lecture.model.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link type="text/css" rel="stylesheet" href="/static/css/main.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
<link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Font+Name">
<script src="/static/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".l_info").click(function(){
var tr = $(this);
var td = tr.children();
var l_no = td.eq(0).text()
var l_form = document.createElement('form');
l_form.name='l_form';
l_form.method='post';
l_form.action='/l_detail';
var lecture = document.createElement('input');
lecture.setAttribute("type","hidden");
lecture.setAttribute("name","l_no");
lecture.setAttribute("value",l_no);
l_form.appendChild(lecture);
document.body.appendChild(l_form);
l_form.submit();
})
});
</script>
<title>내 강의 목록 보기</title>
</head>
<body>
<div id="header">
<nav id="menu">
<a href="/" style="padding-left: 30px;"> <img src="/static/img/logo1.png"></a>
<% boolean logined = (boolean)request.getAttribute("s_logined");
if(logined){
boolean U_define = (boolean)request.getAttribute("U_define");
if(U_define){%>
<h3 class="u_info"><%=request.getAttribute("U_name")%>[고수]님</h3>
<% }else{%>
<h3 class="u_info"><%=request.getAttribute("U_name")%>[유저]님</h3>
<% }
} %>
<div class="right">
<% if(logined){ %><!-- 서인혜: div에 class삽입, h3에서 span으로 변경-->
<a href="/mypageController" class="tag1"><span>마이페이지</span></a>
<a href="/logout" class="tag1"><span>로그아웃</span></a>
<%}else{ %>
<a href="/join" class="tag1"><span>회원가입</span></a>
<a href="/login" class="tag1"><span>로그인</span></a>
<%} %>
</div>
</nav>
</div>
<div class="title">
<h2>내 강의 목록</h2>
</div>
<div>
<div class="block">
<table>
<tr class="th_title">
<th>강의번호</th>
<th>제목</th>
<th>고수이름</th>
<th>분류</th>
<th>현재인원/모집인원</th>
<th>비용</th>
<th>상태</th>
</tr>
<%
List<LectureDTO> l_board = (List<LectureDTO>)request.getAttribute("l_board");
for(LectureDTO l_dto : l_board){
%>
<tr style="cursor:pointer;" class="l_info">
<td><%=l_dto.getL_no() %></td>
<td><%=l_dto.getL_name()%></td>
<td><%=l_dto.getS_name() %></td>
<td><%=l_dto.getL_category() %></td>
<td><%=l_dto.getL__present_num() %>/<%=l_dto.getL__total_num()%></td>
<td><%=l_dto.getL_price() %></td>
<td><%=l_dto.getState() %></td>
</tr>
<%
}
%>
</table>
</div>
</div>
</body>
</html>
L_apply : Controller
package com.web.user.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.web.lecture.model.LectureService;
@WebServlet("/user/L_apply")
public class L_apply extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(request.getAttribute("l_no") != null) {
HttpSession session = request.getSession();
int s_user_id = 0;
if(session.getAttribute("s_user_id") != null) {
s_user_id = (int)session.getAttribute("s_user_id");
}
if(s_user_id==0) {
String l_no = (String)request.getAttribute("l_no");
LectureService service = new LectureService();
boolean result1 = service.c_minus(l_no,s_user_id);
request.setAttribute("c_minus_result",result1);
boolean result2 = service.l_plus(l_no,s_user_id);
request.setAttribute("l_plus_result",result2);
}
String view = "";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
} else {
String view = "";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
}
}
찜한 강의 보기
cart.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"
import="com.web.lecture.model.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>장바구니</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Font+Name">
<link type="text/css" rel="stylesheet" href="/static/css/cart.css">
<script src="/static/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".remove").click(function(){
var tr = $(this).parent().parent();
var td = tr.children();
var l_no = td.eq(0).text()
var l_form = document.createElement('form');
l_form.name='l_form';
l_form.method='post';
l_form.action='/장바구니 삭제';
var lecture = document.createElement('input');
lecture.setAttribute("type","hidden");
lecture.setAttribute("name","l_no");
lecture.setAttribute("value",l_no);
l_form.appendChild(lecture);
document.body.appendChild(l_form);
l_form.submit();
})
$(".detail").click(function(){
var tr = $(this).parent().parent();
var td = tr.children();
var l_no = td.eq(0).text()
var l_form = document.createElement('form');
l_form.name='l_form';
l_form.method='post';
l_form.action='/l_detail';
var lecture = document.createElement('input');
lecture.setAttribute("type","hidden");
lecture.setAttribute("name","l_no");
lecture.setAttribute("value",l_no);
l_form.appendChild(lecture);
document.body.appendChild(l_form);
l_form.submit();
})
});
</script>
</head>
<body>
<div id="header">
<nav id="menu">
<div id="logo">
<a href="/"><img src="/static/img/logo1.png"></a>
</div>
<div id="info">
<% boolean logined = (boolean)request.getAttribute("s_logined");
if(logined){
boolean U_define = (boolean)request.getAttribute("U_define");
if(U_define){%>
<h3 class="u_info"><%=request.getAttribute("U_name")%>[고수]님 환영합니다.</h3>
<% }else{%>
<h3 class="u_info"><%=request.getAttribute("U_name")%>[유저]님 환영합니다.</h3>
<% }
} %>
</div>
<div class="right">
<% if(logined){ %>
<a href="/mypageController" class="tag1"><span>마이페이지</span></a>
<a href="/logout" class="tag1"><span>로그아웃</span></a>
<%}else{ %>
<a href="/join" class="tag1"><span>회원가입</span></a>
<a href="/login" class="tag1"><span>로그인</span></a>
<%} %>
</div>
</nav>
</div>
<section>
<div class="title">
<h2>찜한 강의 목록</h2>
</div>
<div class="block">
<table>
<tr class="th_title">
<th>강의번호</th>
<th>제목</th>
<th>고수이름</th>
<th>분류</th>
<th>현재인원/모집인원</th>
<th>비용</th>
</tr>
<%
List<LectureDTO> l_board = (List<LectureDTO>)request.getAttribute("l_board");
for(LectureDTO l_dto : l_board){
%>
<tr>
<td><%=l_dto.getL_no() %></td>
<td><%=l_dto.getL_name()%></td>
<td><%=l_dto.getS_name() %></td>
<td><%=l_dto.getL_category() %></td>
<td><%=l_dto.getL__present_num() %>/<%=l_dto.getL__total_num()%></td>
<td><%=l_dto.getL_price() %></td>
<td>
<button class="remove">삭제</button>
<button class="detail">더보기</button>
</td>
</tr>
<%
}
%>
</table>
</div>
</section>
</body>
</html>
CartController
package com.web.user.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.web.lecture.model.*;
@WebServlet("/user/Cart")
public class CartController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LectureService service = new LectureService();
HttpSession session = request.getSession();
int s_user_id = 0;
if(session.getAttribute("s_user_id") != null) {
s_user_id = (int)session.getAttribute("s_user_id");
List<LectureDTO> l_board = service.cart_list(s_user_id);
request.setAttribute("l_board", l_board);
}
if(s_user_id==0) {
request.setAttribute("s_logined", false);
} else {
request.setAttribute("s_logined", true);
request.setAttribute("s_user_id",s_user_id);
String name = service.searchName(s_user_id);
request.setAttribute("U_name",name);
if(service.U_define(s_user_id)) {
request.setAttribute("U_define", true);
if(service.P_define(s_user_id)) {
request.setAttribute("P_define", true);
}else {
request.setAttribute("P_define", false);
}
} else {
request.setAttribute("U_define", false);
}
}
String view="/WEB-INF/jsp/user/cart.jsp";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
LectureDAO 의 찜 목록 가져오는 cart_list() 메서드 s_user_id = u_no
public List<LectureDTO> cart_list(int s_user_id) {
String query = "SELECT F.L_NO,"
+ " A.L_NAME,"
+ " C.U_NAME,"
+ " D.CG_NAME,"
+ " A.L_TOTAL_NUM,"
+ " A.L_PRICE,"
+ " COUNT(E.L_NO) AS L_PRESENT_NUM"
+ " FROM CART F"
+ " JOIN LECTURE A ON (A.L_NO=F.L_NO)"
+ " JOIN SELLER B ON (A.S_NO=B.S_NO)"
+ " JOIN MEMBER C ON (B.U_NO=C.U_NO)"
+ " JOIN CATEGORY D ON (B.CG_NO=D.CG_NO)"
+ " RIGHT JOIN APPLY E ON (E.L_NO=A.L_NO)"
+ " WHERE F.U_NO = "+s_user_id
+ " GROUP BY F.L_NO, A.L_NAME,C.U_NAME,D.CG_NAME,A.L_TOTAL_NUM,A.L_PRICE ORDER BY F.L_NO DESC";
ResultSet res = oc.select(query);
List<LectureDTO> datas = new ArrayList<LectureDTO>();
try {
while(res.next()) {
LectureDTO dto = new LectureDTO();
dto.setL_no(res.getInt("L_NO"));
dto.setL_name(res.getString("L_NAME"));
dto.setS_name(res.getString("U_NAME"));
dto.setL_category(res.getString("CG_NAME"));
dto.setL__present_num(res.getInt("L_PRESENT_NUM"));
dto.setL__total_num(res.getInt("L_TOTAL_NUM"));
dto.setL_price(res.getInt("L_PRICE"));
datas.add(dto);
}
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
return datas;
}
내 후기 보기
myreview.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"
import="com.web.lecture.model.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내 리뷰</title>
<link type="text/css" rel="stylesheet" href="/static/css/myreview.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Font+Name">
<script src="/static/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".r_info").click(function(){
var tr = $(this);
var td = tr.children();
var r_no = td.eq(0).text();
console.log(r_no);
var r_form = document.createElement('form');
r_form.name='r_form';
r_form.method='post';
r_form.action='/R_detail';
var review = document.createElement('input');
review.setAttribute("type","hidden");
review.setAttribute("name","r_no");
review.setAttribute("value",r_no);
console.log(r_no);
r_form.appendChild(review);
document.body.appendChild(r_form);
r_form.submit();
})
});
</script>
</head>
<body>
<div id="header">
<nav id="menu">
<div id="logo">
<a href="/"><img src="/static/img/logo1.png"></a>
</div>
<div id="info">
<% boolean logined = (boolean)request.getAttribute("s_logined");
if(logined){
boolean U_define = (boolean)request.getAttribute("U_define");
if(U_define){%>
<h3 class="u_info"><%=request.getAttribute("U_name")%>[고수]님 환영합니다.</h3>
<% }else{%>
<h3 class="u_info"><%=request.getAttribute("U_name")%>[유저]님 환영합니다.</h3>
<% }
} %>
</div>
<div class="right">
<% if(logined){ %>
<a href="/mypageController" class="tag1"><span>마이페이지</span></a>
<a href="/logout" class="tag1"><span>로그아웃</span></a>
<%}else{ %>
<a href="/join" class="tag1"><span>회원가입</span></a>
<a href="/login" class="tag1"><span>로그인</span></a>
<%} %>
</div>
</nav>
</div>
<section>
<div class="title">
<h2>내 후기 확인</h2>
<span class="material-icons">check_circle_outline</span>
</div>
<div class="block">
<table>
<tr>
<th>리뷰번호</th>
<th>리뷰제목</th>
<th>강의이름</th>
<th>고수이름</th>
<th>만족도점수</th>
<th></th><!-- 버튼 부분 -->
</tr>
<%
List<ReviewDTO> r_board = (List<ReviewDTO>)request.getAttribute("r_board");
for(ReviewDTO r_dto : r_board){
%>
<tr style="cursor:pointer;" class="r_info">
<td><%=r_dto.getR_no() %></td>
<td><%=r_dto.getR_title()%></td>
<td><%=r_dto.getL_name() %></td>
<td><%=r_dto.getS_name() %></td>
<td><%=r_dto.getR_score() %></td>
</tr>
<%
}
%>
</table>
</div>
</section>
</body>
</html>
MyreviewController
package com.web.user.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.web.lecture.model.*;
@WebServlet("/user/Myreview")
public class MyreviewController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
LectureService service = new LectureService();
HttpSession session = request.getSession();
int s_user_id = 0;
if(session.getAttribute("s_user_id") != null) {
s_user_id = (int)session.getAttribute("s_user_id");
List<ReviewDTO> r_board = service.my_review_list(s_user_id);
request.setAttribute("r_board", r_board);
}
if(s_user_id==0) {
request.setAttribute("s_logined", false);
} else {
request.setAttribute("s_logined", true);
request.setAttribute("s_user_id",s_user_id);
String name = service.searchName(s_user_id);
request.setAttribute("U_name",name);
if(service.U_define(s_user_id)) {
request.setAttribute("U_define", true);
if(service.P_define(s_user_id)) {
request.setAttribute("P_define", true);
}else {
request.setAttribute("P_define", false);
}
} else {
request.setAttribute("U_define", false);
}
}
String view="/WEB-INF/jsp/user/myreview.jsp";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
LectureDAO 의 내 리뷰 목록 가져오는 r_my_getList() 메서드 s_user_id = u_no
public List<ReviewDTO> r_my_getList(int s_user_id) {
String query="SELECT R_NO,"
+ " R_TITLE,"
+ " B.U_NAME,"
+ " A.L_NAME,"
+ " A.U_NAME AS S_NAME,"
+ " R_SCORE"
+ " FROM REVIEW"
+ " JOIN APPLY ON (REVIEW.A_NO=APPLY.A_NO)"
+ " JOIN MEMBER B ON (B.U_NO=APPLY.U_NO)"
+ " JOIN (SELECT L_NO,U_NAME,L_NAME"
+ " FROM LECTURE"
+ " JOIN SELLER ON (SELLER.S_NO=LECTURE.S_NO)"
+ " JOIN MEMBER ON (MEMBER.U_NO=SELLER.U_NO))"
+ " A ON (A.L_NO=APPLY.L_NO)"
+ " WHERE APPLY.U_NO ="+s_user_id;
ResultSet res = oc.select(query);
List<ReviewDTO> datas = new ArrayList<ReviewDTO>();
try {
while(res.next()) {
ReviewDTO dto = new ReviewDTO();
dto.setR_no(res.getInt("R_NO"));
dto.setR_title(res.getString("R_TITLE"));
dto.setU_name(res.getString("U_NAME"));
dto.setS_name(res.getString("S_NAME"));
dto.setR_score(res.getInt("R_SCORE"));
dto.setL_name(res.getString("L_NAME"));
datas.add(dto);
}
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
return datas;
}
내 후기 상세정보
r_detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"
import="com.web.lecture.model.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>리뷰 정보</title>
<link type="text/css" rel="stylesheet" href="/static/css/r_detail.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Font+Name">
<script src="/static/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".modify").click(function(){
var r_no = <%=request.getAttribute("r_no")%>;
console.log(r_no);
var r_form = document.createElement('form');
r_form.name='r_form';
r_form.method='post';
r_form.action='/r_mod_page';
var review = document.createElement('input');
review.setAttribute("type","hidden");
review.setAttribute("name","r_no");
review.setAttribute("value",r_no);
console.log(r_no);
r_form.appendChild(review);
document.body.appendChild(r_form);
r_form.submit();
})
$(".remove").click(function(){
var r_no = <%=request.getAttribute("r_no")%>;
console.log(r_no);
var r_form = document.createElement('form');
r_form.name='r_form';
r_form.method='post';
r_form.action='/reviewDel';
var review = document.createElement('input');
review.setAttribute("type","hidden");
review.setAttribute("name","r_no");
review.setAttribute("value",r_no);
console.log(r_no);
r_form.appendChild(review);
document.body.appendChild(r_form);
r_form.submit();
})
});
</script>
</head>
<body>
<%
boolean logined = (boolean)request.getAttribute("s_logined");
R_infoDTO dto = (R_infoDTO)request.getAttribute("r_dto");
%>
<header>
<nav id="menu">
<!-- header가 두 개라 하나 지웠어요 ㅠㅠ -->
<div id="logo">
<a href="/"><img src="/static/img/logo1.png"></a>
</div>
<div id="info" style="visibility: hidden;">
a
</div>
<div class="right">
<%if (logined) {%>
<a href="/mypageController" id="tag1"><span>마이페이지</span></a>
<a href="/logout" id="tag1"><span>로그아웃</span></a>
<%} else {%>
<a href="/join" id="tag1"><span>회원가입</span></a>
<a href="/login" id="tag1"><span>로그인</span></a>
<%}%>
</div>
</nav>
</header>
<div class="title">
<h1>리뷰정보</h1>
<span class="material-icons">remove_red_eye</span>
<%
if(logined){
boolean U_define = (boolean)request.getAttribute("U_define");
if(U_define){%>
<h3><%=request.getAttribute("U_name")%>[고수]님</h3>
<% }else{%>
<h3><%=request.getAttribute("U_name")%>[유저]님</h3>
<% }
} %>
</div>
<div class="area">
<div class="block">
<label class="topic">리뷰제목</label>
<div class="answer"><%=dto.getR_title()%></div>
</div>
<div class="block">
<label class="topic">리뷰내용</label>
<div class="answer"><%=dto.getR_content() %></div>
</div>
<div class="block">
<label class="topic">강의이름</label>
<div class="answer"><%=dto.getL_title()%></div>
</div>
<div class="block">
<label class="topic">고수이름</label>
<div class="answer"><%=dto.getU_name() %></div>
</div>
<div class="block">
<label class="topic">강의점수</label>
<div class="answer"><%=dto.getR_score() %>/5</div>
</div>
<div class="block">
<label class="topic">리뷰 쓴 날짜</label>
<div class="answer"><%=dto.getR_date() %></div>
</div>
<%
if(logined){
boolean myreview_define = (boolean)request.getAttribute("myreview_define");
if(myreview_define){%>
<div class="block2">
<button type="button" class="modify">수정</button>
<button type="button" class="remove">삭제</button>
</div>
<% }
}%>
</div>
</body>
</html>
R_detailController
package com.web.main.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.web.lecture.model.*;
@WebServlet("/R_detail")
public class R_detailController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String r_no = request.getParameter("r_no");
LectureService service = new LectureService();
R_infoDTO dto = new R_infoDTO();
HttpSession session = request.getSession();
int s_user_id = 0;
if(session.getAttribute("s_user_id") != null) {
s_user_id = (int)session.getAttribute("s_user_id");
}
if(s_user_id==0) {
request.setAttribute("s_logined", false);
} else {
request.setAttribute("s_logined", true);
request.setAttribute("s_user_id",s_user_id);
String name = service.searchName(s_user_id);
request.setAttribute("U_name",name);
if(service.U_define(s_user_id)) {
request.setAttribute("U_define", true);
} else {
request.setAttribute("U_define", false);
}
if(service.myreview_define(s_user_id,r_no)) {
request.setAttribute("myreview_define",true);
} else {
request.setAttribute("myreview_define",false);
}
}
if(service.r_isValid(r_no)) { //내가 작성한 리뷰가 있다면
dto=service.r_search2(r_no);
request.setAttribute("r_dto", dto);
request.setAttribute("r_no", r_no);
String view = "/WEB-INF/jsp/detail/r_detail.jsp";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
} else {
String view = "/";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
}
}
LectureDAO의 myreview_define()
내 리뷰면 수정 삭제 버튼을 나타나게 하기 위한 메서드 (마이페이지가 아닌 메인에도 리뷰 리스트 출력 되므로)
public boolean myreview_define(int s_user_id, String r_no) {
String query = "SELECT * FROM REVIEW"
+ " JOIN APPLY ON (APPLY.A_NO=REVIEW.A_NO)"
+ " WHERE U_NO="+s_user_id+" AND R_NO="+r_no;
ResultSet res = oc.select(query);
int i=0;
try {
while(res.next()) {
i++;
}
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(i==1) {
return true;
}
return false;
}
//리뷰 넘버로 존재하는 리뷰인지 검사
public boolean r_isValid(String r_no) {
if(r_search(r_no).size()==1) {
return true;
}else{
return false;
}
}
//검사 후 있다면 가져온다
public R_infoDTO r_search2(String r_no) {
R_infoDTO dto = r_search(r_no).get(0);
return dto;
}
리뷰 상세보기에서 수정 버튼 클릭
-> 내 후기 수정
reviewModify.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"
import="com.web.lecture.model.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>리뷰 수정 페이지</title>
<link type="text/css" rel="stylesheet" href="/static/css/r_detail.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Font+Name">
<script src="/static/js/jquery-3.6.0.min.js"></script>
</head>
<body>
<%
boolean logined = (boolean)request.getAttribute("s_logined");
R_infoDTO dto = (R_infoDTO)request.getAttribute("r_dto");
%>
<header>
<nav id="menu">
<div id="header">
<a href="/" style="padding-left: 30px;"> <img src="/static/img/logo1.png"></a>
<div class="right">
<%if (logined) {%>
<a href="/mypageController" id="tag1"><span>마이페이지</span></a> <a
href="/logout" id="tag1"><span>로그아웃</span></a>
<%} else {%>
<a href="/join" id="tag1"><span>회원가입</span></a> <a href="/login"
id="tag1"><span>로그인</span></a>
<%}%>
</div>
</div>
</nav>
</header>
<div class="title">
<h1>리뷰수정</h1>
<span class="material-icons">remove_red_eye</span>
<%
if(logined){
boolean U_define = (boolean)request.getAttribute("U_define");
if(U_define){%>
<h3><%=request.getAttribute("U_name")%>[고수]님</h3>
<% }else{%>
<h3><%=request.getAttribute("U_name")%>[유저]님</h3>
<% }
} %>
</div>
<div class="area">
<form name = "rMod" action="/reviewMod" method="post">
<input type="hidden" name="r_no" value="<%=request.getAttribute("r_no")%>">
<div class="block">
<label class="topic">리뷰제목</label>
<input class="m_title" name="r_title" value="<%=dto.getR_title()%>">
</div>
<div class="block">
<label class="topic l_content">리뷰내용</label>
<textarea class="m_content" name="r_content" style="resize: none;"><%=dto.getR_content() %></textarea>
</div>
<div class="block">
<label class="topic">강의이름</label>
<input class="l_name" name="l_title" value=" <%=dto.getL_title()%>" readonly>
</div>
<div class="block">
<label class="topic">고수이름</label>
<input class="s_name" name="u_name" value=" <%=dto.getU_name() %>" readonly>
</div>
<div class="block">
<label class="topic">강의점수</label>
<input type="number" class="m_score" name="r_score" value="<%=dto.getR_score()%>"><div class="score">/5</div>
</div>
<%
if(logined){
boolean myreview_define = (boolean)request.getAttribute("myreview_define");
if(myreview_define){%>
<div class="block2">
<button type="submit" class="modify">수정</button>
</div>
<% }
}%>
</form>
</div>
</body>
</html>
ReviewModPageController
리뷰 상세보기 컨트롤러와 마찬가지로 리뷰 정보를 가져와서 기초 데이터로 사용해 준다. (사용자가 볼 수 있도록 수정 전 내용을 띄워놓는 것)
package com.web.user.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.web.lecture.model.LectureService;
import com.web.lecture.model.R_infoDTO;
@WebServlet("/r_mod_page")
public class ReviewModPageController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String r_no = (String)request.getParameter("r_no");
LectureService service = new LectureService();
System.out.println("r_no : "+r_no);
R_infoDTO dto = new R_infoDTO();
HttpSession session = request.getSession();
int s_user_id = 0;
if(session.getAttribute("s_user_id") != null) {
s_user_id = (int)session.getAttribute("s_user_id");
}
if(s_user_id==0) {
request.setAttribute("s_logined", false);
} else {
request.setAttribute("s_logined", true);
request.setAttribute("s_user_id",s_user_id);
String name = service.searchName(s_user_id);
request.setAttribute("U_name",name);
if(service.U_define(s_user_id)) {
request.setAttribute("U_define", true);
} else {
request.setAttribute("U_define", false);
}
if(service.myreview_define(s_user_id,r_no)) {
request.setAttribute("myreview_define",true);
} else {
request.setAttribute("myreview_define",false);
}
}
if(service.r_isValid(r_no)) {
dto=service.r_search2(r_no);
request.setAttribute("r_dto", dto);
request.setAttribute("r_no", r_no);
System.out.println(dto.getL_title());
String view = "/WEB-INF/jsp/user/reviewModify.jsp"; //리뷰 수정페이지 추가
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
} else {
String view = "/";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
}
}
수정 버튼 누르면 /reviewMod 로 매핑 된 MyreviewModController로 포워드 되어 db 처리
MyreviewModController
package com.web.user.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.web.lecture.model.*;
@WebServlet("/reviewMod")
public class MyreviewModController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String view="/";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String r_no = request.getParameter("r_no");
String r_title = request.getParameter("r_title");
String r_content = request.getParameter("r_content");
String r_score = request.getParameter("r_score");
System.out.println("r_no : " + r_no);
System.out.println("r_title : " + r_title);
System.out.println("r_content : " + r_content);
System.out.println("r_score : " + r_score);
LectureService service = new LectureService();
boolean result = service.reviewMod(r_no,r_title,r_content,r_score);
if(service.reviewMod(r_no, r_title, r_content, r_score)) {
response.sendRedirect("/mypageController"); // db 수정 성공 시 마이페이지로 리다이렉트
} else {
request.setAttribute("error", "리뷰 수정 실패");
String view = "/WEB-INF/jsp/profile/error.jsp";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
}
}
LectureDAO의 r_modify()
public boolean r_modify(String r_no, String r_title, String r_content, String r_score) {
String query = "UPDATE REVIEW SET"
+ " R_TITLE = '"+ r_title
+ "' ,R_CONTENT = '"+ r_content
+ "' ,R_SCORE = " + r_score
+ " WHERE R_NO = " + r_no;
int res = oc.update(query);
return res == 1 ? true : false;
}
※ 참고
모든 DAO의 메서드는 Service 모델을 거치지만 편의상 기술을 생략하였다. Service의 메서드는 다음과 같은 형태이다.
public boolean reviewMod(String r_no, String r_title, String r_content, String r_score) {
LectureDAO dao = new LectureDAO();
boolean res = dao.r_modify(r_no, r_title, r_content, r_score);
dao.close();
return res;