BoardListServlet -> BoardService -> BoardDao -> MyBatis (JDBC Driver) -> DB
BoardAddServlet
BoardDetailServlet
BoardUpdateServlet Board 도메인으로 데이터를 주고받는다
BoardDeleteServlet
board/list
board/add
board/detail
board/update
board/delete
GET 요청이 들어오면 최종적으로 doGet()이 호출된다
service()는 내부적으로 오버로딩된 service()를 호출한다.
오버로딩된 service()는 내부적으로 GET 요청이면 doGet()을 호출한다.
http://localhost:8080/board/list
http://localhost:8080/board/update
http://localhost:8080/board/delete
웹 애플리케이션 서버를 시작할 때 만들어야 한다
그래야 요청이 들어오면 쓸 수 있다
Listener
id "io.freefair.lombok" version "6.4.1"
gradle cleanEclipse
gradle eclipse
// MariaDB JDBC 드라이버
implementation 'org.mariadb.jdbc:mariadb-java-client:3.0.3'
// Mybatis 프레임워크 (직접 구성)
implementation 'org.mybatis:mybatis:3.5.9'
라이브러리 추가만 한 경우에는 gradle eclipse만 하면 된다
https://mybatis.org/mybatis-3/getting-started.html
https://mybatis.org/mybatis-3/configuration.html#typeAliases
DAO 객체 자동 생성
스레드마다 sql session이 달라야 함
세션마다 commit, rollback이 있음
그래서 세션을 공유하면 commit 하면 다 commit 되어 버림
똑같은 BoardAddServlet을 실행하는데
클라이언트 요청이 들어오면 스레드가 생성됨
클라이언트A, 클라이언트B, 클라이언트C
각각의 클라이언트가 각각의 스레드를 의미
스레드가 서블릿을 호출하는 거
서블릿이 하나의 서비스 객체를 쓴다
DAO가 SqlSession을 사용해서 DBMS에 작업을 수행한다
근데 SqlSession을 같은 걸 쓰면
한 놈이 커밋하면 다 커밋되어 버림
그래서 SqlSession은 공유하면 안 된다
SqlSession은 매번 따로 생성해야 한다
그나마 getMapper가 DAO 자동 생성은 해줌
메서드를 호출할 때마다 DAO 만들어서 쓴다
세션을 기준으로 커밋, 롤백이 이루어짐
서버에서 태그를 만드는 서버 렌더링 방식
클라이언트가 보낸 문자열이 UTF-8로 인코딩 되어 있다는 걸 알려줘야 함
그래야 한글 안 깨짐
req.setCharacterEncoding("UTF-8");
내일은 별도 파일로 분리시켜서 include