-
KOSTA 교육 40일차(액션태그, useBean, 한글처리, JDBC, DAO, DTO, MyBatis)Review 2020. 6. 23. 01:32
18.12.28(금)
배운 내용
- JSP 액션태그
- 자바 빈(Bean)
- 한글처리
- JDBC
- DAO /DTO
- MyBatis
1. JSP 액션태그
액션태그는 JSP페이지를 이루고 있는 요소중 하나이다.
- <jsp:forward> : 다른 사이트로 이동할 때 사용
- <jsp:include> : 정적 혹은 동적인 자원을 현재 페이지의 내용에 포함, 페이지 모듈화
- <jsp:param> : <jsp:forward>, <jsp:include>와 같이 사용되어 파라미터를 추가할 때 사용된다.
- <jsp:useBean> : 자바빈(Bean)을 생성하고 사용하기 위한 환경을 정의한다.
- <jsp:setProperty> : 액션은 빈에서 속성 값을 할당(부여)
- <jsp:getProperty> : 액션은 빈에서 속성 값을 얻어올 때 사용
2. 자바 빈(Bean)
정보의 덩어리로 데이터 저장소로서 정보를 객체로 구성하고 한번에 데이터에 접근하여 사용할 수 있다.
- 단순히 데이터 저장이 아닌 은닉화의 개념도 가지고 있다.
- 자바의 개념으로서 서블릿에서 가져다 사용한다.
- <jsp:useBean> : 자바 빈(Bean)을 생성한다.
- <jsp:setProperty> : 자바 빈에서 정보를 저장한다.
- <jsp:getProperty> : 자바 빈에서 정보를 얻어온다.
자바 빈 예제
- <jsp:useBean>을 사용하여 movieBean 객체를 생성하였다. 여기서 class명을 패키지명까지 정확히 표기하여 주어야 객체가 생성된다.
- <jsp:setProperty>로 form의 입력값을 담는다. 여기서 주의할 점은 form태그의 name과 같아야한다.
- <jsp:getProperty>로 property와 name을 선언한다. property는 movieBean 객체의 필드와 같아야하고 name은 setProperty 액션태그의 name과 같아야한다.
3. 한글처리
영어권에서 만들어졌기 때문에 타국 언어들은 별도로 언어 처리를 해야지 사용이 가능하다.
- get메소드와 post메소드의 한글처리 방식이 다르다.
- doPost : 서블릿에 request.setCharacterEncoding(“UTF-8”); 을 입력하면 한글처리가 된다.
- doGet : server.xml에있는 <connector URIEncoding=“UTF-8” />을 추가해준다.
4. JDBC
자바로 만든 애플리케이션이 데이터베이스에 일관된 방식으로 접근할 수 있도록 API를 제공하는 클래스의 집합을 말한다.
- Oracle에서 제공하는 라이브러리를 Tomcat에 적용시켜줘야만이 API를 사용할 수 있다. (Oracle 서버에서 ojdbc6.jar을 다운로드)
Tomcat lib 폴더에 해당 jar 파일을 넣는다. - Driver loading → Connection → Statement → query → run
Driver loading → Connection → query → PreparedStatement → run
두가지의 순서로 진행된다.
Statement를 사용한 예시
- driver, url, id, pw를 String 리터럴로 선언한다. 여기서 id와 pw는 실제 사용하는 DB의 id와 pw를 선언한다.
- executeUpdate()는 추가, 삭제, 업데이트를 담당한다.
- 항상 close()를 통해 추가가 끝나면 종료해주어야한다.
PreparedStatement를 사용한 예시
Statement를 사용하였을 때 sql문이 복잡하게 이루어져있지만 PreparedStatement를 사용하면 보다 간단한 sql문을 작성하여 사용이 가능하다.
- 위의 Statement와는 다르게 3단계와 4단계가 바뀌어 3단계에 먼저 쿼리문을 작성한다. 이 때 ? 를 선언하여 아직 값이 정해지지 않았다는 것을 나타낸다.
- 4단계에서 prepareStatement를 선언하는데 .setString을 사용하여 파라미터1에 1부터 순서를 선언하는데 1은 ? 첫 번째 를 나타내고 2는 두 번째를 나타낸다.
5. DAO / DTO
DAO (data access object)는 모든 데이터베이스 관련 애플리케이션에서 반드시 존재하는 클래스로서 데이터베이스의 데이터에 접근하기 위한 객체이다.
DTO (data transfer object)는 회원 테이블의 정보를 자바에서 얻어오기 전에 회원 정보를 저장할 공간을 위한 준비과정으로 VO, 자바 빈과 동일하다.
DAO / DTO 예제
DB에 등록한 book의 내역을 확인할 수 있는 예제이다.
- DB 내용을 가지고 있는 BookDAO 객체를 생성하고 자료를 Arraylist 로 선언한다.
- for문을 통하여 list.get(i)로 list에 있는 자료들을 하나씩 가져오고 BookDTO의 필드들을 변수에 담는다.
- out으로 하나씩 출력한다.
- DAO에서 데이터베이스에 관한 내용들을 작성한다.
- 여기서는 context.xml에 Resource를 활용하여 클래스에 직접 DB관련 선언을 하지 않아도 되도록 실습해보았다.
- DB 테이블의 정보를 가져올 수 있도록 필드, 생성자, getter, setter를 생성한다.
5. MyBatis
Mapping을 자동적으로 지원하여 보다 편리한 코드로 개발할 수 있게 도와주는 프레임워크이다.
- JDBC로 처리하는 부분의 코드와 파라미터 설정 및 Mapping을 편하게 할 수 있다.
XML에서 SqlSessionFactory 빌드
- 모든 MyBatis 애플리케이션은 SqlSessionFactory 인스턴스를 사용
- SqlSessionFactoryBuilder를 사용하여 XML 파일에서 SqlSessionFactory 인스턴스를 빌드
- POOLED 타입의 MyBatis
- JNDI 타입의 MyBatis
- Resource 태그에 한 번에 선언하여 따로 DB연결 과정을 선언하지 않아도 된다.
- property태그 value값에 name을 선언하면 완료된다.
DAO에서 XML 사용하기
- resource 변수를 선언하여 xml을 담고 InputStream을 통하여 resource 내용을 가져온다.
- SqlSessionFactoryBuilder 를 호출하여 가져온 내용(in)을 build 한다.
- 여기서 가져온 내용은 getSqlSessionFactory().openSession(); 을 통하여 사용한다.
Mapping 하기
- Mapping을 하기 위해선 interface가 필요하다.
- 추상메소드를 선언하여 XML에서 Mapping하고 DAO에서 사용할 수 있다.
- XML 파일 namespace에 package명을 포함한 인터페이스 주소를 Mapping한다.
- insert, delete 등 Query문을 작성한다. 이 때 #{}를 사용하여 파라미터를 선언한다.
- return을 int로 준 이유는 DB 수정시 commit을 하기 위함이다.
- SqlSession.getMapper(인터페이스 객체.class).메소드;를 re 변수에 담는다.
- int re = -1 의 이유는 DB와 연동하여 구현이 되면 1이 되고 아니면 -1이 유지되어 0보다 크면 commit 아니라면 rollback하여 원상태로 되돌리기 위함이다.
오늘 교육 간 느낀점
JSP를 통하여 자바 필드, 메소드와 DB를 연동하여 수정, 출력 등을 하는 과정을 배웠다.
선언을 하는데에도 지켜야할 순서들이 있었고 각각의 API등이 있어 익숙해지려면 시간이 조금 걸릴 것 같지만 처음으로 내가 구성한 DB들을 연동하여 직접 수정, 출력해보니 드디어 서버를 배우는 느낌을 받았다.앞으로 계속 난이도는 어려워지겠지만 이렇게 하나씩 해결하다보면 결국 모든 과정을 끝내고 하나의 완성품을 제작할 수 있을 것이라 생각한다. 다음 주에는 JSP를 마저 학습하고 게시판 만들기 실습을 할 예정이다.
열심히 학습해서 처음으로 내 게시판을 성공적으로 완성하고싶다.'Review' 카테고리의 다른 글
KOSTA 교육 42일차(Cookie, Session, Expression Language, JSTL, Filter) (0) 2020.06.23 KOSTA 교육 41일차(동적 쿼리, CRUD) (0) 2020.06.23 KOSTA 교육 39일차(JSP, WS, WAS,Container, Servlet) (0) 2020.06.23 KOSTA 교육 38일차(Project) (0) 2020.06.23 KOSTA 교육 37일차(Project) (0) 2020.06.23