MyBatis + MVC 실습 (2) : 게시글 삭제하기/수정하기

 

상세 페이지에서 만들었던 수정/삭제 버튼을 클릭했을 때의 기능을 만들어 보자.

 

 

 

글 삭제 기능

 

삭제 기능은 아래와 같은 흐름대로 처리하게 구현할 것이다.

 

(1) detail.jsp에서 "삭제"버튼을 클릭하면 나타나는 입력칸에 비밀번호를 입력하고 버튼을 클릭하면!

→ detail.jsp의 ajax 코드에 의해 "../freeboard/delete.do?no=1&pwd=1234"와 같은 요청을 전송한다.

(2) Model에서 delete.do를 인식하여 no와 pwd를 받아 DAO의 메서드를 호출한다.

(3) DAO의 boardDelete()에서 비밀번호가 맞으면 게시글을 삭제하고 yes, 틀리면 no를 result에 담아 리턴한다.

(4) Model에서 result를 request의 res에 담아 delete.jsp로 전송한다.

(5) detail.jsp의 ajax가 delete.jsp에 있는 res 값을 읽어 삭제가 완료되면 글 목록으로 이동시킨다.

 

그림으로 나타내면 아래와 같음~

 

 

 

mapper

SQL문은 간단하다.

<!--  delete(int no) -->
<delete id="boardDelete" parameterType="int">
  DELETE FROM project_freeboard
  WHERE no=#{no}
</delete>

 

 

DAO

public static String boardDelete(int no, String pwd) {
    String result = "";
    SqlSession session = null;
    try {
      session = ssf.openSession();
      String db_pwd = session.selectOne("boardGetPwd", no);
      if (db_pwd.equals(pwd)) {
        result = "yes";
        session.delete("boardDelete", no);
        session.commit();
      } else {
        result = "no";
      }
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardDelete() ERROR");
    } finally {
      if (session != null)
        session.close();
    }
    return result;
  }

 

 

 

Model

javascript 로 넘겨준 no와 pwd를 받아 DAO에 넣어 처리한다.

@RequestMapping("freeboard/delete.do")
  public String freeboard_delete(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no");
    String pwd = request.getParameter("pwd");
    String result = FreeBoardDAO.boardDelete(Integer.parseInt(no), pwd);
    request.setAttribute("res", result);
    return "../freeboard/delete.jsp";
}

 

 

 

delete.jsp

 

res의 값만을 받아 와야 한다.

따라서 <!DOCTYPE>등의 코드가 포함되지 않도록 주의한다. javascript에서 읽어갈 수도 있음...

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
${res}

 

 

detail.jsp

 

vo를 받아 글의 내용을 나타내 주고, 이후 만들 수정 버튼도 detail.jsp에서 미리 만들어 둔다!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="wrapper row3">
  <main class="container clear">
    <h2 class="sectiontitle">글쓰기</h2> 
     <div class="two_third first">
       <table class="table">
         <tr>
           <th width=20% class="text-center">번호</th>
           <td width=30% class="text-center">${vo.no }</td>
           <th width=20% class="text-center">작성일</th>
           <td width=30% class="text-center">${vo.dbday }</td>
         </tr>
         <tr>
           <th width=20% class="text-center">이름</th>
           <td width=30% class="text-center">${vo.name }</td>
           <th width=20% class="text-center">조회수</th>
           <td width=30% class="text-center">${vo.hit }</td>
         </tr>
         <tr>
           <th width=20% class="text-center">제목</th>
           <td colspan="3">${vo.subject }</td>
         </tr>
         <tr>
           <td colspan="4" height="200" valign="top" class="text-center">
           <pre style="white-space:pre-wrap; background-color:white; border:none; font-family:''">${vo.content }</pre>
           </td>
         </tr>
         <tr>
           <td colspan="4" class="text-right">
             <a href="../freeboard/update.do?no=${vo.no }" class="btn btn-xs btn-danger">수정</a>
             <span id="del" class="btn btn-xs btn-warning">삭제</span>
             <a href="../freeboard/list.do" class="btn btn-xs btn-info">목록</a>
           </td>
         </tr>
         <tr id="delTr" style="display:none">
           <td colspan="4" class="text-right inline">
           <span>비밀번호:</span><input type=password name=pwd size=10 id="delPwd"><!-- delPwd와 delBtn을 같이 보내주면 비밀번호와 no를 같이 보낼 수 있다 -->
           <input type=button value="삭제" class="btn btn-sm btn-danger" id="delBtn" data-no="${vo.no }"><!-- 삭제시 no를 갖고 가야함 -->
           </td>
         </tr>
     </div>
  </main>
</div>
</body>
</html>

 

 

 

*detail.jsp의 <script> 내의 javascript 코드

 

<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
let i=0;
let u=0;
$(function(){
  $('#del').click(function(){
    if(i==0){
      $('#delTr').show("slow");
      $('#del').text("취소");
      i=1;
    }else{
      $('#delTr').hide();
      $('#del').text("삭제");
      i=0;
    }
  })
  let x = $('ul').html();
  console.log(x);

  $('#delBtn').click(function(){
    let pwd=$('#delPwd').val();
    let no=$(this).attr("data-no");
    if(pwd.trim()==""){
      $('#delPwd').focus();
      return;
    }
    // ajax로 요청&데이터 받기
    //alert("password:"+pwd+"\n번호"+no); 데이터 잘 가져오는지 확인

    $.ajax({
      type:'post',
      url:'../freeboard/delete.do', 
      data:{"no":no, "pwd":pwd}, //../freeboard/delete.do?no=1&pwd=1234 이렇게 보내줌
      success:function(result){ //delete.do에 출력한 html을 읽어서 result에 담는다.
        let res = result.trim();//공백제거 꼭 필요함
        console.log(res);
        if(res=="yes"){
          location.href="../freeboard/list.do"; //sendRedirect()
        }else{
          alert("비밀번호가 틀립니다.")
          $('#delPwd').val(""); //비밀번호 입력칸 비우기
          $('#delPwd').focus(); //포커스 갖다 놓기
          return;
        }
      },
      error:function(err){
        alert(err);
      }
    })
  })
})
</script>

 

 

 

 

글 수정 기능

 

detail.do에서 수정 버튼을 클릭하면 아래와 같은 화면을 보여주며 게시글 내용을 수정할 수 있게 할 것이다.

그리고 사용자가 입력한 비밀번호를 페이지 이동 없이 반복 검사하여,

올바른 비밀번호를 입력했을 때에만 "등록" 버튼을 보이게 해 보자!

 

 

 

mapper

<!-- 수정 update, 삭제(댓글) delete / findByPwd(String pwd) -->
<select id="boardGetPwd" resultType="String" parameterType="int">
  SELECT pwd FROM project_freeboard
  WHERE no=#{no}
</select>
<!-- save(FreeBoardVO vo) -->
<update id="boardUpdate" parameterType="FreeBoardVO">
  UPDATE project_freeboard SET
  name=#{name}, subject=#{subject}, content=#{content}
  WHERE no=#{no}
</update>

 

 

DAO

비밀번호 확인은 삭제할 때와 비슷하게 진행한다.

글 수정시에는 원 글의 내용을 미리 불러와 넣어주어야 하기 때문에,

boardUpdateData라는 메서드가 추가로 하나 더 필요하다.

또한 update와 insert문은 정상적으로 처리가 완료되면 반드시 커밋을 해 주어야 한다!

처리는 정상적으로 끝났어도 화면에 반영되지 않을 수 있다.

public static FreeBoardVO boardUpdateData(int no) {
    SqlSession session = null;
    FreeBoardVO vo = new FreeBoardVO();
    try {
      session = ssf.openSession(); //==setAutoCommit(false)와 같음.
      vo = session.selectOne("boardDetailData", no);
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardUpdateData ERROR");
    } finally {
      if (session != null)
        session.close();
    }
    return vo;
  }

public static String boardPwdCheck(int no, String pwd) {
    String result = "";
    SqlSession session = null;
    try {
      session = ssf.openSession();
      String db_pwd = session.selectOne("boardGetPwd", no);
      System.out.println("원래 비밀번호:" + db_pwd);
      System.out.println("입력한 비밀번호:" + pwd);
      if (db_pwd.equals(pwd)) {
        result = "yes";
      } else {
        result = "no";
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      if (session != null)
        session.close();
    }
    System.out.println("result:" + result);
    return result;
  }

  public static void boardUpdate(FreeBoardVO vo) {
    SqlSession session = null;
    try {
      session = ssf.openSession(true); //openSession(true) 하면 AutoCommit
      session.insert("boardUpdate", vo); //AutoCommit 아님
      //			session.commit();
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardUpdate ERROR");
    } finally {
      if (session != null)
        session.close();
    }
  }

 

 

 

Model

 

사용자가 글 수정 화면(update.do)에 진입하면

DAO의 boardUpdateData()메서드로 받아온 vo를 request에 담아 넘겨 준다.

이후 update.jsp에서 입력창에 미리 vo의 값을 넣어 줄 것이다.

@RequestMapping("freeboard/update.do")
  public String freeboard_update(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no");
    FreeBoardVO vo = FreeBoardDAO.boardUpdateData(Integer.parseInt(no));
    request.setAttribute("vo", vo);
    request.setAttribute("main_jsp", "../freeboard/update.jsp");
    return "../main/main.jsp";
}

@RequestMapping("freeboard/pwd_check.do")
  public String freeboard_pwd_check(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no"); //ajax에서 보낸 no 와  pwd 
    String pwd = request.getParameter("pwd");
    String res = FreeBoardDAO.boardPwdCheck(Integer.parseInt(no), pwd);
    request.setAttribute("res", res);
    return "../freeboard/update_ok.jsp"; //여기서 처리할 것
}

@RequestMapping("freeboard/update_ok.do")
  public String freeboard_update_ok(HttpServletRequest request, HttpServletResponse response) {
    try {
      request.setCharacterEncoding("UTF-8");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    String name = request.getParameter("name");
    System.out.println(name);
    String subject = request.getParameter("subject");
    String content = request.getParameter("content");
    String pwd = request.getParameter("pwd");
    String no = request.getParameter("no");

    FreeBoardVO vo = new FreeBoardVO();
    vo.setName(name);
    vo.setContent(content);
    vo.setSubject(subject);
    vo.setPwd(pwd);
    vo.setNo(Integer.parseInt(no));
    FreeBoardDAO.boardUpdate(vo);

    return "redirect:../freeboard/detail.do?no=" + no; //보내고 나서 request 에 있는 내용 지우기
}

 

 

update_ok.jsp

delete_ok.jsp와 구조가 동일하므로...

그냥 pwd_check.jsp 라는 이름으로 삭제와 수정 모두에서 사용해도 된다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
${res}

 

 

 

update.jsp

 

상세보기 페이지와 값을 미리 넣어준다는 점 외에 구조는 거의 동일하다!

textarea 태그의 내용은 다른 input태그와 달리 태그와 태그 사이에 직접 넣어주어야 한다.

<%@ 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>
</head>
<body>
<div class="wrapper row3">
  <div id="breadcrumb" class="clear"> 
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">커뮤니티</a></li>
      <li><a href="#">수정하기</a></li>
    </ul>
  </div>
</div>
<div class="wrapper row3">
  <main class="container clear">
    <h2 class="sectiontitle">수정하기(Ajax)</h2> 
     <div class="two_third first">
     <form method=post action="../freeboard/update_ok.do" id="frm"> <!-- dispatcherServlet으로 보내겠다 -->
       <table class="table">
         <tr>
           <th width=20% class="text-right">이름</th>
           <td width=80%>
             <input type=text name=name size=15 class="input-sm" id="name" value="${vo.name }">
             <input type=hidden name=no id="no" value="${vo.no }" >
           </td>
         </tr>
         <tr>
           <th width=20% class="text-right">제목</th>
           <td width=80%>
             <input type=text name=subject size=50 class="input-sm" id="subject" value="${vo.subject }">
           </td>
         </tr>
         <tr>
           <th width=20% class="text-right">내용</th>
           <td width=80%>
             <textarea rows="10" cols="50" name="content" id="content">${vo.content }</textarea>
           </td>
         </tr>
         <tr>
           <th width=20% class="text-right">비밀번호</th>
           <td width=80% class="inline">
             <input type="password" name="pwd" size=10 class="input-sm" id="pwd">
             <span id="print" style="color:red"></span>
           </td>
         </tr>
         <tr>
           <td colspan="2" class="text-center">
             <input type="button" value="등록" class="btn btn-sm btn-success" id="writeBtn">
             <input type="button" value="취소" class="btn btn-sm btn-danger" onclick="javascript:history.back()">
           </td>
         </tr>
       </table>
       </form>
     </div>
     <div class="one_third">2/3</div>
  </main>
</div>
</body>
</html>

 

 

 

*update.jsp의 <script> 내의 javascript 코드

 

null값을 전송하지 않도록 "등록" 버튼을 눌렀을 때 빈 칸이 있으면 해당 칸에 포커스를 옮기고 작동을 멈추게 한다.

 

그리고 keyup 이벤트를 활용해서! 사용자가 키보드를 칠 때마다(정확히는 키를 눌렀다 떼는 순간마다)

비밀번호를 검사하고 결과를 바로 보여주도록 만든다.

<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
$(function(){
	$('#writeBtn').hide();
	$('#writeBtn').click(function(){
		let name = $('#name').val();
		if(name.trim()==""){
			$('#name').focus();
			return;
		}
		let subject = $('#subject').val();
		if(subject.trim()==""){
			$('#subject').focus();
			return;
		}
		let content = $('#content').val();
		if(content.trim()==""){
			$('#content').focus();
			return;
		}
		let pwd = $('#pwd').val();
		if(pwd.trim()==""){
			$('#pwd').focus();
			return;
		}
		
		$('#frm').submit();//submit 버튼과 같은 역할
	})
	$('#pwd').keyup(function(){
		let pwd = $('#pwd').val();
		let no = $('#no').val();
		$.ajax({
			type:'post',
			url:'../freeboard/pwd_check.do', //../freeboard/pwd_check.do?no=1&pwd=1234 이렇게 갈거임
			data:{"pwd":pwd, "no":no}, //데이터 전송
			success:function(result){ //실행, success일때 데이터를 받아 왈
				let res = result.trim();
				if(res==="yes"){
					$('#writeBtn').show();
					$('#print').text("");
				}else{
					$('#writeBtn').hide();
					$('#print').text("비밀번호를 확인해 주세요");
				}
			}
		})
	})
})
</script>

 

다음 포스팅은 회원가입~ 

 

더보기

mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sist.mapper.freeboard-mapper">
  <!-- 목록: 페이징 select -->
  <!-- findAll() -->
  <select id="boardListData" resultType="FreeBoardVO" parameterType="hashmap">
    SELECT no, subject, name, TO_CHAR(regdate,'YYYY-MM-DD') as dbday, hit, rcount, num
    FROM (SELECT no, subject, name, regdate, hit, rcount, rownum as num
    FROM (SELECT /*+ INDEX_DESC(project_freeboard pf_no_pk)*/ no, subject, name, regdate, hit, rcount
    FROM project_freeboard))
    WHERE num BETWEEN #{start} AND #{end}
  </select>
  <select id="boardTotalPage" resultType="int">
  	SELECT CEIL(COUNT(*)/10.0) FROM project_freeboard
  </select>
  <!-- 등록: 시퀀스 selectKey(없어짐) insert -->
  <insert id="boardInsert" parameterType="FreeBoardVO">
    INSERT INTO project_freeboard(no, name, subject, content, pwd )
    VALUES ((SELECT NVL(MAX(no)+1,1) FROM project_freeboard), 
     #{name}, #{subject}, #{content}, #{pwd}
     )
  </insert>
  <!-- boardDetail -->
  <update id="hitIncrement" parameterType="int">
  	UPDATE project_freeboard SET
  	hit = hit+1
  	WHERE no = #{no}
  </update>
  <select id="boardDetailData" resultType="FreeBoardVO" parameterType="int">
  	SELECT no, name, subject, content, TO_CHAR(regdate,'YYYY-MM-DD') as dbday, hit
  	FROM project_freeboard
  	WHERE no = #{no}
  </select>
  <!-- 수정 update, 삭제(댓글) delete / findByPwd(String pwd) -->
  <select id="boardGetPwd" resultType="String" parameterType="int">
  	SELECT pwd FROM project_freeboard
  	WHERE no=#{no}
  </select>
  <!-- save(FreeBoardVO vo) -->
  <update id="boardUpdate" parameterType="FreeBoardVO">
  	UPDATE project_freeboard SET
  	name=#{name}, subject=#{subject}, content=#{content}
  	WHERE no=#{no}
  </update>
  <!--  delete(int no) -->
  <delete id="boardDelete" parameterType="int">
    DELETE FROM project_freeboard
    WHERE no=#{no}
  </delete>
  
  <!-- 동적 쿼리, JOIN, subQuery -->
</mapper>

 

DAO

package doodoo.dao;
import java.util.*;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.*;
import doodoo.vo.*;
public class FreeBoardDAO {
  private static SqlSessionFactory ssf;
  static {
    try {
      Reader reader = Resources.getResourceAsReader("Config.xml");
      ssf = new SqlSessionFactoryBuilder().build(reader);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  public static List < FreeBoardVO > boardListData(Map map) {
    List < FreeBoardVO > list = null;
    SqlSession session = null;
    try {
      session = ssf.openSession();
      list = session.selectList("boardListData", map);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      if (session != null)
        session.close(); // 반환 ==> POOLED(DBCP) => Connection생성(8개)
    }
    return list;
  }

  public static int boardTotalPage() {
    SqlSession session = null;
    int total = 0;
    try {
      session = ssf.openSession();
      total = session.selectOne("boardTotalPage");
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardTotalPage ERROR");
    } finally {
      if (session != null)
        session.close();
    }
    return total;
  }
  public static void boardInsert(FreeBoardVO vo) {
    SqlSession session = null;
    try {
      session = ssf.openSession(); //openSession(true) 하면 AutoCommit
      session.insert("boardInsert", vo); //AutoCommit 아님
      session.commit();
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardInsert ERROR");
    } finally {
      if (session != null)
        session.close();
    }
  }

  public static FreeBoardVO boardDetailData(int no) {
    SqlSession session = null;
    FreeBoardVO vo = new FreeBoardVO();
    try {
      session = ssf.openSession(); //==setAutoCommit(false)와 같음.
      session.update("hitIncrement", no); //조회수 증가
      session.commit();
      vo = session.selectOne("boardDetailData", no);
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardDetailData ERROR");
      //			session.rollback();//에러나면 롤백해도되고
    } finally {
      if (session != null)
        session.close();
    }
    return vo;
  }
  public static FreeBoardVO boardUpdateData(int no) {
    SqlSession session = null;
    FreeBoardVO vo = new FreeBoardVO();
    try {
      session = ssf.openSession(); //==setAutoCommit(false)와 같음.
      vo = session.selectOne("boardDetailData", no);
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardUpdateData ERROR");
    } finally {
      if (session != null)
        session.close();
    }
    return vo;
  }

  public static String boardPwdCheck(int no, String pwd) {
    String result = "";
    SqlSession session = null;
    try {
      session = ssf.openSession();
      String db_pwd = session.selectOne("boardGetPwd", no);
      System.out.println("원래 비밀번호:" + db_pwd);
      System.out.println("입력한 비밀번호:" + pwd);
      if (db_pwd.equals(pwd)) {
        result = "yes";
      } else {
        result = "no";
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      if (session != null)
        session.close();
    }
    System.out.println("result:" + result);
    return result;
  }

  public static void boardUpdate(FreeBoardVO vo) {
    SqlSession session = null;
    try {
      session = ssf.openSession(true); //openSession(true) 하면 AutoCommit
      session.insert("boardUpdate", vo); //AutoCommit 아님
      //			session.commit();
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardUpdate ERROR");
    } finally {
      if (session != null)
        session.close();
    }
  }

  public static String boardDelete(int no, String pwd) {
    String result = "";
    SqlSession session = null;
    try {
      session = ssf.openSession();
      String db_pwd = session.selectOne("boardGetPwd", no);
      if (db_pwd.equals(pwd)) {
        result = "yes";
        session.delete("boardDelete", no);
        session.commit();
      } else {
        result = "no";
      }
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("FreeBoardDAO: boardDelete() ERROR");
    } finally {
      if (session != null)
        session.close();
    }
    return result;
  }
}

 

Model

package doodoo.model;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import controller.Controller;
import controller.RequestMapping;
import doodoo.dao.*;
import doodoo.vo.*;
import java.util.*;

@Controller
public class FreeBoardModel {
  @RequestMapping("freeboard/list.do")
  public String freeboard_list(HttpServletRequest request, HttpServletResponse response) {
    String page = request.getParameter("page");
    if (page == null)
      page = "1";
    int curPage = Integer.parseInt(page);
    Map map = new HashMap();
    int rowSize = 10;
    int start = (rowSize * curPage) - (rowSize - 1);
    int end = rowSize * curPage;
    map.put("start", start);
    map.put("end", end);

    List < FreeBoardVO > list = FreeBoardDAO.boardListData(map);
    int totalPage = FreeBoardDAO.boardTotalPage();
    //그렇게 글 수가 많지 않기 때문에 블록처리 하지 않을 것임.
    request.setAttribute("list", list);
    request.setAttribute("curPage", curPage);
    request.setAttribute("totalPage", totalPage);
    request.setAttribute("main_jsp", "../freeboard/list.jsp");
    return "../main/main.jsp";
  }

  @RequestMapping("freeboard/insert.do")
  public String freeboard_insert(HttpServletRequest request, HttpServletResponse response) {
    request.setAttribute("main_jsp", "../freeboard/insert.jsp");
    return "../main/main.jsp";
  }

  @RequestMapping("freeboard/insert_ok.do")
  public String freeboard_insert_ok(HttpServletRequest request, HttpServletResponse response) {
    try {
      request.setCharacterEncoding("UTF-8");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    String name = request.getParameter("name");
    System.out.println(name);
    String subject = request.getParameter("subject");
    String content = request.getParameter("content");
    String pwd = request.getParameter("pwd");

    FreeBoardVO vo = new FreeBoardVO();
    vo.setName(name);
    vo.setContent(content);
    vo.setSubject(subject);
    vo.setPwd(pwd);
    FreeBoardDAO.boardInsert(vo);

    return "redirect:../freeboard/list.do"; //보내고 나서 request 에 있는 내용 지우기
  }

  @RequestMapping("freeboard/detail.do")
  public String freeboard_detail(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no");
    FreeBoardVO vo = FreeBoardDAO.boardDetailData(Integer.parseInt(no));

    //댓글 읽기 추가
    ReplyVO rvo = new ReplyVO();
    rvo.setBno(vo.getNo());
    rvo.setType(1);
    List < ReplyVO > list = ReplyDAO.replyListData(rvo);
    request.setAttribute("list", list);
    //추가 끝
    request.setAttribute("vo", vo);
    request.setAttribute("main_jsp", "../freeboard/detail.jsp");
    return "../main/main.jsp";
  }

  @RequestMapping("freeboard/update.do")
  public String freeboard_update(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no");
    FreeBoardVO vo = FreeBoardDAO.boardUpdateData(Integer.parseInt(no));
    request.setAttribute("vo", vo);
    request.setAttribute("main_jsp", "../freeboard/update.jsp");
    return "../main/main.jsp";
  }

  @RequestMapping("freeboard/pwd_check.do")
  public String freeboard_pwd_check(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no"); //ajax에서 보낸 no 와  pwd 
    String pwd = request.getParameter("pwd");
    String res = FreeBoardDAO.boardPwdCheck(Integer.parseInt(no), pwd);
    request.setAttribute("res", res);
    return "../freeboard/update_ok.jsp"; //여기서 처리할 것
  }

  @RequestMapping("freeboard/update_ok.do")
  public String freeboard_update_ok(HttpServletRequest request, HttpServletResponse response) {
    try {
      request.setCharacterEncoding("UTF-8");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    String name = request.getParameter("name");
    System.out.println(name);
    String subject = request.getParameter("subject");
    String content = request.getParameter("content");
    String pwd = request.getParameter("pwd");
    String no = request.getParameter("no");

    FreeBoardVO vo = new FreeBoardVO();
    vo.setName(name);
    vo.setContent(content);
    vo.setSubject(subject);
    vo.setPwd(pwd);
    vo.setNo(Integer.parseInt(no));
    FreeBoardDAO.boardUpdate(vo);

    return "redirect:../freeboard/detail.do?no=" + no; //보내고 나서 request 에 있는 내용 지우기
  }

  @RequestMapping("freeboard/delete.do")
  public String freeboard_delete(HttpServletRequest request, HttpServletResponse response) {
    String no = request.getParameter("no");
    String pwd = request.getParameter("pwd");
    String result = FreeBoardDAO.boardDelete(Integer.parseInt(no), pwd);
    request.setAttribute("res", result);
    return "../freeboard/delete.jsp";
  }

}

댓글()