Servlet-JSP 30

Servlet/JSP에서 Ajax 사용

Ajax(Asynchronous Javascript XML) 비동기 통신. 클라이언트 - 서버 간에 XML 또는 JSON 데이터를 주고 받는 기술이다. 페이지 이동 없이 데이터 처리가 가능하다. 새로 고침 없이 화면이 변한다! 제이쿼리 - Ajax 사용법 $.ajax({ type:'post or get', async:'true or false', url:'요청할 url', data:{서버로 전송할 데이터}, dataType: '서버에서 전송받을 데이터 형식', success: { //정상 요청, 응답 시 처리 작업 }, error : function(xhr,status,error) { //오류 발생 시 처리 }, complete:function(data,textStatus) { //작업 완료 후 처리 }..

Servlet/JSP 답변형 게시판 만들기 - 페이징

페이징 구성 화면으로부터 페이지 번호와 몇 개의 게시물을 볼 것인지(기본1, 10) 데이터를 받는다. 컨트롤러는 페이징 하는 서비스 메서드를 호출한다. 화면에서 받은 페이지 데이터를 인자로 입력한다. 요청 받은 페이지의 게시물을 DB에 조회한다. 게시물 개수가 100개가 넘고, 현재 조회하고 있는 페이지에서 '이전 페이지'버튼이 활성화 되어야 하는지 '다음 페이지'버튼이 활성화되어 있어야 하는지 연산해서 화면으로 데이터를 보낸다. 화면은 전달 받은 데이터를 띄우고, next, prev 버튼 사용 여부를 결정한다. SQL 우선 limit을 이용해 페이징 쿼리를 만든다. limit 0, 10은 1페이지 limit 10, 10은 2페이지 limit 20, 10은 3페이지 limit..

게시글 삭제할 때 고민했던 점

❓ 🤯 게시글 삭제할 때 고민했던 점 삭제 했을 때 원글만 지운다. 원글은 '삭제된 글입니다.'라고 띄우고 답글은 살려두는 형태 답글까지 지운다. 원글을 지우면 답글까지 지워지는 경우. 페이스북의 경우는 답글까지 지우는 형태다. 반면 네이버는 답글은 두고 원글만 지운다. 뭐가 더 좋은 방법일까? 상황에 따라 다를 것이다. 나는 1번 원글만 지우는 방식을 선택했다. 댓글의 권한은 댓글을 쓴 사람에게 있다고 보기 때문이다. 어떻게 ? 처음 생각한 방식은 쿼리를 두 번 날리는 것이다. 1. 카운트 쿼리를 날린다. 2. 이 결과가 0보다 크다면, 답글이 존재하는 것이므로, delete가 아닌, 기존의 데이터를 없애고 '삭제된 게시물입니다.' 라는 문구로 update 한다. 3. 결과..

Servlet/JSP 답변형 게시판 만들기 - 게시글 삭제

com.test.dao.BoardDAOTest @Test public void deleteTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "DELETE FROM t_board WHERE bno = ?"; log.info(sql); try( Connection conn = DriverManager.getConnection(URL,USER,PW); PreparedStatement pstmt = conn.prepareStatement(sql); ) { assertNotNull(conn); pstmt.setInt(1, 44); assertTrue(pstmt.executeUpdate()==1); } catch(Exception ..

Servlet/JSP 답변형 게시판 만들기 - 수정

com.test.dao.BoardDAOTest 테스트 코드 @Test public void updateTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "UPDATE t_board " + " set title = ?, content= ?" + " where bno = ?"; log.info(sql); try( Connection conn = DriverManager.getConnection(URL,USER,PW); PreparedStatement pstmt = conn.prepareStatement(sql); ) { pstmt.setString(1, "update"); pstmt.setString(2, "con...ten..

Servlet/JSP 답변형 게시판 만들기 - 조회

com.test.BoardDAO @Test public void getPostTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "SELECT * FROM t_board" +" WHERE bno > 0 AND bno = ?"; log.info(sql); try( Connection conn = DriverManager.getConnection(URL,USER,PW); PreparedStatement pstmt = conn.prepareStatement(sql); ) { pstmt.setInt(1, 7); ResultSet rs = pstmt.executeQuery(); assertNotNull(rs); rs.next(); ..

게시글 목록

Servlet/JSP 답변형 게시판 만들기 - 게시글 목록 개발 순서 VO DAO 테스트 DAO Service Controller View com.coco.vo.BoardVO 테이블 이름과 동일하게 변수를 선언한다. public class BoardVO { private int bno; private int p_bno, level; //level은 답글의 개수다. private String title, content, imgName, id; private Date regdate; ...Getter Setter toString 생성자 생략... level은 답글의 개수를 나타내는 칼럼이다. 실제로 존재하지 않는 컬럼이지만 쿼리로 직접 만들어서 쓴다. com.test.dao.BoardDAOTest 게시물 목..

[문제점]MySQL에서 계층형 쿼리와 그 외...

MySQL에서 계층형 쿼리 문제 이 게시판은 자바 웹을 다루는 기술을 참고해서 만들었다. 처음부터 난관이었던 게 책은 Oracle SQL을 사용하는 반면 나는 MySQL을 쓰고 싶었다. MySQL을 고집한 이유는 첫 프로젝트 때 사용했던 DB가 MySQL이었기 때문에... 라고는 하지만 딱히 없다. MySQL을 잘 다루는 것도 아니므로 Oracle을 썼어도 상관 없었겠지만 왠지 그냥 난 책이랑 다르게 하고 싶어! 책을 참고하되, 베끼고 싶지 않은 마음... 아주 작은 부분이라도 차별되는 지점을 만들고 싶었다. 물론 어디까지나 변명일 뿐이다. 하여간. 오라클은 자체적으로 계층형 쿼리를 다룰 수 있는 명령어(?) START WITH, CONNECT BY를 제공한다. 그러나 MYSQL은 그런 게 없었으므로....

구조 및 세팅

1. 구조 모델2 방식인 MVC구조로 만들 것이다. 컨트롤러와 DAO 사이에 왜 Service가 필요할까? 트랜잭션Transaction 때문이다. 조승우가 자주 가는 커뮤티니 사이트를 예로 들어보자. 조승우는 커뮤니티 사이트에서 '비밀의 숲2 기대된다 토요일 첫 방!!'이라는 게시물을 조회하려고 한다. 현재 조회수는 3944. 조승우가 게시물을 클릭해서 조회페이지로 이동하면 조회수가 3945가 되어야 한다. 그러니까 조회하는 쿼리와, 조회수를 증가시키는 쿼리를 동시에 처리해야 한다는 것이다. 만약 이 두 가지가 따로 동작한다고 해보자. 그러면 (아주 짧은 찰나겠지만) 아직 조회 전인데 조회수가 1이 증가하거나, 이미 조회했는데 조회수가 그대로일 것이다. 이런 일이 발생하지 않도록 두 개 이..