보라코딩
Day74_230412_ JSP, MyBatis 게시판 본문
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;
}
}
'코딩 > Servlet, JSP, MyBatis' 카테고리의 다른 글
Day76_230414_ JSP, MyBatis (MVC패턴) 뒤에 중요한 내용! (0) | 2023.04.14 |
---|---|
Day75_230413_ JSP, MyBatis 게시판, MVC 패턴 (0) | 2023.04.13 |
Day73_230411_ JSP, MyBatis 게시판 (0) | 2023.04.11 |
Day72_230410_ JSP, MyBatis 게시판 페이징처리 (0) | 2023.04.10 |
Day71_230407_ JSP, MyBatis (Shop), 파일업로드 (0) | 2023.04.07 |