보라코딩

Day74_230412_ JSP, MyBatis 게시판 본문

코딩/Servlet, JSP, MyBatis

Day74_230412_ JSP, MyBatis 게시판

new 보라 2023. 4. 12. 17:43

comm_delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 화면에서 암호입력 받고 DB에서 삭제 요청(comm_delete_ok.jsp)
전달받은 암호와 DB저장 암호 일치하면 댓글 삭제처리
삭제완료 : 게시글 상세페이지(view.jsp) 
암호가 다르면 : 암호입력 페이지로
--%>
<%
int commentIdx = Integer.parseInt(request.getParameter("commentIdx"));
//System.out.println(commentIdx);

// EL에 사용하기 위해 scope 에 저장
pageContext.setAttribute("commentIdx", commentIdx);
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>삭제 작업(암호입력)</title>
<script>
let pwd_chk = "${pwd_chk}";
if(pwd_chk == "fail"){
alert("암호불일치")
}


function comm_del(frm){
let isDelete = confirm("정말 삭제하시겠습니까?");
if (isDelete){
frm.submit();
} else {
history.back();  //삭제 취소하고 이전페이지(상제보기) 이동
}
}

</script>
</head>
<body>

<form action="comm_delete_ok.jsp" method="post">
<p>비밀번호 : <input type="password" name="pwd">
<!-- <input type="submit" value="삭제"> -->
<input type="button" value="삭제" onclick="comm_del(this.form)">
<input type="hidden" name="commentIdx" value=${commentIdx}>
</p>
</form>
</body>
</html>

 

 

 

 

 

 

comm_delete_ok.jsp

<%@page import="com.mystudy.bbs.dao.BbsDAO"%>
<%@page import="com.mystudy.bbs.vo.BbsVO"%>
<%@page import="com.mystudy.bbs.vo.CommentVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%-- 화면에서 암호입력 받고 DB에서 삭제 요청(comm_delete_ok.jsp)
전달받은 암호와 DB저장 암호 일치하면 댓글 삭제처리
삭제완료 : 게시글 상세페이지(view.jsp) 
암호가 다르면 : 암호입력 페이지로
--%>
    
<%
request.setCharacterEncoding("UTF-8");

String pwd = request.getParameter("pwd");
int commentIdx = Integer.parseInt(request.getParameter("commentIdx"));
System.out.println("pwd : "+pwd+", commentIdx : "+ commentIdx);

//DB에서 댓글 가져오기
CommentVO cvo = BbsDAO.getCommentOne(commentIdx);
System.out.println("cvo"+cvo);
String dbpwd = cvo.getPwd();
System.out.println("dbpwd : "+ dbpwd);

//session에 있는 데이터 확인
BbsVO bvo = (BbsVO)session.getAttribute("bvo");
String cPage= (String)session.getAttribute("cPage");
System.out.println("bvo : "+bvo+", cPage : "+ cPage);

//DB없는경우
  if (cvo == null){
response.sendRedirect("view.jsp?bbsIdx="+bvo.getBbsIdx()+"&cPage="+cPage);
return;


if(dbpwd.equals(pwd)){

} else {
request.setAttribute("pwd_chk", "fail");
RequestDispatcher rd = request.getRequestDispatcher("comm_delete.jsp?commentIdx="+commentIdx);
rd.forward(request,response);
return;
}

if(!dbpwd.equals(pwd)){
request.setAttribute("pwd_chk", "fail");
RequestDispatcher rd = request.getRequestDispatcher("comm_delete.jsp?commentIdx="+commentIdx);
rd.forward(request,response);
return;
}

try{
System.out.println("비번맞음"+ dbpwd+","+pwd);
int result = BbsDAO.deleteComment(commentIdx);
System.out.println("삭제완료 : " + result);

response.sendRedirect("view.jsp?bbsIdx="+bvo.getBbsIdx()+"&cPage="+cPage);
} catch(Exception e){
e.printStackTrace();
}
%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

 

 

modify.jsp

<%@page import="com.mystudy.bbs.vo.BbsVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%-- 수정작업용 화면 만들고(write.jsp와 유사)
 데이터 입력 후 데이터를 전달(modify_ok.jsp)로 수정요청하기
 패스워드는 표시X 직접 입력하게 --%>
<%
BbsVO bvo = (BbsVO)session.getAttribute("bvo");
System.out.println("modify.jsp bvo :"+bvo);

pageContext.setAttribute("bvo", bvo);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
function list_go(){
location.href = "list.jsp";
}

function sendData(){
//alert("sendData() 함수호출");
let firstForm = document.forms[0];
for(let i = 0; i< firstForm.elements.length; i++){
if (firstForm.elements[i].value.trim() == ""){
if(i==3) continue;
alert(firstForm.elements[i].title + " 입력하세요");
firstForm.elements[i].focus();
return;
}
}
firstForm.submit();
}
</script>
</head>
<body>
<div id = "bbs">
<form action="modify_ok.jsp" method="post" enctype="multipart/form-data">
<table>
<caption>게시판 글쓰기</caption>
<tbody>
<tr>
<th>제목</th>
<td>
<input type="text" name="subject" title="제목" value="${bvo.subject }">
</td>
</tr>
<tr>
<th>작성자</th>
<td>
<input type="text" name="writer" title="작성자" value="${bvo.writer }">
</td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="content" row="8" cols="50" title="내용" >${bvo.content }</textarea>
</td>
</tr>
<tr>
<th>첨부파일</th>
<td>
<input type="file" name="filename" title="첨부파일">
</td>
</tr>
<tr>
<th>패스워드</th>
<td>
<input type="password" name="pwd" title="암호">
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">
<input type="button" value="저장" onclick="sendData()">
<input type="reset" value="초기화">
<input type="button" value="목록보기" onclick="list_go()">
<input type="hidden" name="bbsIdx" value="${bvo.bbsIdx}" onclick="list_go()">
</td>

</tr>
</tfoot>

</table>

</form>


</div>
</body>
</html>

 

 

modify_ok.jsp

<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="com.mystudy.bbs.dao.BbsDAO"%>
<%@page import="com.mystudy.bbs.vo.BbsVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- DB수정 작업 처리
전달받은 암호와 DB저장(session에 있음) 암호가 일치하면 게시글 수정처리
수정완료 : 게시글 상세페이지(view.jsp)로 이동
암호 다르면 : 수정페이지(modify.jsp)로 이동
--%>

<%
// 0. Post 방식이기에 한글처리 필요
request.setCharacterEncoding("UTF-8");


String path = "c:/Mystudy/temp";

MultipartRequest mr = new MultipartRequest(
request, //요청객체
path, //실제 파일을 저장할 경로(업로드 위치)
10 * 1024 * 1024, //업로드 파일의 최대크기 지정(byte 단위)
"UTF-8", //인코딩 형식
new DefaultFileRenamePolicy());

// 전달받은 데이터 VO에 저장 후 DB에 입력처리(DB 연동 작업)
BbsVO bvo = new BbsVO();
bvo.setSubject(mr.getParameter("subject"));
bvo.setWriter(mr.getParameter("writer"));
bvo.setContent(mr.getParameter("content"));
bvo.setPwd(mr.getParameter("pwd"));

bvo.setBbsIdx(Integer.parseInt(mr.getParameter("bbsIdx")));

bvo.setIp(request.getRemoteAddr());

// 첨부파일 데이터 처리
if (mr.getFile("filename") == null){
//System.out.println(">> 첨부파일 없음");
bvo.setFileName("");
bvo.setOriName("");
} else {
//System.out.println(">> 첨부파일 있음");
bvo.setFileName(mr.getFilesystemName("filename")); //물리적으로 저장되는 파일명
bvo.setOriName(mr.getOriginalFileName("filename")); //물리적으로 저장되는 파일명
}
System.out.println("bvo : "+ bvo);

// DB에 입력(저장) 처리
//BbsDAO.insert(bvo);

// 화면 전환
//response.sendRedirect("list.jsp");




//전달받은 암호와 DB저장(session에 있음) 암호가 일치하면 게시글 수정처리
BbsVO bvo_session = (BbsVO)session.getAttribute("bvo");
System.out.println("bvo_session : "+bvo_session);
System.out.println("modify_ok.jsp bvo_session.getPwd() :"+bvo_session.getPwd());
System.out.println("bvo.getPwd() : "+bvo.getPwd());
String cPage= (String)session.getAttribute("cPage");

if(bvo.getPwd().equals(bvo_session.getPwd())){
System.out.println("업데이트될 bvo : "+ bvo);
int result = BbsDAO.update(bvo);
System.out.println("update처리완료 : "+ result);
response.sendRedirect("view.jsp?bbsIdx="+bvo.getBbsIdx()+"&cPage="+cPage);
} else{
System.out.println("암호다름!! ");
response.sendRedirect("modify.jsp");
}




%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


</body>
</html>

 

 

 

delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 삭제화면 --%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
function del(frm){
let isDelete = confirm("정말 삭제하시겠습니까?");
if (isDelete){
frm.submit();
} else {
history.back();  //삭제 취소하고 이전페이지(상세보기) 이동
}
}

</script>
</head>
<body>

<form action="delete_ok.jsp" method="post">
<p>비밀번호 : <input type="password" name="pwd">
<!-- <input type="submit" value="삭제"> -->
<input type="button" value="삭제" onclick="del(this.form)">
</p>
</form>

</body>
</html>

 

 

 

delete_ok.jsp

<%@page import="com.mystudy.bbs.dao.BbsDAO"%>
<%@page import="com.mystudy.bbs.vo.BbsVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    
<%
request.setCharacterEncoding("UTF-8");

BbsVO bvo = (BbsVO)session.getAttribute("bvo");
String pwd = request.getParameter("pwd");
System.out.println("delete_ok.jps의 bvo.getPwd() : "+ bvo.getPwd());
System.out.println("delete_ok.jps의 pwd : "+ pwd);

if(bvo.getPwd().equals(pwd)){
System.out.println("비밀번호일치");
int result = BbsDAO.delete(bvo.getBbsIdx());
System.out.println("삭제 완료 : " + result);
response.sendRedirect("list.jsp");
}

%>    
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

 

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BBS">

<!-- 전체 게시글 갯수 조회 -->
<select id="totalCount" resultType="int">
SELECT COUNT(*) AS CNT FROM BBS
</select>

<!-- 페이지에 해당하는 게시글 조회 -->
<select id="list" resultType="com.mystudy.bbs.vo.BbsVO"
parameterType="map">
SELECT *
FROM (SELECT ROWNUM R_NUM, B.*
      FROM (SELECT *
            FROM BBS
            ORDER BY BBS_IDX DESC
           ) B
     )
WHERE R_NUM BETWEEN #{begin} AND #{end}
</select>

<!-- 게시글 조회(1개) -->
<select id="one" parameterType="int" resultType="bbsVO">
SELECT BBS_IDX, SUBJECT, WRITER, CONTENT, FILE_NAME, 
         ORI_NAME, PWD, WRITE_DATE, IP, HIT
FROM BBS
WHERE BBS_IDX = #{bbsIdx}
</select>

<select id="selectComment" parameterType="int" resultType="com.mystudy.bbs.vo.CommentVO">
SELECT * 
FROM COMMENTS
WHERE BBS_IDX = #{bbsIdx}
ORDER BY COMMENT_IDX DESC
</select>

<!-- 데이터입력 -->
<insert id="insert" parameterType="bbsVO">
INSERT INTO BBS
        (BBS_IDX, SUBJECT, WRITER, CONTENT, FILE_NAME, 
         ORI_NAME, PWD, WRITE_DATE, IP, HIT )
VALUES (BBS_SEQ.NEXTVAL, #{subject}, #{writer}, #{content}, #{fileName}, 
         #{oriName},  #{pwd}, SYSDATE, #{ip}, 0)
</insert>

<!-- 댓글 입력 : commInsert -->
<insert id="commInsert" parameterType="com.mystudy.bbs.vo.CommentVO">
INSERT INTO COMMENTS
VALUES (COMMENTS_SEQ.NEXTVAL, #{writer}, #{content}, #{pwd}, SYSDATE, 
#{ip}, #{bbsIdx})
</insert>

<!-- 댓글 삭제 -->
<delete id="commdelete">
DELETE FROM COMMENTS 
WHERE COMMENT_IDX = #{commentIdx}
</delete>

<!-- 댓글 하나 선택 -->
<select id="commOne" resultType="com.mystudy.bbs.vo.CommentVO">
SELECT COMMENT_IDX, WRITER, CONTENT, PWD, WRITE_DATE, IP, BBS_IDX
FROM COMMENTS 
WHERE COMMENT_IDX = #{commentIdx}
</select>


<!-- 게시글 업데이트 -->
<update id="update" parameterType="bbsVO" >
UPDATE BBS
SET SUBJECT=#{subject}, WRITER=#{writer}, CONTENT=#{content},
 FILE_NAME=#{fileName}, ORI_NAME=#{oriName}, WRITE_DATE=SYSDATE, IP=#{ip}
WHERE BBS_IDX=#{bbsIdx}
</update>

<!-- 게시글 삭제 -->
<delete id="delete">
DELETE FROM BBS
WHERE BBS_IDX = #{bbsIdx}
</delete>



</mapper>

 

 

dao.java

package com.mystudy.bbs.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.mystudy.bbs.mybatis.DBService;
import com.mystudy.bbs.vo.BbsVO;
import com.mystudy.bbs.vo.CommentVO;
import com.sun.org.apache.bcel.internal.generic.DDIV;

public class BbsDAO {

//게시글의 전체 데이터 건수 조회
public static int getTotalCount() {
SqlSession ss = DBService.getFactory().openSession();
int totalCount = ss.selectOne("BBS.totalCount");
ss.close();
return totalCount;
}

//페이지에 해당하는 글목록(게시글) 가져오기
public static List<BbsVO> getList(Map<String, Integer> map) {
SqlSession ss = DBService.getFactory().openSession();
List<BbsVO> list = ss.selectList("BBS.list", map);
ss.close();
return list;
}

public static List<BbsVO> getList(int begin, int end) {
Map<String, Integer> map = new HashMap<>();
map.put("begin", begin);
map.put("end", end);

SqlSession ss = DBService.getFactory().openSession();
List<BbsVO> list = ss.selectList("BBS.list", map);
ss.close();
return list;
}

// 게시글 한개 조회
public static BbsVO selectOne(int bbsIdx) {
 SqlSession ss = DBService.getFactory().openSession(true);
 BbsVO vo = ss.selectOne("BBS.one", bbsIdx);
 ss.close();
 
 return vo;
}


// 게시글 입력처리
public static int insert(BbsVO bvo) {
 SqlSession ss = DBService.getFactory().openSession(true);
 int result = ss.insert("BBS.insert", bvo);
 ss.close();
 
 return result;
}

//================= 댓글 관련 기능 ======================
// comment 조회
public static List<CommentVO> getCommList(int bbsIdx) {
 SqlSession ss = DBService.getFactory().openSession(true);
 List<CommentVO> listComment = ss.selectList("BBS.selectComment", bbsIdx);
 ss.close();
 
 return listComment;
}

// 댓글 입력처리 insertComment()
public static int insertComment(CommentVO vo) {
SqlSession ss = DBService.getFactory().openSession(true);
int result = ss.insert("BBS.commInsert", vo);
ss.close();

return result;
}

// comment 삭제
public static int deleteComment(int commentIdx) {
SqlSession ss = DBService.getFactory().openSession(true);
int result = ss.delete("BBS.commdelete", commentIdx);
ss.close();

return result;
}

// comment 댓글 1개 조회
public static CommentVO getCommentOne(int commentIdx) {
SqlSession ss = DBService.getFactory().openSession(true);
CommentVO vo = ss.selectOne("BBS.commOne", commentIdx);
ss.close();

return vo;
}


// 게시글 업데이트
public static int update(BbsVO bvo) {
SqlSession ss = DBService.getFactory().openSession(true);
int result = ss.update("BBS.update", bvo);
ss.close();

return result;
}

// 게시글 삭제
public static int delete(int bbsIdx) {
SqlSession ss = DBService.getFactory().openSession(true);
int result = ss.delete("BBS.delete", bbsIdx);
ss.close();

return result;
}
}