자바빈즈 JavaBeans
- JSP 기반 웹 어플리케이션에서 정보를 표현할 때 사용하는 것중 하나로 JSP 페이지에 데이터를 보여주기 위한 자바 코드와 단순히 화면을 출력하려고 HTML 코드를 함께 작성하면 코드 재사용의 어려움이 있다.
- 로직의 모듈화를 위하여 화면에 출력하는 부분과 데이터를 처리하는 로직부분을 구분하여 작성하고 로직 부분의 코드에 자바빈즈 클래스를 사용함
▸자바는 자바끼리 스크립트는 스크립트끼리 - 즉, 로직을 담당하는 자바 코드를 따로 분리하여 , 자바 클래스로 로직을 작성하는 방법
- 자바빈즈는 기존의 자바 클래스를 작성하는 방식과 동일하게 작성
💡컴포넌트 클래스 : 메인이 없는 클래스 ▹ 자바빈
자바빈 : 스스로 동작할 수 없는 모든 클래스를 통칭 (서포트 클래스)
컨테이너 클래스 : 메인이 있는 클래스
☑ 절차
웹 브라우저 —요청—> (<— 응답) JSP <——> 자바빈즈 <——> 데이터베이스
☑ 구성요소
∙ 프로퍼티 : 데이터를 담는 변수
∙ getter : 데이터 가져오기 (꺼내기)
∙ setter : 데이터를 저장하기
☑ 자바빈즈 작성 규칙
- 클래스는 java.io.Serializable 인터페이스를 구현해야함 (생략가능)
- 매개변수 없는 기본생성자 필요
- 캡슐화로 작성. 변수는 private 접근지정자
- 모든 변수는 getter/setter가 존재해야한다
❗❗ getter/setter 메소드 이름 짓는 방법 유의
접두어 get/set + 변수명 (변수명 첫글자 대문자)
ex)
private String id;
private int age;
private boolean finished;
getId() getAge() isFinished()
setId(String id) setAge(int age) setFinished()
Ex) 부품 처럼 쓸 Class, 값 저장해서 넣고 쓰고 빼고, 가방
Bean MemberBean
VO MemberVO
DTO MemberDTO
Action MemberAction
useBean 액션태그
- JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그
- new 클래스명(); 과 같은 역할
- 설정된 id속성과 scope 속성을 바탕으로 자바빈즈의 객체를 검색하고, 객체가 발견되지 않으면 빈객체 생성함
<jsp:useBean id="자바빈즈 식별 이름" calss="자바빈즈 클래스이름" scope="범위" />
# id : 자바의 레퍼런스변수명에 해당
# class : 패키지 이름을 포함한 클래스명, 기본생성자 필요, 추상클래스 사용불가
# scope : 자바빈즈가 저장되는 영역을 설정. page(default), request, session, application 중 하나 지정. 옵션으로 써도 되고 안써도 됨
Ex)
<jsp:useBean id="member" class="web.jsp04.test.Bean" />
// 확장자명 빼고 클래스명까지만 작성해주면 됨
▸ 위 코드를 자바로 바꿔 보자면
Bean member = (Bean)request.getAttribute("mamber");
if(member == null) {
member = new Bean();
request.setAttribute("member", member);
}
💡
VO : Value Object
∙ read-only 개념으로 DB 컬럼과 변수가 매칭되는 형태
DTO : Data Transfer Object
∙ 데이터 전송을 위한 객체, 비지니스 로직까지 담아서 사용
❗주의
form 태그안 input의 name속성값 == VO/DTO 변수명 == set/getProperty 액션태그의 property 속성값은 모두 동일
setProperty 액션태그
useBean 액션태그와 함께 자바빈즈의 setter 메소드에 접근하여 자바빈즈 멤버변수인 프로퍼티의 값을 저장해주는 태그
form 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바 빈즈의 프로퍼티로 변경하여 값을 저장할 수 있다.
<jsp:setProperty name="자바빈즈 식별이름" property="프로퍼티명" value="값" />
# name ; useBean태그의 id 속성값으로 설정된 자바빈즈를 식별하기 위한 이름, 어떤 자바빈즈?
# property : 자바빈즈의 프로퍼티 이름 (클래스의 변수명), "*"을 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 setter메소드에 전달됨
# values : 변경/저장할 자바빈즈의 프로퍼티 값
getProperty 액션태그
자바빈즈의 getter 메소드에 접근하여 자바빈즈의 멤버변수인 프로퍼티의 값을 가져오는 태그
<jsp:getProperty name="자바빈즈 식별이름" property="프로퍼티명" />
# name ; useBean태그의 id 속성값으로 설정된 자바빈즈를 식별하기 위한 이름
# property : 자바빈즈의 프로퍼티 이름 (클래스의 변수명), "*" 사용 불가능
JDBC : Java DataBase Connectivity
- 자바/JSP에서 데이터베이스 프로그래밍을 할 때 JDBC API를 사용한다. 자바를 이용하여 DB연결해주는 것
- 관계형 데이터베이스 시스템에 접근하여 SQL문을 실행하기 위한 API로 DBMS의 종류에 상관없이 동일한 방법으로 데이터베이스 작업을 처리할 수 있다.
- DBMS에 알맞은 JDBC 드라이버가 필요하며 각 DBMS는 자신에게 맞는 JDBC 드라이버를 제공하고 있다.
- 자바 어플리케이션 —> JDBC API —> 오라클 드라이버 <—> 오라클 데이터베이스
—> MySQL 드라이버 <—> MySQL 데이터베이스
—> MSSQL 드라이버 <—> MSSQL 데이터베이스
1. 드라이버 준비
구글 orcle jdbc 검색 - 스크롤 내려서 JDBC Download 클릭
https://www.oracle.com/database/technologies/appdev/jdbc-ucp-19-10-c-downloads.html
19c 버전 - ojdbc8.jar 파일 다운
2. 드라이브 배치

3. JDBC로 JSP와 데이터베이스 연동 단계
(클래스들 임포트 하기)
- JDBC 드라이버 로딩
- DB 접속을 위한 connection 객체 생성
- 쿼리 실행을 위한 Statement 객체 생성, 쿼리문 작성
- 쿼리 실행
- 결과값 사용 (없으면 pass)
- Statemnet, ResultSet 등 사용된 객체 종료
- 데이터베이스 커넥션 종료
4. JDBC 드라이버 로딩과 사용
JDBC API는 java.sql. 패키지에 의해 구현된다
(import 기본!)
- 드라이버 로딩
Class.forName() 메소드 이용하여 드라이버 로딩 OracleDriver 클래스 전체 경로명 문자열로 프로그램 수행시 한번만 필요 - DB 접속을 위한 Connection 객체 생성
DriverManager 클래스의 getConnection() 메소드를 통해 커넥션 객체를 구해오기
☑ 커넥션 구해올때 사용하는 메소드
Connection getConnection(String jdbcURL, String user, String password)
jdbc :orcle:thin:@[id :port]:SID - 쿼리 실행을 위한 Statement 객체 생성, 쿼리문 작성
쿼리문을 실행하려면 생성한 Conection 객체로 부터 Statement를 생성하고 (리턴 받아와) 쿼리를 실행할 수 있다.
☑ 쿼리 실행 객체 3가지
∙ Statement : 정적 쿼리에 사용
∙ PreparedStatement : 동적 쿼리에 적용 🌟
∙ CallableStatement : 함수 실행방식으로 현재는 사용 안함 - 쿼리 실행
PreparedStatement 객체를 사용하면 쿼리를 실행할 수 있다.
☑ 쿼리 실행 메소드
ResultSet executeQuery() SELECT문 실행 int executeUpdate() INSERT, UPDATE, DELETE 등 실행할때 사용
DML : 갱신 레코드 개수를 리턴
DDL : 결과 없는 0 반환 (CREATE, DROP)void close() 닫아주는 - 쿼리 결과값 추출/사용
select 쿼리문을 실행시, executeQuery() 메소드 사용한 결과가 java.sql.ResultSet 타입으로 리턴된다
레코드 값을 테이블 형태로 가진 객체로 반환되어 반복문을 사용하여 레코드 단위로 결과를 추출하여 활용한다
☑ ResultSet 메소드 종류
boolean next() 다음행에 값이 존재하면 true 리턴, 다음행으로 커서 이동 Xxx getXxx(int columnIdx) 지정한 columnIdx 위치의 값을 지정한 Xxx타입으로 가져옴
Xxx : String, Int, Array, Timestamp 등Xxx getXxx(String columnName) 지정한 columnName 위치의 값을 지정한 Xxx타입으로 가져옴
Xxx : String, Int, Array, Timestamp 등void close() 메모리 해제
* 결과값 추출 방법
next() 메소드를 사용하여 select 결과의 존재 여부를 확인할 수 있다.
최초에 데이터를 가르키는 커서는 1행 이전에 위치
next() 메소드 커서의 다음행이 존재하는 경우 true 리턴하고 커서를 그 행으로 이동시킨다
필요한 컬럼의 값을 getXxx()메소드로 출력하면 된다.
데이터 DB에 저장
☑ 쿼리문 작성
PreparedStatement 객체생성시 쿼리문의 틀을 미리 작성해놓고, 값을 나중에 객체생성후 지정하는 방식
쿼리문에 값이 들어가는 자리에는 placeholder인 물음표(?)를 각각의 값대신에 미리 작성해두고
값을 지정할때 PreparedStatement 객체의 setXxx() 메소드를 활용한다.
setString(int index, String str)
setInt(int index, int x)
setDoublie(int index, double d)
setTimestamp(int index, Timestamp t)
setDate(int index, Date d)
....
이때 index에는 물음표의 작성 순서대로 1부터 숫자를 붙혀서 값을 넣어주면 됨
*오라클 db에는 boolean 타입이 없음
'basic > jsp' 카테고리의 다른 글
JSP[05] - 커넥션 풀 Connection pool (0) | 2021.06.07 |
---|---|
[JSP 실습] - 스크립트 요소(스크립트릿, 선언부, 출력문) (0) | 2021.06.04 |
JSP[03] - response, out, application 내장객체 / 에러페이지 세팅 / forward, include, param 액션태그 (0) | 2021.06.03 |
JSP[02] - 디렉티브 태그(page, include, teglib), 스크립트 요소, 내장객체(request) (0) | 2021.06.02 |
JSP[01] - 웹과 JSP (0) | 2021.06.01 |