[JSP] 미니프로젝트 : 싸이월드 구현하기 (방명록/다이어리/게시글)
테이블을 먼저 보자면, 위와 같다.
기본 게시판, 다이어리, 방명록, 유저, 그리고 시간상의 관계로 구현하지는 못했지만 첨부파일도 테이블까지 만들어 둠.
처음에는 몰랐는데 마지막에 아쉬웠던 점은 괜히 테이블을 3개나 만들어서 좀 비효율적이었다...
그냥 한 번에 해서 게시판 종류까지 컬럼으로 넣을 걸 그랬다.
처음 해 보는 거라서 있었던 시행착오.. 라고 생각한다.
위 페이지에서 로그인과 회원가입이 가능합니다.
<script>
$(document).ready(function(){
$("#uId").focus();
$("#signIn").on("click",function(){
if($.trim($("#uId").val()).length <= 0){
alert("아이디를 입력하세요.");
$("#uId").val("");
$("#uId").focus();
return;
}
if($.trim($("#uPwd").val()).length <= 0){
alert("비밀번호를 입력하세요.");
$("#uPwd").val("");
$("#uPwd").focus();
return;
}
document.signInForm.submit();
});
$("#signUp").on("click",function(){
location.href = "/user/userRegForm7.jsp";
})
});
</script>
</head>
<body>
<div class="wrapper">
<div class="container">
<div class="sign-up-container">
</div>
<div class="sign-in-container">
<form name="signInForm" id="signInForm" method="post" action="/loginProc7.jsp">
<h1>Hi</h1>
<div class="social-links">
</div>
<input type="text" name="uId" id="uId" placeholder="아이디">
<input type="password" name="uPwd" id="uPwd" placeholder="비밀번호">
<button class="form_btn" id="signIn" >로그인</button>
</form>
</div>
<div class="overlay-container">
<div class="overlay-right">
<h1 class="font-kotra">Hello, Friend</h1>
<p class="font-kyobohand">Enter your personal details and start journey with us</p>
<button id="signUp" class="overlay_btn">회원가입</button>
</div>
</div>
</div>
</div>
</body>
</html>
회원가입 페이지.
아이디는 가입 완료 누르면 ajax로 중복 체크를 진행하도록 함.
나머지는 중복체크 없이 유효성 검사만 진행.
첫 메인 페이지
이미지는 유저 파일에 프로필 사진을 넣지 않아 (넣어야 한다는 사실을 뒤늦게 깨달았으나 시간이 없었다.) 하드코딩했다.
왼쪽 업데이트 뉴스는 게시판과 다이어리에서 최근 글 제목을 긁어온 것이고, (list) 오른쪽 다이어리는 총 게시글 게수다. 사진첩은 구현하지 못했기 때문에 0개...
오른쪽 버튼은 네비게이션으로 넣었다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%@ include file = "/include/head7.jsp" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.dao7.UserDao7" %>
<%@ page import = "com.sist.web.model7.Diary7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.web.model7.GuestBook" %>
<%@ page import = "java.util.List" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%
BoardDao7 dao = new BoardDao7();
Diary7 diary7 = new Diary7();
Board7 board7 = new Board7();
GuestBook guest = new GuestBook();
diary7.setStartRow(0);
diary7.setEndRow(5);
board7.setStartRow(0);
board7.setEndRow(5);
List<Diary7> list1 = dao.DiaryList(diary7);
List<Board7> list2 = dao.BoardList(board7);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<link rel="stylesheet" href="/resources/css/Cy-home.css" />
<meta charset="UTF-8" />
<title>2021 MINI HOMEPAGE</title>
</head>
<body>
<div class="bookcover">
<div class="bookdot">
<div class="page">
<div class="profile-container">
<div class="header profile-title font-neo">
TODAY<span class="color-red"> 28</span> | TOTAL 234918
</div>
<div class="box profile-box">
<div class="profile-image">
<img
class="profile-image-img"
src="/resources/images/profile2.jpg"
alt="프로필 이미지"
/>
</div>
<div class="profile-text font-kyobohand">
ㄴr는.. 오늘도.. 눈물을.. 흘린ㄷr..★
</div>
<div class="profile-username font-kyobohand">
<span style="color: #0f1b5c">이름</span> (♪♬)
</div>
<div class="profile-dropdown">
<div class="dropdown-button">
<div class="dropdown-title">파도타기</div>
<div class="triangle-down"></div>
</div>
<div class="dropdown-content">
<a href="#" target="_blank">블로그 바로가기</a>
<a href="#" target="_blank">페이스북 바로가기</a>
<a href="#" target="_blank">인스타그램 바로가기</a>
</div>
</div>
</div>
</div>
<div class="content-container">
<div class="header content-title">
<div class="content-title-name">example 추억 상ㅈr... (*ˊᵕˋo💐o</div>
<div class="content-title-url">https://url주소/나중에입력</div>
</div>
<div class="box content-box">
<div class="box-title">Updated news</div>
<div class="news-flex-box">
<div class="news-box">
<% for(int i=0;i<2;i++){
Diary7 diary = list1.get(i);%>
<div class="news-row">
<div class="news-category category-pic">일기장</div>
<div class="news-title"><%=diary.getdTitle()%></div>
</div>
<%}%>
<%
for(int i=0;i<2;i++){
Board7 board = list2.get(i);%>
<div class="news-row">
<div class="news-category category-post">게시판</div>
<div class="news-title"><%=board.getbTitle()%></div>
</div>
<%}%>
</div>
<div class="update-box">
<div class="menu-row">
<div class="menu-item">다이어리<span class="menu-num"><%=dao.diaryTotalCnt()%>/25</span></div>
<div class="menu-item">사진첩<span class="menu-num">0/25</span></div>
</div>
<div class="menu-row">
<div class="menu-item">게시판<span class="menu-num"><%=dao.boardTotalCnt(board7)%>/25</span></div>
<div class="menu-item">방명록<span class="menu-num"><%=dao.GuestBookTotalCnt()%>/25</span></div>
</div>
</div>
</div>
<div class="miniroom">
<div class="box-title">Miniroom</div>
<div class="miniroom-gif-box">
<img src="/resources/images/minihome.jpg" alt="미니룸 이미지 수정 필요함" />
</div>
</div>
</div>
</div>
<div class="menu-container">
<%@ include file ="/include/navigation7.jsp" %>
</div>
</div>
</div>
</div>
</body>
</html>
(Dao의 경우 마지막에 한번에 올리겠음.)
다이어리 버튼을 누르면 나오는 페이지다.
다이어리는 싸이 주인(admin 계정)만 볼 수 있도록 처리했다.
상세페이지 없이 바로 내용이 보이도록 했고, 5 개씩 보이도록 페이징 처리했다.
저 페이지 블록 아래에는 글쓰기 버튼이 숨어있어 마우스를 가져다 대면 보인다. (비밀 일기)
저 날짜는 오늘 날짜가 보이도록 처리했고, 각각의 날짜들도 누르면 날짜에 쓰여진 일기가 보이도록 하고 싶었는데,
위 오류를 해결하지 못해... (...하루만 더 있다면...) 그냥 발표함.
<%@page import="com.sist.web.model7.BoardFileConfig7"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "java.util.List" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.web.model7.Paging7" %>
<%@ page import = "com.sist.web.model.BoardFileConfig" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%
Logger logger = LogManager.getLogger("/board/boardList.jsp");
HttpUtil.requestLogString(request, logger);
int searchType= HttpUtil.get(request, "searchType",0);
String searchValue=HttpUtil.get(request,"searchValue","");
long curPage = HttpUtil.get(request, "curPage", (long)1);
long totalCnt = 0;
List<Board7> list = null;
Paging7 paging = null;
int secret = HttpUtil.get(request, "secret",0);
BoardDao7 boardDao = new BoardDao7();
Board7 board = new Board7();
if(!StringUtil.isEmpty(searchType) && !StringUtil.isEmpty(searchValue)){
if(searchType == 1){
board.setuNickName(searchValue);
}
if(searchType == 2){
board.setbTitle(searchValue);
}
if(searchType == 3){
board.setbContent(searchValue);
}
}
totalCnt = boardDao.boardTotalCnt(board);
logger.debug("총 게시물 수 : "+ totalCnt);
if(totalCnt > 0){
paging = new Paging7(totalCnt,
BoardFileConfig7.LCNT,BoardFileConfig7.PCNT,curPage);
board.setStartRow(paging.getStartRow());
board.setEndRow(paging.getEndRow());
list = boardDao.BoardList(board);
}
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head7.jsp" %>
<meta charset="UTF-8">
<title></title>
<script>
$(document).ready(function(){
<%if(secret==1){%>
alert("비밀글은 작성자만 열람 가능합니다!");
<% secret = 0;
}%>
$("#_searchType").change(function(){
$("#_searchValue").val("");
});
$("#btnSearch").on("click",function(){
if($("#_searchValue").val() == ""){
alert("조회할 내용을 입력해 주세요.");
$("_searchValue").focus();
return;
}
document.bForm.boardN.value="";
document.bForm.searchType.value = $("#_searchType").val();
document.bForm.searchValue.value= $("#_searchValue").val();
document.bForm.curPage.value="";
document.bForm.action="/board/boardList.jsp";
document.bForm.submit();
});
$("#writeBtn").on("click",function(){
document.location.href="/board/write7.jsp";
});
});
function fn_list(curPage){
document.bForm.boardN.value="";
document.bForm.curPage.value=curPage;
document.bForm.action = "/board/boardList.jsp";
document.bForm.submit();
}
function fn_view(boardN){
document.bForm.boardN.value=boardN;
document.bForm.action="/board/boardView7.jsp";
document.bForm.submit();
}
</script>
</head>
<link rel="stylesheet" href="/resources/css/Cy-home.css" />
<body>
<div class="bookcover">
<div class="bookdot">
<div class="page">
<div class="profile-container">
<div class="header profile-title font-neo">
TODAY<span class="color-red"> 28</span> | TOTAL 234918
</div>
<div class="box profile-box">
<div class="profile-image">
<img
class="profile-image-img"
src="/resources/images/profile2.jpg"
alt="프로필 이미지 수정"
/>
</div>
<div class="profile-text font-kyobohand">
ㄴr는.. 오늘도.. 눈물을.. 흘린ㄷr..★
</div>
<div class="profile-text font-kyobohand">
<span style="color: #0f1b5c">사용자</span> (♪♬)
</div>
<div class="profile-dropdown">
<div class="dropdown-button">
<div class="dropdown-title">파도타기</div>
<div class="triangle-down"></div>
</div>
<div class="dropdown-content">
<a href="#" target="_blank">블로그 바로가기</a>
<a href="#" target="_blank">페이스북 바로가기</a>
<a href="#" target="_blank">인스타그램 바로가기</a>
</div>
</div>
</div>
</div>
<div class="content-container">
<div class="header content-title">
<div class="profile-text font-kyobohand">사용자의 추억 상ㅈr... (*ˊᵕˋo💐o</div>
</div>
<div class="box content-box">
<div class="profile-dropdown">
<select name="_searchType" id="_searchType" style="width:auto;">
<option value="" class="dropdown-title">조회 항목</option>
<option class="dropdown-title" value="1"<%if(searchType==1){ %>selected<%}%>>닉네임</option>
<option class="dropdown-title" value="2"<%if(searchType==2){ %>selected<%} %>>제목</option>
<option class="dropdown-title" value="3"<%if(searchType==3){%>selected<%}%>>내용</option>
</select>
<input type="text" name="_searchValue" id="_searchValue" value="<%=searchValue%>" class="form-control mx-1" maxlength="20" style="width:auto;ime-mode:active;" placeholder="무엇을 찾을까요?" />
<button type="button" id="btnSearch" class="button-del">조회</button>
</div>
<form name="bForm" id="bForm" method="post">
<input type="hidden" name="boardN" value=""/>
<input type="hidden" name="searchType" value="<%=searchType%>"/>
<input type="hidden" name="searchValue" value="<%=searchValue%>"/>
<input type="hidden" name="curPage" value="<%=curPage%>"/>
</form>
<table class="profile-username font-kyobohand" >
<thead>
<th scope="col" class="text-center" style="width:10%">번호</th>
<th scope="col" class="text-center" style="width:60%">제목</th>
<th scope="col" class="text-center" style="width:20%">작성자</th>
<th scope="col" class="text-center" style="width:10%">조회수</th>
</thead>
<tbody>
<%
if(list != null && list.size()>=0){
long startNum = paging.getStartNum();
for(int i=0;i<list.size();i++){
Board7 b7 = list.get(i);
%>
<tr style="text-align : center">
<td><%=startNum%></td>
<td><a href="javascript:void(0)" onclick="fn_view(<%=b7.getBoardN()%>)" ><%=b7.getbTitle()%></a></td>
<td><%=b7.getuNickName() %></td>
<td><%=StringUtil.toNumberFormat(b7.getBoardReadCnt())%></td>
</tr>
<%
startNum--;
}
}
else {%>
</tbody>
<tfoot>
<tr>
<td colspan="5" style="text-align : center"> 조회된 데이터가 존재하지 않습니다.</td>
</tr>
</tfoot>
<%}%>
</table>
<nav>
<%if(paging != null){
if(paging.getPrevBlockPage() > 0){ %>
<a class="page-link" href="javascript:void(0)" onclick="fn_list(<%=paging.getPrevBlockPage()%>)">이전블럭</a>
<%}
for(long i = paging.getStartPage();i<=paging.getEndPage();i++){
if(paging.getCurPage() != i){%>
<a class="page-link" href="javascript:void(0)" onclick="fn_list(<%=i%>)"><%=i%></a>
<%}
else{
%>
<a class="page-link" href="javascript:void(0)" style="cursor:default;"><%=i%></a>
<%
}
}
if(paging.getNextBlockPage()>0){%>
<a class="page-link" href="javascript:void(0)" onclick="fn_list(<%=paging.getNextBlockPage()%>)">다음블럭</a>
<% }
} %>
</nav>
<div class="profile-dropdown">
<button id="writeBtn" name="writeBtn" class="button-del">글쓰기</button>
</div>
</div>
</div>
<div class="menu-container">
<%@ include file ="/include/navigation7.jsp" %>
</div>
</div>
</div>
</div>
</body>
</html>
게시판 누르면 보이는 페이지다. 리스트 페이지이고, 조회 항목은 닉네임, 제목, 내용이다.
조회수는 한 번 누르면 올라간다.
<%@page import="com.sist.web.model7.BoardFileConfig7"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "java.util.List" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.web.model7.Paging7" %>
<%@ page import = "com.sist.web.model.BoardFileConfig" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%
Logger logger = LogManager.getLogger("/board/boardList.jsp");
HttpUtil.requestLogString(request, logger);
int searchType= HttpUtil.get(request, "searchType",0);
String searchValue=HttpUtil.get(request,"searchValue","");
long curPage = HttpUtil.get(request, "curPage", (long)1);
long totalCnt = 0;
List<Board7> list = null;
Paging7 paging = null;
int secret = HttpUtil.get(request, "secret",0);
BoardDao7 boardDao = new BoardDao7();
Board7 board = new Board7();
if(!StringUtil.isEmpty(searchType) && !StringUtil.isEmpty(searchValue)){
if(searchType == 1){
board.setuNickName(searchValue);
}
if(searchType == 2){
board.setbTitle(searchValue);
}
if(searchType == 3){
board.setbContent(searchValue);
}
}
totalCnt = boardDao.boardTotalCnt(board);
logger.debug("총 게시물 수 : "+ totalCnt);
if(totalCnt > 0){
paging = new Paging7(totalCnt,
BoardFileConfig7.LCNT,BoardFileConfig7.PCNT,curPage);
board.setStartRow(paging.getStartRow());
board.setEndRow(paging.getEndRow());
list = boardDao.BoardList(board);
}
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head7.jsp" %>
<meta charset="UTF-8">
<title></title>
<script>
$(document).ready(function(){
<%if(secret==1){%>
alert("비밀글은 작성자만 열람 가능합니다!");
<% secret = 0;
}%>
$("#_searchType").change(function(){
$("#_searchValue").val("");
});
$("#btnSearch").on("click",function(){
if($("#_searchValue").val() == ""){
alert("조회할 내용을 입력해 주세요.");
$("_searchValue").focus();
return;
}
document.bForm.boardN.value="";
document.bForm.searchType.value = $("#_searchType").val();
document.bForm.searchValue.value= $("#_searchValue").val();
document.bForm.curPage.value="";
document.bForm.action="/board/boardList.jsp";
document.bForm.submit();
});
$("#writeBtn").on("click",function(){
document.location.href="/board/write7.jsp";
});
});
function fn_list(curPage){
document.bForm.boardN.value="";
document.bForm.curPage.value=curPage;
document.bForm.action = "/board/boardList.jsp";
document.bForm.submit();
}
function fn_view(boardN){
document.bForm.boardN.value=boardN;
document.bForm.action="/board/boardView7.jsp";
document.bForm.submit();
}
</script>
</head>
<link rel="stylesheet" href="/resources/css/Cy-home.css" />
<body>
<div class="bookcover">
<div class="bookdot">
<div class="page">
<div class="profile-container">
<div class="header profile-title font-neo">
TODAY<span class="color-red"> 28</span> | TOTAL 234918
</div>
<div class="box profile-box">
<div class="profile-image">
<img
class="profile-image-img"
src="/resources/images/profile2.jpg"
alt="프로필 이미지 수정"
/>
</div>
<div class="profile-text font-kyobohand">
ㄴr는.. 오늘도.. 눈물을.. 흘린ㄷr..★
</div>
<div class="profile-text font-kyobohand">
<span style="color: #0f1b5c">사용자</span> (♪♬)
</div>
<div class="profile-dropdown">
<div class="dropdown-button">
<div class="dropdown-title">파도타기</div>
<div class="triangle-down"></div>
</div>
<div class="dropdown-content">
<a href="#" target="_blank">블로그 바로가기</a>
<a href="#" target="_blank">페이스북 바로가기</a>
<a href="#" target="_blank">인스타그램 바로가기</a>
</div>
</div>
</div>
</div>
<div class="content-container">
<div class="header content-title">
<div class="profile-text font-kyobohand">사용자의 추억 상ㅈr... (*ˊᵕˋo💐o</div>
</div>
<div class="box content-box">
<div class="profile-dropdown">
<select name="_searchType" id="_searchType" style="width:auto;">
<option value="" class="dropdown-title">조회 항목</option>
<option class="dropdown-title" value="1"<%if(searchType==1){ %>selected<%}%>>닉네임</option>
<option class="dropdown-title" value="2"<%if(searchType==2){ %>selected<%} %>>제목</option>
<option class="dropdown-title" value="3"<%if(searchType==3){%>selected<%}%>>내용</option>
</select>
<input type="text" name="_searchValue" id="_searchValue" value="<%=searchValue%>" class="form-control mx-1" maxlength="20" style="width:auto;ime-mode:active;" placeholder="무엇을 찾을까요?" />
<button type="button" id="btnSearch" class="button-del">조회</button>
</div>
<form name="bForm" id="bForm" method="post">
<input type="hidden" name="boardN" value=""/>
<input type="hidden" name="searchType" value="<%=searchType%>"/>
<input type="hidden" name="searchValue" value="<%=searchValue%>"/>
<input type="hidden" name="curPage" value="<%=curPage%>"/>
</form>
<table class="profile-username font-kyobohand" >
<thead>
<th scope="col" class="text-center" style="width:10%">번호</th>
<th scope="col" class="text-center" style="width:60%">제목</th>
<th scope="col" class="text-center" style="width:20%">작성자</th>
<th scope="col" class="text-center" style="width:10%">조회수</th>
</thead>
<tbody>
<%
if(list != null && list.size()>=0){
long startNum = paging.getStartNum();
for(int i=0;i<list.size();i++){
Board7 b7 = list.get(i);
%>
<tr style="text-align : center">
<td><%=startNum%></td>
<td><a href="javascript:void(0)" onclick="fn_view(<%=b7.getBoardN()%>)" ><%=b7.getbTitle()%></a></td>
<td><%=b7.getuNickName() %></td>
<td><%=StringUtil.toNumberFormat(b7.getBoardReadCnt())%></td>
</tr>
<%
startNum--;
}
}
else {%>
</tbody>
<tfoot>
<tr>
<td colspan="5" style="text-align : center"> 조회된 데이터가 존재하지 않습니다.</td>
</tr>
</tfoot>
<%}%>
</table>
<nav>
<%if(paging != null){
if(paging.getPrevBlockPage() > 0){ %>
<a class="page-link" href="javascript:void(0)" onclick="fn_list(<%=paging.getPrevBlockPage()%>)">이전블럭</a>
<%}
for(long i = paging.getStartPage();i<=paging.getEndPage();i++){
if(paging.getCurPage() != i){%>
<a class="page-link" href="javascript:void(0)" onclick="fn_list(<%=i%>)"><%=i%></a>
<%}
else{
%>
<a class="page-link" href="javascript:void(0)" style="cursor:default;"><%=i%></a>
<%
}
}
if(paging.getNextBlockPage()>0){%>
<a class="page-link" href="javascript:void(0)" onclick="fn_list(<%=paging.getNextBlockPage()%>)">다음블럭</a>
<% }
} %>
</nav>
<div class="profile-dropdown">
<button id="writeBtn" name="writeBtn" class="button-del">글쓰기</button>
</div>
</div>
</div>
<div class="menu-container">
<%@ include file ="/include/navigation7.jsp" %>
</div>
</div>
</div>
</div>
</body>
</html>
글 제목을 누르면 상세페이지로 들어간다. 자신이 쓴 글이면 (쿠키와 글 정보의 아이디가 동일하면) 삭제와 수정 버튼이 뜬다. 제대로 기능한다.
글 길이가 길어지면 갑자기 저 네비게이션 버튼이 아래로 내려가는데...
css 정말... ㅋㅋ
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.web.model7.Paging7" %>
<%@ page import = "com.sist.web.model7.BoardFileConfig7" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%@ include file = "/include/head7.jsp" %>
<%
Logger logger = LogManager.getLogger("/board/boardView7.jsp");
HttpUtil.requestLogString(request, logger);
String cookieId = CookieUtil.getValue(request, "U_ID");
long boardN = HttpUtil.get(request, "boardN", (long)0);
int searchType = HttpUtil.get(request, "searchType", 0);
String searchValue = HttpUtil.get(request, "searchValue","");
long curPage = HttpUtil.get(request, "curPage", (long)1);
BoardDao7 boardDao = new BoardDao7();
Board7 board = boardDao.boardSelect(boardN);
if(board != null){
boardDao.boardReadCnt(boardN);
}
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>2021 MINI HOMEPAGE</title>
<script src="https://kit.fontawesome.com/ab54b9d48d.js"></script>
<script>
$(document).ready(function(){
<%if(board == null){%>
alert("존재하지 않는 게시물입니다.");
document.bFrom.action ="/board/boardList.jsp";
document.bForm.submit();
<% }
else if(!StringUtil.equals(board.getbPrivate(), "Y")){
if(!StringUtil.equals(board.getuId(), cookieId)){%>
document.bForm.secret.value=1;
document.bForm.action = "/board/boardList.jsp";
document.bForm.submit();
<% } // 만약에 비밀글인데 글쓴사람과 조회인(쿠키)이 다를 경우. 리스트로 보내기.
}
else if(board != null) {%>
$("#listBtn").on("click",function(){
document.bForm.action = "/board/boardList.jsp";
document.bForm.submit();
});
<%if(StringUtil.equals(board.getuId(), cookieId)){%>
$("#modiBtn").on("click",function(){
alert("?");
document.bForm.action = "/board/bUpdate7.jsp";
document.bForm.submit();
});
$("#delBtn").on("click",function(){
if(confirm("게시물을 삭제하시겠습니까?")){
document.bForm.action="/board/delete7.jsp";
document.bForm.submit();
}
});
<%}
}%>
});
</script>
</head>
<body>
<div class="bookcover">
<div class="bookdot">
<div class="page">
<div class="profile-container">
<div class="header profile-title font-neo">
TODAY<span class="color-red"> 28</span> | TOTAL 234918
</div>
<div class="box profile-box">
<div class="profile-image">
<img
class="profile-image-img"
src="/resources/images/profile2.jpg"
alt="프로필 이미지"
/>
</div>
<div class="profile-text font-kyobohand">
ㄴr는.. 오늘도.. 눈물을.. 흘린ㄷr..★
</div>
<div class="profile-text font-kyobohand">
<span style="color: #0f1b5c">사용자</span> (♪♬)
</div>
<div class="profile-dropdown">
<div class="dropdown-button">
<div class="dropdown-title">파도타기</div>
<div class="triangle-down"></div>
</div>
<div class="dropdown-content">
<a href="#" target="_blank">블로그 바로가기</a>
<a href="#" target="_blank">페이스북 바로가기</a>
<a href="#" target="_blank">인스타그램 바로가기</a>
</div>
</div>
</div>
</div>
<div class="content-container">
<div class="header content-title">
<div class="profile-text font-kyobohand">사용자의 추억 상ㅈr... (*ˊᵕˋo💐o</div>
<div class="content-title-url">https://url주소/나중에입력</div>
</div>
<div class="box content-box">
<div>
<div class="diary-date"><div class="guestbook-title"><%=board.getbTitle()%></div>
<br/><%=board.getuNickName()%></div>
</div>
<div class="diary-scrollbox">
<div class="diary">
<div class="diary-date"><%=board.getRegDate()%></div>
<div class="diary-contents">
<p><%=board.getbContent()%></p>
</div>
</div>
<div class="secret-diary"><button id="listBtn" name="listBtn"><i class="fas fa-lock"></i>리스트로 돌아가기</button>
<%if(StringUtil.equals(board.getuId(), cookieId)){ %>
<button id="modiBtn" name="modiBtn"><i class="fas fa-lock"></i>수정</button>
<button id="delBtn" name="delBtn"><i class="fas fa-lock"></i>삭제</button></div>
<%} %>
<form id="bForm" name="bForm" method="post">
<input type="hidden" id="searchType" name="searchType" value="<%=searchType%>"/>
<input type="hidden" id="searchValue" name="searchValue" value="<%=searchValue%>"/>
<input type="hidden" id="curPage" name="curPage" value="<%=curPage%>" />
<input type="hidden" id="boardN" name="boardN" value="<%=board.getBoardN() %>" />
<input type="hidden" id="secret" name="secret" value=""/>
</form>
</div>
</div>
</div>
<div class="menu-container">
<%@ include file ="/include/navigation7.jsp" %>
</div>
</div>
</div>
</div>
</body>
</html>
글쓰기 페이지다.
admin 계정이라면 다이어리 카테고리와 게시판 카테고리를 고를 수 있고, 비밀글도 할 수 있다. 다른 계정은 게시글만 쓸 수 있다. 리스트를 누르면 리스트 페이지로 돌아간다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%@ page import = "com.sist.web.dao7.UserDao7" %>
<%@ page import = "com.sist.web.model7.User7" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%
Logger logger = LogManager.getLogger("[/board/write2.jsp]");
String cookieId = CookieUtil.getValue(request, "U_ID");
int searchType = HttpUtil.get(request, "searchType", 0);
String searchValue = HttpUtil.get(request, "searchValue", "");
long curPage = HttpUtil.get(request, "curPage", (long)1);
UserDao7 userDao = new UserDao7();
User7 user = userDao.userSelect(cookieId);
%>
<!DOCTYPE html>
<html>
<head>
<head>
<meta charset="UTF-8" />
<title>2024 MINI HOMEPAGE</title>
<%@ include file="/include/head7.jsp" %>
<script>
$(document).ready(function(){
$("#bTitle").focus();
$("#btnList").on("click",function(){
document.bForm.action ="/board/boardList.jsp";
document.bForm.submit();
});
$("#btnWrite").on("click",function(){
if($("#bTitle").val().length <= 0){
alert("제목은 필수 입력 사항입니다.");
$("#bTitle").focus();
return;
}
if($("#bContent").val().length <= 0){
alert("내용은 필수 업력 사항입니다.");
$("#bContent").focus();
return;
}
document.writeForm.submit();
});
});
</script>
<link rel="stylesheet" href="/resources/css/toble.css"/>
<style>
</style>
</head>
<body>
<div class="bookcover">
<div class="bookdot">
<div class="page">
<div class="profile-container">
<div class="header profile-title font-neo">
TODAY<span class="color-red"> 28</span> | TOTAL 234918
</div>
<div class="box profile-box">
<div class="profile-image">
<img
class="profile-image-img"
src="/resources/images/profile2.jpg"
alt="프로필 이미지"/>
</div>
<div class="profile-text font-kyobohand">
ㄴr는.. 오늘도.. 눈물을.. 흘린ㄷr..★
</div>
<div class="profile-username font-kyobohand">
<span style="color: #0f1b5c">사용자</span> (♪♬)
</div>
<div class="profile-dropdown">
<div class="dropdown-button">
<div class="dropdown-title">파도타기</div>
<div class="triangle-down"></div>
</div>
<div class="dropdown-content">
<a href="#" target="_blank">블로그 바로가기</a>
<a href="#" target="_blank">페이스북 바로가기</a>
<a href="#" target="_blank">인스타그램 바로가기</a>
</div>
</div>
</div>
</div>
<div class="content-container">
<div class="header content-title">
<div class="content-title-name">사용자의 추억 상ㅈr... (*ˊᵕˋo💐o</div>
<div class="content-title-url">https://url주소/나중에입력</div>
</div>
<div class="box content-box">
<div class="guestbook-scrollbox">
<div class="guestbook-box">
<div class="guestbook-contents">
<div class="guestbook-text">
<div class="guestbook-title"><h2>게시물 쓰기</h2></div>
<div class="content-container">
<div class="diary-contents">
<div class="profile-username font-kyobohand">
<!-- 글쓰기 폼 -->
<form name="writeForm" id="writeForm" action="/board/writeProc7.jsp" method="post">
<br/>
<input type="text" name=uNickName id="uNickName" maxlength="20" value="<%=user.getuNickName()%>" style="ime-mode:active;" class="form-control mt-4 mb-2" placeholder="이름을 입력해주세요." readonly />
<br/>
<input type="text" name="uId" id="uId" maxlength="30" value="<%=user.getuId()%>" style="ime-mode:inactive;" class="form-control mb-2" placeholder="이메일을 입력해주세요." readonly />
<br/>
<select name="writeCate" id="writeCate" class="form-control mt-4 mb-2">
<option value="" class="dropdown-title">카테고리</option>
<option class="dropdown-title" value="1">게시판</option>
<%if(StringUtil.equals(cookieId, "test")){%>
<option class="dropdown-title" value="2">다이어리</option>
<%}%>
</select>
<input type="checkbox" class="model-5" id="bPrivate" name="bPrivate" value="N"/>비밀글?<br/>
<input type="text" name="bTitle" id="bTitle" maxlength="100" style="ime-mode:active;" class="form-control mb-2" placeholder="제목을 입력해주세요." required />
<br/>
<textarea class="form-control" rows="10" name="bContent" id="bContent" style="ime-mode:active;" placeholder="내용을 입력해주세요" required></textarea>
<div class="col-sm-12">
<button type="button" id="btnWrite" class="diary-date" title="저장">저장</button>
<button type="button" id="btnList" class="diary-date" title="리스트">리스트</button>
</div>
</form>
<!-- 리스트로 돌아가기 폼 -->
<form id="bForm" name="bForm">
<input type="hidden" id="searchType" name="searchType" value="<%=searchType%>"/>
<input type="hidden" id="searchValue" name="searchValue" value="<%=searchValue%>"/>
<input type="hidden" id="curPage" name="curPage" value="<%=curPage%>" />
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="menu-container">
<%@ include file ="/include/navigation7.jsp" %>
</div>
</div>
</div>
</div>
</body>
</html>
위는 write 페이지고 아래는 위 폼을 보내서 처리하는 proc 페이지다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.web.model7.Diary7" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%
Logger logger = LogManager.getLogger("/board/writeProc7.jsp");
HttpUtil.requestLogString(request,logger);
String cookieId = CookieUtil.getValue(request, "U_ID", "");
String msg = "";
String reUrl ="";
if(!StringUtil.equals(cookieId, "")){
String bTitle = HttpUtil.get(request, "bTitle","");
String bContent = HttpUtil.get(request, "bContent","");
String aFileNum = HttpUtil.get(request, "aFileNum", "");
if(!StringUtil.equals(bTitle, "") && !StringUtil.equals(bContent, "")){
String bPrivate = HttpUtil.get(request, "bPrivate","Y");
int writeCate = HttpUtil.get(request, "writeCate", 0);
if(writeCate != 0){
BoardDao7 boardDao = new BoardDao7();
if(writeCate == 1){ //게시판
Board7 board = new Board7();
board.setuId(cookieId);
board.setbTitle(bTitle);
board.setbContent(bContent);
board.setbPrivate(bPrivate);
board.setaFileNum(aFileNum);
if(boardDao.boardInsert(board)>0){
msg="게시물이 등록되었습니다.";
reUrl="/board/boardList.jsp";
}
else{
msg="게시물 등록 중 에러가 발생하였습니다.";
reUrl="/board/write7.jsp";
}
}
else if (writeCate == 2){ // 다이어리
Diary7 diary = new Diary7();
diary.setuId(cookieId);
diary.setdTitle(bTitle);
diary.setdContent(bContent);
if(boardDao.diaryInsert(diary)>0){
msg="새로운 다이어리가 등록되었습니다.";
reUrl="/board/DiaryView.jsp";
}
else{
msg="게시물 등록 중 에러가 발생하였습니다.";
reUrl="/board/write7.jsp";
}
}
}
else{
msg="카테고리는 필수 선택 사항입니다.";
reUrl="/board/write7.jsp";
}
}
else{
msg="제목과 내용은 필수 입력 사항입니다.";
reUrl="/board/write7.jsp";
}
}
else{
msg="로그인하지 않은 사용자는 게시글을 남길 수 없습니다.";
reUrl="/";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WriteProc</title>
<%@ include file = "/include/head7.jsp" %>
<script>
$(document).ready(function(){
alert("<%=msg%>");
location.href = "<%=reUrl%>";
});
</script>
</head>
<body>
</body>
</html>
방명록 페이지다. 아래로 스크롤을 내리면 페이징 블록이 있다.
admin 계정은 모든 방명록을 삭제할 수 있고, 나머지 사용자는 자신이 작성한 방명록만 삭제할 수 있다. 방명록은 수정이 불가하다. 게시글 없는 댓글과 비슷하다고 생각할 수 있겠다.
수정 :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%@ page import = "com.sist.web.dao7.UserDao7" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.model7.User7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%
Logger log = LogManager.getLogger("updateProc.jsp");
HttpUtil.requestLogString(request, log);
String cookieId = CookieUtil.getValue(request, "USER_ID");
boolean bSuccess = false;
String eMsg = "";
long boardN = HttpUtil.get(request,"boardN",(long)0);
String searchType = HttpUtil.get(request,"searchType","");
String searchValue =HttpUtil.get(request,"searchValue","");
long curPage = HttpUtil.get(request, "curPage", (long)1);
String bTitle = HttpUtil.get(request,"bTitle","");
String bContent = HttpUtil.get(request, "bContent","");
log.debug("bTitle:"+bTitle+", bContent:"+bContent+", boardN:"+boardN);
if(boardN > 0 && !StringUtil.isEmpty(bTitle) && !StringUtil.isEmpty(bContent)){
BoardDao7 bD = new BoardDao7();
Board7 board = bD.boardSelect(boardN);
if(board !=null){
board.setbTitle(bTitle);
board.setbContent(bContent);
board.setBoardN(boardN);
if(bD.boardUpdate(board)>0){
bSuccess = true;
}
else{
eMsg ="게시물 수정중 오류가 발생하였습니다.";
}
}
else{
eMsg ="존재하지 않는 게시물입니다.";
}
}
else{
eMsg = "게시물의 데이터가 올바르지 않습니다.";
}
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head.jsp" %>
<script>
$(document).ready(function(){
<%if(bSuccess){%>
//정상 처리
alert("게시물이 수정되었습니다.");
document.bbsForm.action ="/board/boardList.jsp";
document.bbsForm.submit();
<%}
else{%>
//오류 처리
alert("<%=eMsg%>");
location.href="/board/boardList.jsp";
<%}%>
});
</script>
</head>
<body>
<form name = "bForm" id="bForm" method="post">
<input type="hidden" name="boardN" value="<%=boardN%>"/>
<input type="hidden" name="searchType" value="<%=searchType%>"/>
<input type="hidden" name="searchValue" value="<%=searchValue%>"/>
<input type="hidden" name="curPage" value="<%=curPage%>"/>
</form>
</body>
</html>
삭제:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.dao7.BoardDao7" %>
<%@ page import = "com.sist.web.model7.Board7" %>
<%@ page import = "com.sist.web.model7.GuestBook" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%
Logger logger = LogManager.getLogger("/board/delete.jsp");
HttpUtil.requestLogString(request, logger);
String cookieId = CookieUtil.getValue(request, "U_ID");
//boolean execuResult = false;
String msg ="";
String backUrl = "/board/boardList.jsp";
long boardN = HttpUtil.get(request, "boardN", (long)0);
long guestN = HttpUtil.get(request, "guestN", (long)0);
logger.debug("33333333333333333333333333 guestN:"+guestN);
BoardDao7 boardDao = new BoardDao7();
if(boardN > 0 && guestN==0){
Board7 board = boardDao.boardSelect(boardN);
if(board != null){
if(StringUtil.equals(board.getuId(), cookieId)){
if(boardDao.boardDelete(boardN)>0){
msg = "게시물이 삭제되었습니다.";
}
else{
msg ="게시물 삭제 중 오류가 발생하였습니다.";
}
}
else{
msg="게시물 삭제의 권한이 없습니다.";
}
}
else{
msg="게시물이 존재하지 않습니다.";
}
}
else if (boardN <= 0 && guestN ==0){
msg ="존재하지 않는 게시물입니다.";
}
else{//guestN != 0
if(boardDao.guestBookDelete(guestN)>0){
msg="방명록이 삭제되었습니다.";
backUrl ="/board/guestBookView.jsp";
}
else{
msg="방명록 삭제 중 오류가 발생하였습니다.";
backUrl ="/board/guestBookView.jsp";
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%@ include file="/include/head7.jsp" %>
<script>
$(document).ready(function(){
alert("<%=msg%>");
location.href= "<%=backUrl%>";
});
</script>
</head>
<body>
</body>
</html>
로그인:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.dao7.UserDao7" %>
<%@ page import = "com.sist.web.model7.User7" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%
Logger logger = LogManager.getLogger("loginProc7.jsp");
HttpUtil.requestLogString(request,logger);
String uId = HttpUtil.get(request, "uId");
String uPwd = HttpUtil.get(request, "uPwd");
String cookieId = CookieUtil.getValue(request, "U_ID");
String msg = "";
String reUrl ="";
User7 user = null;
UserDao7 userDao = new UserDao7();
logger.debug("uId,uPwd,cookieId :"+uId+", "+uPwd+", "+cookieId);
if(StringUtil.isEmpty(cookieId)){
System.out.print(uId);
if(!StringUtil.isEmpty(uId) && !StringUtil.isEmpty(uPwd)){
user = userDao.userSelect(uId);
if(user != null){
System.out.println("uPwd, user.Pwd :"+uPwd+","+user.getuPwd());
if(StringUtil.equals(uPwd, user.getuPwd())){
if(StringUtil.equals(user.getuState(),"Y")){
CookieUtil.addCookie(response, "", "U_ID", uId);
msg="로그인 성공";
reUrl="/board/list7.jsp";
}
else{
msg="정지된 사용자입니다.";
}
}
else{
msg="비밀번호가 일치하지 않습니다.";
}
}
else{
msg="존재하지 않는 아이디입니다.";
reUrl="/";
}
}
else{
msg="아이디나 비밀번호가 입력되지 않았습니다.";
reUrl="/";
}
}
else{
if(!StringUtil.isEmpty(uId)){ //uId 쿠키가 있으면서 uId 내용이 있는 경우
user = userDao.userSelect(uId);
if(user!=null){
if(StringUtil.equals(user.getuState(), "Y")){
if(StringUtil.equals(cookieId, user.getuId())){
msg="이미 로그인된 사용자입니다.";
reUrl="/board/list7.jsp";
}
else{
CookieUtil.deleteCookie(request,response,"U_ID");
//새로운 쿠키로 로그인하고 메세지 띄워주기
}
}
else{
CookieUtil.deleteCookie(request,response,"U_ID");
msg="정지된 사용자입니다.";
reUrl="/";
}
}
else{
msg="사용자가 아닙니다.";
reUrl="/";
}
}
else{
CookieUtil.deleteCookie(request,response,"U_ID");
msg="아이디 입력이 잘못되었습니다.";
reUrl="/";
}
}
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head.jsp" %>
</head>
<body>
<script>
$(document).ready(function(){
alert("<%=msg%>");
location.href ="<%=reUrl%>"
});
</script>
</body>
</html>
로그아웃:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%
Logger logger = LogManager.getLogger("loginOut7.jsp");
HttpUtil.requestLogString(request,logger);
if(CookieUtil.getValue(request, "U_ID") != null){
CookieUtil.deleteCookie(request, response, "U_ID");
}
response.sendRedirect("/index7.jsp");
%>
회원가입:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<!DOCTYPE html>
<head>
<%@include file="/include/head7.jsp" %>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원가입</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<style>
body {
min-height: 100vh;
background: -webkit-gradient(linear, left bottom, right top, from(#92b5db), to(#1d466c));
background: -webkit-linear-gradient(bottom left, #92b5db 0%, #1d466c 100%);
background: -moz-linear-gradient(bottom left, #92b5db 0%, #1d466c 100%);
background: -o-linear-gradient(bottom left, #92b5db 0%, #1d466c 100%);
background: linear-gradient(to top right, #92b5db 0%, #1d466c 100%);
background-color: #a3a3a3;
/** body에 배경이미지 적용 */
background-image: url('https://cdn.inflearn.com/public/files/posts/38f50939-dbdc-4b1c-b4f8-72144342026f/%EB%B0%B0%EA%B2%BD.png');
}
.input-form {
max-width: 680px;
margin-top: 80px;
padding: 32px;
background: #fff;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
-webkit-box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.15);
box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.15)
}
</style>
<script>
$(document).ready(function(){
$("#regBtn").on("click",function(){
var idCheck = /^[a-zA-Z0-9]{4,15}$/;
var spaceCheck = /\s/g;
var num = /^[0-9]{2,3}[0-9]{3,4}[0-9]{4}$/;
var emailCheck = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if($.trim($("#uId").val()).length <= 0){
alert("아이디는 필수 입력 사항입니다.");
$("#uId").focus();
return;
}
if(!idCheck.test($("#uId").val()) || spaceCheck.test($("#uId").val())){
alert("아이디는 4~12자의 공백이 없는 영문 대소문자와 숫자로만 입력이 가능합니다.");
$("#uId").focus();
return;
}
if($.trim($("#uNickname").val()).length <= 0){
alert("닉네임을 입력해 주세요.");
$("#uId").focus();
return;
}
if($.trim($("#uName").val()).length <= 0){
alert("이름은 필수 입력 사항입니다.");
$("#uName").focus();
return;
}
if($.trim($("#uPwd1").val()).length <= 0){
alert("비밀번호는 필수 입력 사항입니다.");
$("#uPwd1").focus();
return;
}
if(!idCheck.test($("#uPwd1").val()) || spaceCheck.test($("#uPwd1").val())){
alert("비밀번호는 4~12자의 공백이 없는 영문 대소문자와 숫자로만 입력이 가능합니다.");
$("#uPwd1").focus();
return;
}
if($("#uPwd1").val() != $("#uPwd2").val()){
alert("비밀번호와 비밀번호 확인이 일치하지 않습니다.");
$("#uPwd2").val("");
$("#uPwd2").focus();
return
}
$("#uPwd").val($("#uPwd1").val());
if(!emailCheck.test($.trim($("#uEmail").val()))){
alert("이메일을 알맞게 입력해 주세요.");
$("#uEmail").focus();
return;
}
if(!num.test($("#uPhone").val())){
alert("휴대폰 번호는 '-' 없이 숫자로만 입력해 주세요.");
$("#uPhone").focus();
return;
}
$.ajax({
type:"POST",
url:"/user/userIdCheckAjax7.jsp",
data:{uId:$("#uId").val() },
datatype:"JSON",
success:function(obj){
var data = JSON.parse(obj);
if(data.flag == 0){
alert("가입 진행 가능");
document.uRegForm.submit();
}
else if(data.flag==1){
alert("중복된 아이디가 존재합니다.");
$("#uId").focus();
}
else{
alert("아이디 값을 확인하세요.");
$("#uId").focus();
}
},
error:function(xhr,status, error){
alert("아이디 중복 체크 오류");
}
});
});
});
</script>
</head>
<body>
<div class="container">
<div class="input-form-backgroud row">
<div class="input-form col-md-12 mx-auto">
<h4 class="mb-3">회원가입</h4>
<form class="validation-form" name="uRegForm" id="uRegForm" method = "post" action="/user/userProc7.jsp">
<div class="row">
<div class="col-md-6 mb-3">
<input type="text" class="form-control" id="uId" name="uId" placeholder="아이디를 입력하세요." >
</div>
<div class="col-md-6 mb-3">
<input type="text" class="form-control" id="uNickname" name="uNickname" placeholder="닉네임">
<div class="invalid-feedback">
</div>
</div>
</div>
<div class="mb-3">
<input type="text" class="form-control" id="uName" name="uName" placeholder="이름" >
<div class="invalid-feedback">
</div>
</div>
<div class="mb-3">
<input type="password" class="form-control" id="uPwd1" placeholder="비밀번호" >
<div class="invalid-feedback">
</div>
</div>
<div class="mb-3">
<input type="password" class="form-control" id="uPwd2" placeholder="비밀번호 확인" >
<div class="invalid-feedback">
</div>
</div>
<div class="mb-3">
<input type="email" class="form-control" id="uEmail" name="uEmail" placeholder="you@example.com" >
<div class="invalid-feedback">
</div>
</div>
<div class="mb-3">
<input type="text" class="form-control" id="uPhone" name="uPhone" placeholder="'-'없이 숫자로만 입력해 주세요." >
<div class="invalid-feedback">
</div>
</div>
<div class="mb-3">
<input type="date" class="form-control" id="uBirth" name="uBirth">
<div class="invalid-feedback">
</div>
</div>
<div class="row">
<div class="col-md-8 mb-3">
<select class="custom-select d-block w-100" id="uGender" name="uGender">
<option value=""></option>
<option selected>M</option>
<option>W</option>
</select>
<div class="invalid-feedback">
</div>
</div>
</div>
<hr class="mb-4">
<div class="mb-4"></div>
<input type="hidden" id="uPwd" name="uPwd" value=""/>
<button class="btn btn-primary btn-lg btn-block" id="regBtn" name="regBtn">가입 완료</button>
</form>
</div>
</div>
<footer class="my-3 text-center text-small">
<p class="mb-1">© 2021 YD</p>
</footer>
</div>
</body>
</html>
에이젝스:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.logging.log4j.LogManager" %>
<%@ page import = "org.apache.logging.log4j.Logger" %>
<%@ page import = "com.sist.web.util.HttpUtil" %>
<%@ page import = "com.sist.web.dao7.UserDao7" %>
<%@ page import = "com.sist.common.util.StringUtil" %>
<%@ page import = "com.sist.web.util.CookieUtil" %>
<%
Logger logger = LogManager.getLogger("userIdCheckAjax7.jsp");
HttpUtil.requestLogString(request,logger);
String uId = HttpUtil.get(request, "uId");
logger.debug("uid:"+uId);
%>
<%
//HTTP 로
//userid 받기
String userId = HttpUtil.get(request, "userId");
//userId가 비어있는지 확인
if(!StringUtil.isEmpty(uId)){
UserDao7 userDao = new UserDao7();
if(userDao.userIdCheckSelect(uId)<=0){
//사용 가능(아이디 미존재)
logger.debug("flag:"+0);
response.getWriter().write("{\"flag\":0}");
}
else{
logger.debug("flag:"+1);
//중복된 경우 (아이디가 이미 존재)
response.getWriter().write("{\"flag\":1}");
}
}
else{
//아이디 값이 없는 경우
response.getWriter().write("{\"flag\":-1}"); //userRegForm.jsp 에서 ajax 에서 else로 빠지게 하기 위함
}
%>
유저다오:
package com.sist.web.dao7;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.sist.web.db.DBManager;
import com.sist.web.model7.User7;
public class UserDao7 {
Logger logger = LogManager.getLogger(UserDao7.class);
//회원가입 - 아이디 중복 체크
public int userIdCheckSelect(String uId) {
int result = 0;
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(*) CNT ");
sql.append("FROM CY_USER ");
sql.append("WHERE U_ID = ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
pst.setString(1, uId);
rs = pst.executeQuery();
if(rs.next()) {
result = rs.getInt("CNT");
System.out.println(result);
}
}
catch(Exception e){
logger.error("[UserDao7]userIdCheckSelect Exception");
}
finally {
DBManager.close(rs, pst, conn);
}
return result;
}
public int userInsert(User7 user) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO CY_USER (U_ID, U_NAME, U_PASSWORD, U_NICKNAME, U_EMAIL, U_PHONE, U_GENDER, STATUS, REG_DATE) ");
sql.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?, SYSDATE) ");
try {
int idx = 0;
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
pst.setString(++idx, user.getuId());
pst.setString(++idx, user.getuName());
pst.setString(++idx, user.getuPwd());
pst.setString(++idx, user.getuNickName());
pst.setString(++idx, user.getuEmail());
pst.setString(++idx, user.getuPhone());
pst.setString(++idx, user.getuGender());
pst.setString(++idx, user.getuState());
cnt = pst.executeUpdate();
}
catch(Exception e) {
logger.debug("[UserDao7]userInsert Exception");
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
//로그인
public User7 userSelect (String uId) {
User7 user = null;
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT U_ID, U_NAME, NVL(U_PASSWORD,'') U_PASSWORD, NVL(U_NICKNAME,'') U_NICKNAME, NVL(U_EMAIL,'') U_EMAIL, ");
sql.append(" NVL(U_PHONE,'') U_PHONE, NVL(U_GENDER,'') U_GENDER, STATUS, TO_CHAR(REG_DATE,'YYYY.DD.MM') REG_DATE ");
sql.append(" FROM CY_USER ");
sql.append(" WHERE U_ID = ? ");
try {
conn=DBManager.getConnection();
pst=conn.prepareStatement(sql.toString());
pst.setString(1, uId);
rs = pst.executeQuery();
if(rs.next()) {
user = new User7();
user.setuId(rs.getString("U_ID"));
user.setuPwd(rs.getString("U_PASSWORD"));
user.setuNickName(rs.getString("U_NICKNAME"));
user.setuEmail(rs.getString("U_EMAIL"));
user.setuPhone(rs.getString("U_PHONE"));
user.setuState(rs.getString("STATUS"));
user.setuGender(rs.getString("U_GENDER"));
user.setuRegDate(rs.getString("REG_DATE"));
user.setuName(rs.getString("U_NAME"));
}
logger.debug("user.setuPwd : "+user.getuPwd());
logger.debug("user.setuState : "+user.getuState());
}
catch(Exception e) {
logger.error("[UserDao7].userSelect Exception", e);
}
finally {
DBManager.close(rs, pst, conn);
}
return user;
}
//회원정보수정
public int userUpdate(User7 user) {
//logger.debug("업데이트 시작");
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("UPDATE CY_USER ");
sql.append("SET U_PASSWORD = ?, ");
sql.append(" U_NICKNAME = ?, ");
sql.append(" U_EMAIL= ? , ");
sql.append(" U_PHONE= ?, ");
sql.append(" U_GENDER= ? ");
sql.append("WHERE U_ID = ? ");
logger.debug("try-catch문 시작: "+user.getuNickName());
try {
conn=DBManager.getConnection();
pst=conn.prepareStatement(sql.toString());
int idx =0;
pst.setString(++idx, user.getuPwd());
pst.setString(++idx, user.getuNickName());
pst.setString(++idx, user.getuEmail());
pst.setString(++idx, user.getuPhone());
pst.setString(++idx, user.getuGender());
pst.setString(++idx, user.getuId());
//logger.debug("sql.toString() : " +sql.toString());
//logger.debug("pst 실행 직전");
cnt = pst.executeUpdate();
//logger.debug("pst 실행 직후");
}
catch(Exception e) {
logger.error("[userDao]userUpdate SQLException", e);
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
}
보드 다오:
package com.sist.web.dao7;
import java.util.ArrayList;
import java.util.List;
import com.sist.web.model7.Board7;
import com.sist.web.model7.Diary7;
import com.sist.web.model7.GuestBook;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.sist.common.util.StringUtil;
import com.sist.web.db.DBManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BoardDao7 {
Logger logger = LogManager.getLogger("[BoardDao7.java]");
//리스트 뽑기
public List BoardList (Board7 board) {
List<Board7> list = new ArrayList<>();
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT BOARD_N, U_ID, U_NICKNAME, B_TITLE, BOARD_READ_CNT ");
sql.append(" FROM (SELECT ROWNUM RN, BOARD_N, U_ID, U_NICKNAME, B_TITLE, BOARD_READ_CNT ");
sql.append(" FROM (SELECT A.* ");
sql.append(" FROM (SELECT B.BOARD_N, U.U_ID, NVL(U.U_NICKNAME,'') U_NICKNAME, NVL(B.B_TITLE,'') B_TITLE, NVL(B.BOARD_READ_CNT,0) BOARD_READ_CNT ");
sql.append(" FROM CY_BOARD B, CY_USER U ");
sql.append(" WHERE U.U_ID = B.U_ID ");
if(board != null) {
if(!StringUtil.isEmpty(board.getuNickName())) {
sql.append(" AND U.U_NICKNAME LIKE '%'||?||'%' ");
}
if(!StringUtil.isEmpty(board.getbTitle())) {
sql.append(" AND B.B_TITLE LIKE '%'||?||'%' ");
}
if(!StringUtil.isEmpty(board.getbContent())) {
sql.append(" AND DBMS_LOB.INSTR(B.B_CONTENT, ?) > 0 ");
}
}
sql.append(" ORDER BY B.REG_DATE DESC)A )C) ");
if(board!=null) {
sql.append("WHERE RN >=? ");
sql.append(" AND RN <=? ");
}
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
int index = 0;
if(board!=null) {
if(!StringUtil.isEmpty(board.getuNickName())) {
pst.setString(++index, board.getuNickName());
}
if(!StringUtil.isEmpty(board.getbTitle())) {
pst.setString(++index, board.getbTitle());
}
if(!StringUtil.isEmpty(board.getbContent())) {
pst.setString(++index, board.getbContent());
}
pst.setLong(++index, board.getStartRow());
pst.setLong(++index, board.getEndRow());
}
rs = pst.executeQuery();
while(rs.next()) {
Board7 bb = new Board7();
bb.setBoardN(rs.getLong("BOARD_N"));
bb.setuId(rs.getString("U_ID"));
bb.setuNickName(rs.getString("U_NICKNAME"));
bb.setbTitle(rs.getString("B_TITLE"));
bb.setBoardReadCnt(rs.getLong("BOARD_READ_CNT"));
//logger.debug("list title : "+ bb.getbTitle());
list.add(bb);
}
}
catch(Exception e) {
logger.error("[BoardDao7 boardList]", e);
}
finally {
DBManager.close(rs, pst, conn);
}
return list;
}
//총 게시물 수
public long boardTotalCnt (Board7 board) {
long cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(A.BOARD_N) AS TOTALCNT");
sql.append(" FROM CY_BOARD A, CY_USER B ");
sql.append(" WHERE A.U_ID = B.U_ID ");
if(board!=null) {
if(!StringUtil.isEmpty(board.getuNickName())) {
sql.append("AND B.U_NICKNAME LIKE '%'||?||'%' ");
}
if(!StringUtil.isEmpty(board.getbTitle())) {
sql.append("AND A.B_TITLE LIKE '%'||?||'%' ");
}
if(!StringUtil.isEmpty(board.getbContent())) {
sql.append("AND DBMS_LOB.INSTR(A.B_CONTENT, ?) > 0 ");
}
}
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
int idx=0;
if(board!=null) {
if(!StringUtil.isEmpty(board.getuNickName())) {
pst.setString(++idx, board.getuNickName());
}
if(!StringUtil.isEmpty(board.getbTitle())) {
pst.setString(++idx, board.getbTitle());
}
if(!StringUtil.isEmpty(board.getbContent())) {
pst.setString(++idx, board.getbContent());
}
}
rs = pst.executeQuery();
if(rs.next()) {
cnt = rs.getLong("TOTALCNT");
}
}
catch(Exception e){
logger.error("[BoardDao7] boardTotalCnt SQL Exception",e);
}
finally {
DBManager.close(rs, pst, conn);
}
return cnt;
}
//상세페이지용 하나뽑기
public Board7 boardSelect (long boardN) {
Board7 board = new Board7();
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT B.BOARD_N, A.U_ID, A.U_NICKNAME, NVL(B.A_FILE_NUM,'') AS A_FILE_NUM, B.B_PRIVATE, ");
sql.append(" NVL(B.B_TITLE,'') B_TITLE, NVL(B.B_CONTENT,'') B_CONTENT, B.REG_DATE, B.BOARD_READ_CNT ");
sql.append(" FROM CY_USER A, CY_BOARD B ");
sql.append(" WHERE A.U_ID = B.U_ID ");
sql.append(" AND B.BOARD_N = ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
pst.setLong(1, boardN);
rs = pst.executeQuery();
if(rs.next()) {
board.setBoardN(rs.getLong("BOARD_N"));
board.setuId(rs.getString("U_ID"));
board.setuNickName(rs.getString("U_NICKNAME"));
board.setaFileNum(rs.getString("A_FILE_NUM"));
board.setbPrivate(rs.getString("B_PRIVATE"));
board.setbTitle(rs.getString("B_TITLE"));
board.setbContent(rs.getString("B_CONTENT"));
board.setRegDate(rs.getString("REG_DATE"));
board.setBoardReadCnt(rs.getLong("BOARD_READ_CNT"));
}
}
catch(Exception e) {
logger.error("[BoardDao7]boardSelect SQL Exception");
}
return board;
}
//게시물 수정
public int boardUpdate (Board7 board) {
int count = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("UPDATE CY_BOARD ");
sql.append(" SET B_TITLE = ?, ");
sql.append(" B_CONTENT = ? ");
sql.append(" WHERE BOARD_N = ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
int idx = 0;
pst.setString(++idx, board.getbTitle());
pst.setString(++idx, board.getbContent());
pst.setLong(++idx, board.getBoardN());
count=pst.executeUpdate();
}
catch(Exception e) {
logger.error("[UserDao]userUpdate SQLException", e);
}
finally {
DBManager.close(pst, conn);
}
return count;
}
//조회수 높이기
public int boardReadCnt (long boardN) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("UPDATE CY_BOARD ");
sql.append(" SET BOARD_READ_CNT = BOARD_READ_CNT + 1 ");
sql.append(" WHERE BOARD_N = ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
pst.setLong(1, boardN);
cnt=pst.executeUpdate();
}
catch(Exception e) {
logger.error("[boardDao7] boardReadCnt SQL Exception");
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
//게시물 삭제
public int boardDelete (long boardN) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM CY_BOARD ");
sql.append(" WHERE BOARD_N = ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
pst.setLong(1, boardN);
cnt = pst.executeUpdate();
}
catch(Exception e) {
logger.debug("[boardDao7]boardDelete SQLException");
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
//게시물 등록
public int boardInsert (Board7 board) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO CY_BOARD ");
sql.append("(BOARD_N, U_ID, BOARD_READ_CNT, A_FILE_NUM, B_PRIVATE, B_TITLE, B_CONTENT, REG_DATE) ");
sql.append(" VALUES ");
sql.append("(?, ?, ?, ?, ?, ?, ?, SYSDATE ) ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
int idx = 0;
long boardN = 0;
boardN = newBoardN(conn);
board.setBoardN(boardN);
pst.setLong(++idx, board.getBoardN());
pst.setString(++idx, board.getuId());
pst.setLong(++idx, 0);
pst.setString(++idx, board.getaFileNum());
pst.setString(++idx, board.getbPrivate());
pst.setString(++idx, board.getbTitle());
pst.setString(++idx, board.getbContent());
cnt = pst.executeUpdate();
}
catch(Exception e) {
logger.error("[boardDao7]boardInsert SQLException", e);
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
//시퀀스 조회
private long newBoardN (Connection conn) {
long boardN = 0;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
ResultSet rs = null;
sql.append("SELECT SEQ_CY_BOARD_SEQ.NEXTVAL FROM DUAL ");
try {
pst = conn.prepareStatement(sql.toString());
rs = pst.executeQuery();
if(rs.next()) {
boardN = rs.getLong(1);
}
}
catch(Exception e) {
logger.error("[BoardDao7]newBoardN SQLException");
}
finally {
DBManager.close(rs, pst);
}
return boardN;
}
//다이어리 인서트
public int diaryInsert (Diary7 diary) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO DIARY ");
sql.append("(D_NUM, U_ID, D_TITLE, D_CONTENT, REG_DATE) ");
sql.append("VALUES ");
sql.append("((SELECT NVL(MAX(D_NUM),0)+1 FROM DIARY),?,?,?,SYSDATE) ");
try {
conn = DBManager.getConnection();
pst=conn.prepareStatement(sql.toString());
int idx = 0;
pst.setString(++idx, diary.getuId());
pst.setString(++idx,diary.getdTitle());
pst.setString(++idx, diary.getdContent());
cnt = pst.executeUpdate();
}
catch(Exception e) {
logger.error("[BoardDao] boardInsert SQLException", e);
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
//다이어리 총 게시물 수
public long diaryTotalCnt () {
long cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(D_NUM) AS TOTALCNT");
sql.append(" FROM DIARY ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
rs = pst.executeQuery();
if(rs.next()) {
cnt = rs.getLong("TOTALCNT");
}
}
catch(Exception e){
logger.error("[BoardDao7] diaryTotalCnt SQL Exception",e);
}
finally {
DBManager.close(rs, pst, conn);
}
return cnt;
}
//다이어리 뽑아오기
public List DiaryList (Diary7 diary) {
List<Diary7> list = new ArrayList<>();
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT D_NUM, D_TITLE, D_CONTENT, REG_DATE ");
sql.append(" FROM (SELECT ROWNUM RN, D_NUM, D_TITLE, D_CONTENT, REG_DATE ");
sql.append(" FROM (SELECT D_NUM, D_TITLE, D_CONTENT, REG_DATE ");
sql.append(" FROM (SELECT D_NUM, D_TITLE, D_CONTENT, REG_DATE ");
sql.append(" FROM DIARY ");
sql.append(" ORDER BY REG_DATE DESC))) ");
sql.append("WHERE RN >= ? ");
sql.append(" AND RN <= ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
int index = 0;
pst.setLong(++index, diary.getStartRow());
pst.setLong(++index, diary.getEndRow());
rs = pst.executeQuery();
while(rs.next()) {
Diary7 d = new Diary7();
d.setdNum(rs.getLong("D_NUM"));
d.setdTitle(rs.getString("D_TITLE"));
d.setdContent(rs.getString("D_CONTENT"));
d.setRegDate(rs.getString("REG_DATE"));
list.add(d);
}
}
catch(Exception e) {
logger.error("[BoardDao7] DiaryList", e);
}
finally {
DBManager.close(rs, pst, conn);
}
return list;
}
//방명록 토탈
public long GuestBookTotalCnt () {
long cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(GUEST_N) AS TOTALCNT");
sql.append(" FROM GUEST_BOOK ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
rs = pst.executeQuery();
if(rs.next()) {
cnt = rs.getLong("TOTALCNT");
}
}
catch(Exception e){
logger.error("[BoardDao7] GuestTotalCnt SQL Exception",e);
}
finally {
DBManager.close(rs, pst, conn);
}
return cnt;
}
//방명록 리스트
public List GuestBookList (GuestBook gb) {
List<GuestBook> list = new ArrayList<>();
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT GUEST_N, U_ID, U_NICKNAME, GUEST_CONTENT,REG_DATE FROM (SELECT ROWNUM RN, A.* ");
sql.append(" FROM (SELECT * FROM(SELECT B.GUEST_N, U.U_ID, U.U_NICKNAME, B.GUEST_CONTENT, B.REG_DATE ");
sql.append(" FROM GUEST_BOOK B, CY_USER U ");
sql.append(" WHERE B.U_ID = U.U_ID ");
sql.append(" ORDER BY REG_DATE DESC))A) ");
sql.append(" WHERE RN>= ? ");
sql.append(" AND RN<= ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
int index = 0;
pst.setLong(++index, gb.getStartRow());
pst.setLong(++index, gb.getEndRow());
rs = pst.executeQuery();
while(rs.next()) {
GuestBook g = new GuestBook();
g.setGuestN(rs.getLong("GUEST_N"));
g.setuId(rs.getString("U_ID"));
g.setuNickname(rs.getString("U_NICKNAME"));
g.setgContent(rs.getString("GUEST_CONTENT"));
g.setRegDate(rs.getString("REG_DATE"));
list.add(g);
}
}
catch(Exception e) {
logger.error("[BoardDao7] GUESTList ", e);
}
finally {
DBManager.close(rs, pst, conn);
}
return list;
}
//방명록 인서트
public int GuestBookInsert (GuestBook guest) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO GUEST_BOOK ");
sql.append("(GUEST_N, U_ID, GUEST_CONTENT, REG_DATE) ");
sql.append("VALUES ");
sql.append("((SELECT NVL(MAX(GUEST_N),0)+1 FROM GUEST_BOOK),?,?,SYSDATE) ");
try {
conn = DBManager.getConnection();
pst=conn.prepareStatement(sql.toString());
int idx = 0;
pst.setString(++idx, guest.getuId());
pst.setString(++idx, guest.getgContent());
cnt = pst.executeUpdate();
}
catch(Exception e) {
logger.error("[BoardDao] boardInsert SQLException", e);
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
//방명록 업데이트(삭제)
public int guestBookDelete (long guestN) {
int cnt = 0;
Connection conn = null;
PreparedStatement pst = null;
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM GUEST_BOOK ");
sql.append(" WHERE GUEST_N = ? ");
try {
conn = DBManager.getConnection();
pst = conn.prepareStatement(sql.toString());
pst.setLong(1, guestN);
cnt = pst.executeUpdate();
}
catch(Exception e) {
logger.debug("[boardDao7]guestBookDelete SQLException");
}
finally {
DBManager.close(pst, conn);
}
return cnt;
}
}
css 는 말할 것도 없지만, 아... 자바스크립트는 정말 어렵다... 차라리 자바가 낫다는게 뭔지 알겠다... 오류가 나도 뭐가 문젠지 알 수가 없다. 연습이 필요할듯.
시간이 더 있다면 ajax 활용해서 좋아요 구현하고 싶었다. 그리고 투데이 기능도 하고 싶었는데 아쉽다.
다른 팀 발표를 보니 아이디/비밀번호 찾기/ 지도 api 가져오기 등 색다른게 많아서 다음 프로젝트는 댓글 포함 좀 더 적극적으로 계획해보려고 한다. 끝.
최종 시연 영상:
html 템플릿 소스는 다음 링크 블로그 주인분께 허락을 받고 가져왓다.
감사합니닷...
https://sujin-dev.tistory.com/378#comment19479024
[ Visual Studio Code ] 싸이월드 페이지 만들기 - ②
TODAY 28 | TOTAL 123456 수지니의 추억상ㅈr..(*ˊᵕˋo💐ohttps://cafe.naver.com/codeuniv body { background-color: #a3a3a3; /** body에 배경이미지 적용 */ background-image: url("../static/images/pattern.png"); /** 고정된 사이즈로 설
sujin-dev.tistory.com