BoardResponseDto

DetailResponseDto를 Board로 바꾼다.( 재사용하기위해서 )

 

BoardRepository

더보기
	public BoardResponseDto findById(int id) { // object 받기(안에 내용 다 받아야 하니까)
		
		StringBuilder sb = new StringBuilder();
		sb.append("SELECT b.id, b.userid, b.title, b.content, b.readcount, b.createdate, u.username ");
		sb.append("FROM board b INNER JOIN users u ");
		sb.append("ON b.userId = u.id ");
		sb.append("AND b.id = ?");
		
		final String SQL = sb.toString();
		BoardResponseDto boardDto = null;
		
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기
			pstmt.setInt(1, id);
			
			rs = pstmt.executeQuery();
			
			// if 돌려서 rs -> java오브젝트에 집어넣기
			if(rs.next()) {
				
				boardDto = new BoardResponseDto();	
				Board board = Board.builder()
						.id(rs.getInt(1))
						.userId(rs.getInt(2))
						.title(rs.getString(3))
						.content(rs.getString(4))
						.readCount(rs.getInt(5))
						.createDate(rs.getTimestamp(6))
						.build();
				boardDto.setBoard(board);
				boardDto.setUsername(rs.getString(7));
				
			}
			
			return boardDto;
			
		} catch (SQLException e) {
			
			e.printStackTrace();
			System.out.println(TAG + "findById : " + e.getMessage());
			
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		
		return null; // 실패시
		
	}

 

BoardResponseDto로 바꾸었기 때문에 리포지토리의 리턴값도 바꾸어야한다.

 

 

ReplyResponseDto

댓글DTO생성

 

 

DetailResponseDto

board와 reply를 합쳐서 detail

 

 

데이터베이스

데이터베이스에서 쿼리문을 테스트해본다.

 

 

ReplyRepository

더보기
	public List<ReplyResponseDto> findAll(int boardId) {

		StringBuffer sb = new StringBuffer();
		sb.append("SELECT r.id, r.userid, r.boardId, r.content, r.createDate, u.username, u.userProfile ");
		sb.append("FROM reply r INNER JOIN users u ");
		sb.append("ON r.userid = u.id ");
		sb.append("WHERE boardId = ? ");
		sb.append("ORDER BY r.id DESC ");

		final String SQL = sb.toString();
		List<ReplyResponseDto> replyDtos = new ArrayList<>();

		try {
			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, boardId);
			rs = pstmt.executeQuery();

			while (rs.next()) {

				Reply reply = Reply.builder()
						.id(rs.getInt(1))
						.userId(rs.getInt(2))
						.boardId(rs.getInt(3))
						.content(rs.getString(4))
						.createDate(rs.getTimestamp(5))
						.build();

				ReplyResponseDto replyDto = ReplyResponseDto.builder().reply(reply).username(rs.getString(6))
						.userProfile(rs.getString(7)).build();

				replyDtos.add(replyDto);

			}

			return replyDtos;
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "findAll(boardId) : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return null; // 실패시
	}

 

findAll을 오버로딩하고, 스트링버퍼

 

 

BoardDetailAction

더보기
package com.cos.blog.action.board;

import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.cos.blog.action.Action;
import com.cos.blog.dto.BoardResponseDto;
import com.cos.blog.dto.DetailResponseDto;
import com.cos.blog.dto.ReplyResponseDto;
import com.cos.blog.model.Board;
import com.cos.blog.repository.BoardRepository;
import com.cos.blog.repository.ReplyRepository;
import com.cos.blog.util.HtmlParser;
import com.cos.blog.util.Script;

public class BoardDetailAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		if (request.getParameter("id") == null || request.getParameter("id").equals("")) {
			Script.back("잘못된 접근입니다.", response);
			return;
		}
		

		int boardId = Integer.parseInt(request.getParameter("id"));

		BoardRepository boardRepository = BoardRepository.getInstance();
		
		ReplyRepository replyRepository = ReplyRepository.getInstance();
		
		int result = 0;
		
		Cookie[] cookies = request.getCookies();
		int visitor = 0;
		
		
		
		for (Cookie cookie : cookies) {
			System.out.println(cookie.getName());
			if(cookie.getName().equals("visit")) {
				
				visitor = 1;
				
				
				if(cookie.getValue().contains(request.getParameter("id"))) {
					
					result = 1;
					
				} else {
					
					cookie.setValue(cookie.getValue()+ "_" + request.getParameter("id"));
					
					response.addCookie(cookie);
					
					result = boardRepository.readCountUp(boardId);
					
				} 
			}
		}
		
		if(visitor == 0) {
			Cookie cookie1 = new Cookie("visit", request.getParameter("id"));
			response.addCookie(cookie1);
			
			result = boardRepository.readCountUp(boardId);
		}
		
		
		
//		if(result != 1) {
//			Script.back("서버오류", response);
//			return;
//		}
		
		
//		Cookie cookie =
		
//		HttpSession session = request.getSession();
//		if(session.getAttribute("sameUser") == null || !session.getAttribute("sameUser").equals(request.getParameter("id"))) {
//			result = boardRepository.readCountUp(id);
//			session.setAttribute("sameUser", request.getParameter("id"));
//		}
		
		
		if(result == 1) {
			System.out.println("리절트1 ");
			BoardResponseDto boardDto = boardRepository.findById(boardId);
			List<ReplyResponseDto> replyDtos = replyRepository.findAll(boardId);
			
			
			DetailResponseDto detailDto = DetailResponseDto.builder()
					.boardDto(boardDto)
					.replyDtos(replyDtos)
					.build();
			
			if (detailDto != null) {
				
				String content = detailDto.getBoardDto().getBoard().getContent(); // DTO에서 컨텐츠 가져오기
				
				String doc = HtmlParser.youtubeParser(content); // 유튜브 링크가 있다면 아래에 영상 프레임 넣기
				
				detailDto.getBoardDto().getBoard().setContent(doc); // 바뀐 내용을 콘텐츠에 바꿔넣기
				
				request.setAttribute("detailDto", detailDto);

				RequestDispatcher dis = request.getRequestDispatcher("board/detail.jsp");
				dis.forward(request, response);
				
			} else {
				Script.back("잘못된 접근입니다.", response);
			}
		} else {
			Script.back("상세보기를 할 수 없습니다.", response);
		}
		
	}

}

 

리포지토리를 소환

 

데이터를 가져와서 객체에 저장

 

detailDto에 두 객체를 저장

 

기존의 dto를 detailDto로 모두 바꿔준다

 

 

detail.jsp

기존의 dto를 detailDto로 모두 바꿔준다

 

데이터베이스에 댓글을 임의로 넣고 테스트

 

결과

-

'Web > Jsp' 카테고리의 다른 글

get / post 방식  (0) 2020.06.12
블로그 댓글쓰기  (0) 2020.06.12
사진 업로드  (0) 2020.06.11
자바스크립트 on 이벤트  (0) 2020.06.11
multipart/form-data // HTML 파일업로드 MIME타입  (0) 2020.06.11

+ Recent posts