Project/SemiProject

[211212] 마이페이지 - 유저 (찜한 강의, 리뷰 수정)

감자탈출기 2021. 12. 11. 17:32

 

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;