디바이스 융합 자바(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}">더보기↓>></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}"> ♥</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}"> ♥</a>
>> 이번 실습에서 배운 것
1. ctrl 분할 관리
2. 더보기 기초(2씩 계속 증가)
3. 인코딩 필터(EncFilter)
4. 초기화 매개변수(web.xml)
5. 에러 페이지(error, 404error)
6. 커스텀 태그
7. JSTL, EL, JS, CSS,...