Servlet 19

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

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

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 게시물 목..

구조 및 세팅

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

서블릿 리스너

Servlet Listener API 서블릿에서 발생하는 이벤트를 처리할 수 있도록 제공하는 리스너 Listener의 메서드 서블릿 관련 Listener 추상 메서드 기능 ServletContextAttributeListener attributeAdded() attributeRemoved() attributeReplaced() Context객체에 속성 추가/제거/수정 이벤트 발생 시 처리 HttpSessionListener sessionCreated() sessionDestroyed() 세션 객체의 생성/소멸 이벤트 발생 시 처리 ServletRequestListener reqeustInitialized() requestDestroyed() 클라이언트의 요청 이벤트 발생 시 처리 ServletReques..

Servlet-JSP 2020.09.11

Servlet Filter

서블릿 필터 요청/응답과 관련된 작업을 미리 처리한다. 이를테면 setCharacterEncoding()같은 귀찮은 작업을 필터에 설정해두면 요청/응답할 때 알아서 한다. Request Filter - Response Filter 필터는 크게 요청 필터와 응답 필터로 나눌 수 있다. 요청 필터 사용자 인증 및 권한 검사 요청 시 요청 관련 로그 작업 인코딩 응답 필터 응답 결과에 대한 암호화 서비스 시간 측정 관련 API javax.servlet.Filter javax.servlet.FilterChain javax.servlet.FilterConfig Filter인터페이스의 메서드 Method 기능 destroy() 필터 소멸 시 컨테이너에 의해 호출되어 종료 작업 수행 doFilter() 요청/응답 시..

Servlet-JSP 2020.09.11

서블릿 스코프

Servlet Scope! 서블릿 속성attribute 세 가지 ServletContext HttpSession HttpServletRequest 각 속성을 setAttribute()로 바인딩하고 getAttribute()로 꺼내서 쓴다. 서블릿 스코프scope란, 서블릿 속성에 접근할 수 있는 범위를 말한다. servlet scope ! 스코프 종류 해당 서블릿API 속성의 스코프 애플리케이션 스코프 ServletContext 속성은 애플리케이션 전체에서 접근할 수 있다. 세션 스코프 HttpSession 속성은 브라우저에서만 접근할 수 있다. 리퀘스트 스코프 HttpServletRequest 속성은 해당 요청-응답 사이클 안에서만 접근할 수 있다. 스코프의 기능 로그인 상태 유지 장바구니 MVC - ..

Servlet-JSP 2020.09.11

세션 로그인 예제

서블릿과 DB를 연동해서 ID 체크를 하고, 로그인 상태를 유지하는 예제다. 순서는 이렇다. login.html에서 아이디와 비밀번호를 입력한다. LoginServlet은 입력 받은 ID로 DB에 조회한다. 없는 아이디라면 login.html로 돌려보낸다. 있는 아이디라면 /show로 이동하여 회원 정보를 확인할 수 있다. VO public class MemberVO { private String id; private String pwd; private String name; private String email; private Date regdate; //Getter Setter 생략... ... ... } DAO public class MemberDAO { private Connection con; ..

Servlet-JSP 2020.09.10