Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

soozya

[BACK] 게시판 글 쓰기, 상세보기 본문

👩🏻‍💻프로젝트/👥팀프로젝트

[BACK] 게시판 글 쓰기, 상세보기

soozya 2023. 7. 29. 21:07

(글쓰기)

 

[👩🏻‍💻소스코드]

 

[BoardDAO.java]

public void insertArticle (QNAboardDTO article) {
 	  int post_view=0;
 	  int number=0;// 데이터 저장을 위한 게시물 번호
 	  System.out.println("insertArticle 메서드의 내부 호출");

 	  try {
 		con=pool.getConnection();
 		sql="select max(post_num) from qna_post";
 		pstmt=con.prepareStatement(sql);
 		rs=pstmt.executeQuery();

 		if (rs.next()) { // 기존 레코드 데이터가 있으면
 			number=rs.getInt(1)+1; //number(0)+1
 		}else { //기존 데이터가 없는 경우 1부터 시작한다는 뜻
 			number=1;
 		}
 		//article.setPost_num(number); 논리적 오류

 	    sql="insert into qna_post(post_num, mem_id, admin_id, post_title, post_cnt,";
 	    sql+=" post_date, post_view) values(?,?,?,?,?,?,?)";
 		pstmt=con.prepareStatement(sql);
 	    pstmt.setInt(1, number);
 	    pstmt.setString(2, article.getMem_id());
 	    pstmt.setString(3, article.getAdmin_id());
 	    pstmt.setString(4, article.getPost_title());
 	    pstmt.setString(5, article.getPost_cnt());
 	    pstmt.setTimestamp(6, article.getPost_date());
 	    pstmt.setInt(7, post_view);
 	    int insert=pstmt.executeUpdate();
 	    System.out.println("게시판 글쓰기 성공 확인: "+insert);
 	  }catch(Exception e) {
 		System.out.println("insertArticle() 에러 발생: "+e);
 	  }finally {
 		pool.freeConnection(con, pstmt, rs);
 	  }
 	}

 

[QNAWriteFormAction.java]

package action;

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

public class QNAWriteFormAction implements CommandAction {

	@Override
	public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		// TODO Auto-generated method stub

	  //1. writeForm.jsp에 수행했던 자바코드
	  //list.jsp(글쓰기) : 신규글
		int post_num=0;

	  //content.jsp(글상세보기)
	  if(request.getParameter("post_num")!=null) { //0과 음수는 아님 : 양수 1이상
		post_num=Integer.parseInt(request.getParameter("post_num"));
		System.out.println("post_num"+post_num);
	  }

	  //2. 실행결과 -> 서버의 메모리에 저장 -> 이동
	  request.setAttribute("post_num",post_num);//${post_num}
		  return "/QNAwriteform.jsp";
	  }
	}

 

[QNAWriteProAction.java]

     package action;

//DB에 관련된 날짜, 시간
import java.sql.Timestamp;

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

import model.QNAboardDAO;
import model.QNAboardDTO;

public class QNAWriteProAction implements CommandAction {

	@Override
	public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		// TODO Auto-generated method stub
	  request.setCharacterEncoding("utf-8");
	  QNAboardDTO article=new QNAboardDTO();
	  System.out.println("디버깅중");

	  System.out.println("request.getParameter(\"post_num\")=>"+request.getParameter("post_num"));
	  System.out.println("request.getParameter(\"mem_id\")=>"+request.getParameter("mem_id"));
	  System.out.println("request.getParameter(\"post_title\")=>"+request.getParameter("post_title"));

	  article.setPost_num(Integer.parseInt(request.getParameter("post_num")));
	  article.setMem_id(request.getParameter("mem_id"));
	  article.setAdmin_id(request.getParameter("admin_id"));
	  article.setPost_title(request.getParameter("post_title"));
	  article.setPost_cnt(request.getParameter("post_cnt")); //글내용
	  article.setPost_date(new Timestamp(System.currentTimeMillis()));


	  //DTO저장 끝
	  QNAboardDAO dbPro=new QNAboardDAO();
	  dbPro.insertArticle(article);
	  System.out.println("dbpro 호출");

	return "/QNAwritepro.jsp";

	}

}

[💬설명]

 

[QNAWriteFormAction.java]

1️⃣ post_view(조회수) 값에 기본값 0을 주기!

     number라는 변수를 만들어서 데이터 저장을 위한 게시물 번호를 만들었음.

  👉🏻 이 때 당시 수업 내용을 반영해서 코딩하다 보니 number라는 변수를 따로 줬었는데,

        사실 그대로 post_num으로 해도 됐겠는디....ㅎ

 

2️⃣ 먼저 select문을 사용해서  게시판의 글 번호 최대값을 찾음.

     만약 기존의 글 번호가 있다면 거기에 +1을 해서 글 번호를 누적하고, 없다면 1부터 시작

 

3️⃣ number와 post_view는 별도의 변수로 저장했기 때문에 article.get~ 형태로 작성하지 않았음

 


[QNAWriteProAction.java]


[💻결과]

 

1) 게시판 글 목록

 

2) 글쓰기 버튼 누른 후 

 

3) 글 쓰기

 

4) 글 쓰기 후 글 목록

 


 

(글 상세보기)

 

[👩🏻‍💻소스코드]

 

[BoardDAO.java]

	//6. 글 상세보기
	public QNAboardDTO getArticle (int post_num) {
	  QNAboardDTO article=null;
	  try {
		con=pool.getConnection();
		sql="update qna_post set post_view=post_view+1 where post_num=?"; //해당 글 번호 조회수 증가
		pstmt=con.prepareStatement(sql);
		pstmt.setInt(1, post_num);
		int update=pstmt.executeUpdate();
		System.out.println("조회수 증가(update) 확인: "+update);

		sql="select * from qna_post where post_num=?"; //글 번호 찾아서 확인
		pstmt=con.prepareStatement(sql);
		pstmt.setInt(1,post_num);
		rs=pstmt.executeQuery();
		  if(rs.next()) {
			article=makeArticleFromResult();
		  }
	  }catch(Exception e) {
		  System.out.println("getArticle() 에러: "+e);
	  }finally {
		  pool.freeConnection(con,pstmt,rs);
	  }
	  return article;
	}

 

[QNAContentAction.java]

package action;

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

import model.QNAboardDAO;
import model.QNAboardDTO;

//요청을 받아서 처리해주는 클래스(액션 클래스) -> 실행결과 -> 컨트롤러 -> jsp
public class QNAContentAction implements CommandAction {

	@Override
	public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		// TODO Auto-generated method stub

		//1.content.jsp에서 처리한 자바코드
		  int post_num=Integer.parseInt(request.getParameter("post_num"));
		  String pageNum=request.getParameter("pageNum");
		  //String post_title=request.getParameter("post_title");
		  System.out.println("ContentAction의 pageNum="+pageNum+", post_num="+post_num);

		  QNAboardDAO dbPro=new QNAboardDAO();
		  QNAboardDTO article=dbPro.getArticle(post_num); //조회수 증가

		  //2. 처리한 결과를 서버의 메모리에 저장(request)-> jsp에서${키명}
		  request.setAttribute("post_num", post_num); //${num}을 주기 위해 key, value 똑같이
		  request.setAttribute("pageNum", pageNum); // ${pageNum}
		  //request.setAttribute("post_title",post_title);
		  request.setAttribute("article",article);

		  return "/QNApostview.jsp";
  	}
}

[💬설명]

 

(QNAboardDAO.java)

 

1️⃣ article 변수를 null로 초기화해서 정보를 담을 객체 준비함

  - 이 아래의 select문을 통해 검색한 정보가 있으면  article=makeArticleFromResult() 의 정보를 가져와서

     article 객체에 담는 것임!


(QNAContentAction.java)

 

1️⃣ post_num과 pageNum의 값을 불러옴

QNApostview.jsp

 

2️⃣ 값을 전달하기 위해 setAttribute 사용하기

 

3️⃣ 화면을 띄우는 페이지에서 white-space:pre를 사용하여 입력한 그대로 출력되도록 하였음

 


[💻결과]

 

 

'👩🏻‍💻프로젝트 > 👥팀프로젝트' 카테고리의 다른 글

[BACK] 글 삭제하기  (0) 2023.08.03
[BACK] 글 수정하기  (0) 2023.08.02
[BACK] 게시판 글 목록 보기  (0) 2023.07.20
[FRONT] 관리자 페이지  (0) 2023.04.28
[FRONT] 회원정보 확인하기  (0) 2023.04.26