ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #1 JSP Project 09(Blog) - 게시판 댓글
    JSP 2021. 7. 5. 20:51

    210705 유투버 '데어프로그래밍'님 강의 참조

     

    1. 댓글용 디자인 및 코드

    - detail.jsp에 댓글용 textarea를 form태그로 감싼 후 데이터로 받아야한다.

    <form action="/blog/reply?cmd=save" method ="post">
    <input type="hidden" name="userId" value = "${sessionScope.principal.id}"/>
    <input type="hidden" name="boardId" value = "${dto.id}"/>
    <textarea id="reply__write__form" class="form-control" placeholder="write a comment..." rows="2"></textarea>
    <br>
    <button class="btn btn-primary pull-right">Comment</button>
    </form>

    - ReplyController에 기능 추가 

    - Controller에서 받은 값을 댓글쓰기로 던지기위한 Dto 생성 

    @Data
    public class SaveReqDto {
    	private int userId;
    	private int boardId;
    	private String content;
    }

    - ReplyService에 기능 추가

    public class ReplyService {
    	
    	private ReplyDao replyDao;
    	
    	public ReplyService() {
    		replyDao = new ReplyDao();
    	}
    	
    	public int 댓글쓰기(SaveReqDto dto) {
    		return replyDao.save(dto);
    	}
    }

    - ReplyDao 설정

    public class ReplyDao {
    	public int save(SaveReqDto dto) {
    		// Admin은 DB에서 따로 변경하면 쉽다.
    		// 1) 쿼리문 준비
    		String sql = "INSERT INTO reply (userid, boardid, content, createDate) VALUES(?,?,?,now())";
    		PreparedStatement pstmt = null;
    		// 2) DB커넥션 연결
    		Connection conn = DBConn.getConnection(); //
    		try {
    			// 3)
    			pstmt = conn.prepareStatement(sql);
    			pstmt.setInt(1, dto.getUserId());
    			pstmt.setInt(2, dto.getBoardId());
    			pstmt.setString(3, dto.getContent());
    			int result = pstmt.executeUpdate();
    			return result;
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally { // try-catch 상관없이 무조건 실행.
    			// 코드가 길어지니 DBconn에서 함수로 따로 관리
    			DBConn.close(conn, pstmt);
    		}
    		return -1;
    	}

     

    2. 댓글 세션 체크

    - detail.jsp에 ajax삽입하여 세션 체크 

    - ReplyController 알맞게 수정하여 값이 넘어오는지 체크

    - 댓글쓰기가 성공하면 printwriter로 길게 코딩하지말고 클래스를 하나만들어놓고 받기

    public class Script {
    	
    	public static void responseData(HttpServletResponse response, String jsondata) {
    		PrintWriter out;
    		try {
    			out = response.getWriter();
    			out.print(jsondata);
    			out.flush();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}

    - Controller 코드 재 수정

    protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String cmd = request.getParameter("cmd");
    		ReplyService replyService = new ReplyService();
    		// http://localhost8080/blog/reply?cmd=saveForm
    		HttpSession session = request.getSession(); // 글쓰기는 유저만 가능하도록 세션 부여!
    		// 서비스 호출
    		if (cmd.equals("save")) { //댓글쓰기 화면
    			//userId+boardId가 필요한 이유는 내가 댓글을 쓸때 어느게시글에 썻고, 누가썻는지 표현하기 위해
    			BufferedReader br = request.getReader();
    			String reqData = br.readLine();
    			Gson gson = new Gson();
    			SaveReqDto dto = gson.fromJson(reqData, SaveReqDto.class);
    			System.out.println("dto" +dto);
    			
    			int result = replyService.댓글쓰기(dto);
    			
    			CommonRespDto commonRespDto = new CommonRespDto<>();
    			commonRespDto.setStatusCode(result);
    //			commonRespDto.setData("Success");
    			
    			String responseData = gson.toJson(commonRespDto);
    			System.out.println("responseDta" + responseData);
    			Script.responseData(response, responseData);
    		}
    	}

    - detail.jsp ajax 수정

    <script>
    
    function replySave(userId, boardId){
    var data = {
    userId:userId,
    boardId:boardId,
    content:$("#content").val()
    }
    
    $.ajax({
    type:"post",
    url:"/blog/reply?cmd=save",
    data:JSON.stringify(data),
    contentType:"application/json; charset=utf-8",
    dataType:"json"
    }).done(function(result){
    if(result.statusCode == 1){
    $("#reply__list").prepend("<div>"+data.content+"</data>")
    }else{
    alert("Fail");
    }
    });
    }
    
    </script>
    <div class="clearfix"></div>
    <hr />
    
    <!-- 댓글 리스트 시작-->
    <ul id="reply__list" class="media-list">
    <li id="reply-1" class="media">
    <div class="media-body">
    <strong class="text-primary">홍길동</strong>
    <p>댓글입니다.</p>
    </div>
    <div class="m-2">
    <i onclick="#" class="material-icons">delete</i>
    </div>
    </li>
    </ul>

    댓글이 잘 적힌다.

     

     

    *JSP 프로젝트를 마치며..

    JSP기반으로 웹을 만드는 순서는 컨트롤러 -> 서비스 -> DAO -> 뷰 (혹은 뷰가 제일먼저) 

    DTO는 DB에서 데이터를 꺼내오기위한 모델 (데이터를 받기만 해야하면 DTO)

    DAO는 DB와 직접 데이터를 주고 받는 부분 

    그외 중요하거나 부가적으로 들어가는것들은 필요할때마다 블로그를 꼭 보도록 하자!한번 해봤고 블로깅을 했기때문에 다음부터는 다시 읽어보면 더 빠르고 쉽게 할 수 있을것이다. 

     

     

     

    * 댓글 삭제/키워드 검색은 동영상에 짤린부분으로인해 진행이 어렵다. 코드는 몽땅 올려놓으니 참고를 하자!

     

    blog.zip
    4.30MB
    Jsp-Blog-V5-master.zip
    4.36MB

Designed by Tistory.