열심히 끝까지

디바이스 융합 자바(Java) day50 - 회원가입 새 창 띄우기,더보기 갯수 한 곳에서 지정,커스텀태그 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)

디바이스 융합 자바(Java) day50 - 회원가입 새 창 띄우기,더보기 갯수 한 곳에서 지정,커스텀태그

노유림 2022. 8. 22. 17:55

>> 지난 번 과제 해설

1. cnt=2(index.jsp)
    글 -> 메인
    댓글, 좋아요 -> 현재 글 기억해야 할 필요가 있으므로 forward 사용

2. 더보기
   index 
   메인페이지 - 메인으로

 

그 뒤로 변경된 사항

1. 로그인, 글&댓글 작성/삭제 부분 

2. 회원가입을 위한 새 창 띄우기

3. 더보기 개수를 ctrlB에서 지정

 

>> 변경된 후 추가/변경 코드

ctrlB.jsp--------------------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="board.*,java.util.ArrayList"%>
<jsp:useBean id="bDAO" class="board.BoardDAO" />
<jsp:useBean id="bVO" class="board.BoardVO" />
<jsp:useBean id="rVO" class="board.ReplyVO" />
<jsp:useBean id="bBS" class="board.BoardSet" />
<jsp:setProperty property="*" name ="bVO" />
<jsp:setProperty property="*" name ="rVO" />
<jsp:setProperty property="*" name ="bBS" />

<%
	String action = request.getParameter("action");
    
    // >> 바뀐 부분----
	String paramCnt=request.getParameter("cnt");
	if(paramCnt==null) {// cnt 파라미터에 정보가 있어?
		bVO.setCnt(2);//없다면 기본값(2)으로 설정해줘!
		// -> 향후 초기화 매개변수로 설정도 가능!
 	}
    //------------------
	System.out.println("로그 : " + action);
	System.out.println("cnt : " + bVO.getCnt());
	// 메인======================================
	if (action.equals("main")) {
		ArrayList<BoardSet> datas = bDAO.selectAll(bVO);
		request.setAttribute("datas", datas);
		request.setAttribute("cnt", bVO.getCnt());
		pageContext.forward("main.jsp");
	} 
    
	// 글 추가====================================
	else if(action.equals("insertB")){
		if (bDAO.insert(bVO)) {
			response.sendRedirect("ctrlB.jsp?action=main");
		} else {
			throw new Exception("binsert 오류");
		}
	}
    
	// 글 삭제====================================
	else if (action.equals("deleteB")) {
		if (bDAO.delete(bVO)) {
			response.sendRedirect("ctrlB.jsp?action=main");
		} else {
			throw new Exception("bdelete 오류");
		}
	}
    
	// 댓글 추가==================================
	else if(action.equals("insertR")){
		if (bDAO.insertReply(rVO)) {
			pageContext.forward("ctrlB.jsp?action=main");
		} else {
			throw new Exception("rinsert 오류");
		}
	}
    
	// 댓글 삭제====================================
	else if (action.equals("deleteR")) {
		if (bDAO.deleteReply(rVO)) {
			pageContext.forward("ctrlB.jsp?action=main");
		} else {
			throw new Exception("rdelete 오류");
		}
	}
    
	// 좋아요 추가====================================
	else if(action.equals("fav")){
		if(bDAO.update(bVO)){
			pageContext.forward("ctrlB.jsp?action=main");
		}else{
			throw new Exception("fav 오류");
		}
	}
%>

 

main.jsp--------------------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="ryo" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인 페이지</title>
<script type="text/javascript">
	function sign(){
    	<!-- 회원가입 시 새 창 띄우기 -->
		window.open("sign.jsp","회원가입 페이지", "width=500,height=200");
	}
</script>
</head>
<body>

	<div id="header">
		<h1>멍냥스토어</h1>
		
		<div class="gnb"><!-- 네비게이션바 class로 자주 지정 -->
			<ul>
				<ryo:login /> <!-- 커스텀태그 변경 -->
				<li><a href="ctrlB.jsp?action=main">메인으로</a></li>
			</ul>
		</div>
	</div>
	
	<div id="wrapper">
	
		<div id="content">
			<h2>글 등록하기</h2>
				<ryo:write type="msg"/> <!-- 글 등록 커스텀태그 -->
					<!-- 회원만 글 등록이 가능하도록 설정 -->
					<!-- 만약 로그인을 하지 않았다면, 로그인한 후에 이용하세요! -->
		</div>
		
		<div id="main">
			<h2>글 목록보기</h2>
			<c:forEach var="v" items="${datas}">
				<!-- v -> v.boardVO v.rList -->
				<c:set var="b" value="${v.boardVO}"/>
                <!-- 글 삭제 커스텀태그 -->
				<h3>[${b.mid}] ${b.msg} [좋아요 ${b.favcnt} | 댓글 ${b.rcnt }] <ryo:deleteB midCheck="${b.mid}" bid="${b.bid}"/></h3>
				<div class="reply">
					<ul>
						<c:forEach var="r" items="${v.rList}">
                        	<!-- 댓글 삭제 커스텀태그 -->
							<li>[${r.rid}] ${r.rmsg} <ryo:deleteR midCheck="${r.mid}" rid="${r.rid}" /> </li>
						</c:forEach>
					</ul>
				</div>
				
				<div class="reply">
						<ryo:write type="rmsg"/><!-- 글 등록 커스텀태그 -->
				</div>
				
			</c:forEach>
		</div>
		<a href="ctrlB.jsp?action=main&cnt=${cnt+2}">더보기↓&gt;&gt;</a>
	</div>
	
	<hr>
	<div id="footer">
		회사소개 | 이용약관 | <strong>개인정보처리방침</strong> | 정책 | 고객센터 <strong>ⓒ Corp.</strong>
	</div>
	
</body>
</html>

 

write.tag--------------------------

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ attribute name="type" %>
<%@ attribute name="mid" %>
<!-- 이 커스텀태그를 잘 가져오려면 type을 가져와서 인식해야한다. -->

<c:if test="${mid != null}">
	<form action="ctrlB.jsp" method="post">
	<input type="hidden" name="mid" value="${mid}">

	<c:choose>
		<c:when test="${type=='msg'}">
			<input type="hidden" name="action" value="insertB">
			<input type="text" name="msg">
			<input type="submit" value="글 등록">
		</c:when>	
		<c:when test="${type=='rmsg'}">
			<input type="hidden" name="action" value="insertR">
			<input type="hidden" name="bid" value="${bid}">
			댓글 : <input type="text" name="rmsg">
			<input type="submit" value="댓글 등록">
		</c:when>
	</c:choose>
	</form>
</c:if>

<c:if test="${mid == null}">
	<c:choose>
		<c:when test="${type=='msg'}">
			<input type="text" disabled value="등록하려면 로그인하세요!">
		</c:when>	
		<c:when test="${type=='rmsg'}">
			댓글 : <input type="text" disabled value="등록하려면 로그인하세요!">
		</c:when>
	</c:choose>
</c:if>

 

login.tag--------------------------

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<form action="ctrlM.jsp" method="post">
	<c:choose>
		<c:when test="${mid!=null}">
			<li>
			<input type="hidden" name="action" value="logout">
			<input type="submit" value="로그아웃">
			</li>
		</c:when>
		<c:otherwise>
			<li>
				<input type="hidden" name="action" value="login">
				<input type="text" name="mid" placeholder="id">
				<input type="password" name="mpw" placeholder="password">
				<input type="submit" value="로그인">
			</li>
			<li>
				<a href="javascript:sign()">회원가입</a>
			</li>
		</c:otherwise>
	</c:choose>
</form>

 

deleteB.tag--------------------------

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ attribute name="bid" %>
<%@ attribute name="midCheck" %>

<c:if test="${mid==midCheck}">
<a href="ctrlB.jsp?action=deleteB&bid=${bid}">[삭제]</a>
</c:if>
<a href="ctrlB.jsp?action=fav&bid=${bid}">&nbsp;♥</a>

 

deleteR.tag--------------------------

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ attribute name="midCheck" %>
<%@ attribute name="rid" %>

<c:if test="${mid==midCheck}">
<a href="ctrlB.jsp?action=deleteR&rid=${rid}">[삭제]</a>
</c:if>
<a href="ctrlB.jsp?action=fav&bid=${bid}">&nbsp;♥</a>

 

 

>> 이번 실습에서 배운 것

1. ctrl 분할 관리

2. 더보기 기초(2씩 계속 증가)

3. 인코딩 필터(EncFilter)

4. 초기화 매개변수(web.xml)

5. 에러 페이지(error, 404error)

6. 커스텀 태그

7. JSTL, EL, JS, CSS,...