soozya
[BACK] 게시판 글 쓰기, 상세보기 본문
(글쓰기)
[👩🏻💻소스코드]
[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의 값을 불러옴
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 |