복습
자바빈 관련 액션태그
- useBean, setProperty, getProperty
- 이런 것들을 이용해서 일일히 getParameter() 로 받던 것을 간략하게 쓸 수 있다
- Model 1 에서 자주 쓰임
+ Model 1 에서도 자바 클래스를 2개 씀 (DTO = 자바빈, DAO)
useBean action tag
- 프로퍼티에 값을 저장하기 위해 객체를 생성 = 힙메모리상에 값을 저장하기 위해 객체를 생성
- 자바빈 객체명 : sb, 프로퍼티 : name, msg 일때 이 프로퍼티의 주소값을 sb 가 가지고 있다
- Spring 에서도 xml 파일에서 bean 객체를 만들때도 사용한다
useBean action tag 속성
useBean action tag 속성 : id
- 객체명
useBean action tag 속성 : class 속성
- 자바빈 클래스 경로를 '패키지' 부터 지정
useBean action tag 속성 : scope 속성
- bean 객체를 어디까지 쓸건지 지정가능
- 4가지 영역명 (page, request, session, application) 이 scope 값으로 사용됨, 기본값 page
ex) scope 값이 page 면 생성된 bean 객체는 현재 페이지에서만 객체 사용가능
setProperty action tag
- 할당된 힙메모리에 값을 저장할때 사용
- setter 메소드를 불러서 값을 설정해줌
- property 속성에 "*" 을 쓰면 이름이 같은 앞쪽 폼에서 넘어오는 값들을 자동으로 자바빈 객체에 저장함
- 앞쪽 폼에서 넘어오는 name 값과 자바빈 프로퍼티의 이름이 같아야만 한다
setProperty action tag 속성
setPropertyaction tag 속성 : name 속성
- useBean 에서 썼던 id 값 , 즉 객체명이 name 속성값
setPropertyaction tag 속성 : value 속성
- 앞쪽 폼에서 값이 넘어오지 않아서 강제로 값을 저장할때 사용
+ 폼에서 넘어오지 않는 값이라도 getter setter 메소드를 만들어야 setProperty value 속성으로 값 전달이 가능하다
getProperty action tag
- getter 메소드를 불러서 값을 구해오고 출력까지 시켜줌
- 나중에는 이 태그 대신 getXX() 로 받는 경우가 많음
+ 폼에서 넘어오지 않는 값이라도 getter setter 메소드를 만들어야 getProperty 로 값 전달이 가능하다
forward action tag
- 비슷한 코드를 자바코드로 처리하므로 Model 2 에선 자주 사용되지 않음
자바빈 클래스
- 폼데이터 처리에 용이
- 재사용 가능, 효율적
- 컴포넌트 기반 구현 (JSP, DTO, DAO 분리되어 별도 기능 수행)
- 생성자를 통해서 프로퍼티에 값 전달이 불가능하므로 자바빈 클래스에서 생성자 대신 setter 메소드를 작성
자바빈 클래스 예시
- 들어가는 내용이 정해져 있다
- 필드(프로퍼티), setter 메소드, getter 메소드
프로퍼티
- 지금까지는 form 에서 넘어온 값들을 프로퍼티에 저장했음
- form에서 넘어온 값 뿐 아니라 DB 에서 검색한 값도 이 필드, 프로퍼티에 저장됨
- DAO 에서 DB 검색된 값을 저장하기위해 DAO 클래스에서 DTO 객체를 직접 생성해서 자바빈의 프로퍼티에 일시로 저장
- 자바코드인 DAO 에서는 setProperty 를 못쓰므로 setter 메소드로 직접 값 설정, getProperty 못쓰므로 getter 메소드로 직접 값 가져옴
- 중간 저장소 역할
+ action tag 들은 JSP 에서만 사용 가능
자바빈 클래스 생성시 주의
- form 에서 넘어온 값을 저장하고 싶다면 form 에서 넘어오는 name값 과 자바빈 프로퍼티 이름이 같아야한다
폼에서 넘어오지 않는 값 주의
- 폼에서 넘어오지 않는 값이라도 getter setter 메소드를 만들어야 setProperty value 속성으로 값 전달과 getProperty 로 값 구하는게 가능하다
예습
데이터베이스 접속 방식
1. JDBC(Java DataBase Connectivity) 방식
2. DBCP(DataBase Connection Pool) 방식
3. ORM(Object Relational Mapping) 프레임워크
ex) iBatis, MyBatis, hibernate, JPA etc
DAO
- 주로 메소드만으로 만들어지는 클래스
- 메소드에서 주로 SQL 문을 수행
- ORM 프레임 워크 로 처리시 간결한 코드 가능 (xml 로 작성)
ex) iBatis, MyBatis, hibernate, JPA etc
DTO 와 DAO
- DAO 의 메소드를 사용하기 위해 DTO 객체 주소값을 DAO 에 전달
- insert, update 위해 DAO 클래스에 DTO 객체 주소값을 메소드를 통해서 전달함
Model 2
- DTO 클래스와 DAO 클래스를 Model 2 에서도 사용함
- MVC 3가지 영역으로 기능을 분리시켜 개발
- 다음영역으로 넘어갈때 값이나 주소를 DTO 클래스에 저장해서 넘김
자바빈 예제 3
실습 준비
- 확장자가 java 인 자바빈 파일 LoginBean.java 를 src 안에 넣어야한다
- 패키지명이 beans 이므로 beans 패키지를 만든 후 LoginBean.java 를 그 안으로 복붙한다
자바빈 예제 3
- LoginBean.java
package beans;
public class LoginBean {
// 사용자가 폼에서 입력한 값을 저장하기 위한 필드
private String userid;
private String passwd;
private String _userid;
private String _passwd;
// 생성자
public LoginBean() {
// 인증에 사용할 기본값 설정
_userid = "myuser";
_passwd = "1234";
}
// 아이디와 비밀번호가 맞는지 체크하는 메서드
public boolean checkUser() {
if(userid.equals(_userid) && passwd.equals(_passwd))
return true;
else
return false;
}
public void setUserid(String userid) {
this.userid = userid;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getUserid() {
return userid;
}
public String getPasswd() {
return passwd;
}
}
- userid, passwd 프로퍼티는 사용자가 입력한 폼에서 넘어온 값을 저장하기 위한 필드
- _userid, _passwd 프로퍼티는 DB 에 저장된 값을 저장하기 위한 역할을 하는 필드 (DAO 관련)
- 로그인에 성공하기 위해서는 userid 와 _userid , passwd 와 _passwd 값이 일치되어야만 로그인 성공
- 여기선 DB 연결을 하진 않고 _userid 는 "myuser", _userpasswd 는 "1234" 로 생성자를 통해서 할당하도록 설정해뒀다
- 아이디와 비밀번호가 맞는지 확인하는 메소드인 checkUser() 가 있다, 이 메소드는 나중에 DAO 클래스에 있음
+ 자바빈의 프로퍼티가 private 이므로 getter setter 메소드로 값을 구해와야한다
+ 생성자 와 checkUser() 는 원래 DAO 클래스에 들어가야하는 내용임
- login_form.html
<html>
<head><title>JSP Bean example</title>
<meta charset="euc-kr">
<script>
</script>
</head>
<body bgcolor="#FFFFFF" onLoad="document.myform.userid.focus()">
<center>
<H2>로그인 예제</H2>
<HR>
<form method="post" action="login.jsp" name="myform">
<table width="250" border="1" align="center" bordercolordark="#FF0033" cellspacing="0" cellpadding="5">
<tr bgcolor="#FF6666">
<td colspan="2" height="21">
<div align="center"><b><font size="2">로그인</font></b></div>
</td>
</tr>
<tr bgcolor="#FFCCCC">
<td> 아이디</td>
<td> <b>
<input type="text" name="userid" size=10>
</b> </td>
</tr>
<tr bgcolor="#FFCCCC">
<td> 패스워드</td>
<td>
<input type="password" name="passwd" size=10>
</td>
</tr>
<tr bgcolor="#FFCCCC">
<td height="42" colspan="2">
<div align="center">
<input type="submit" value="로그인" onClick="check()">
</div>
</td>
</tr>
</table>
</form>
<p>
</body>
</html>
- login_form.html 은 가장 먼저 실행해야할 파일이다
- 사용자가 입력한 아이디와 패스워드를 login.jsp 로 post 방식으로 전송함
- 아이디의 name 값은 userid, 패스워드의 name 값은 passwd
- 결과 캡처
- 맞는 아이디, 패스워드 입력시
- 틀린 아이디, 패스워드 입력시
- login.jsp
<%@ page contentType="text/html;charset=euc-kr" %>
<jsp:useBean id="login" class="beans.LoginBean" />
<jsp:setProperty name="login" property="*" />
<HTML>
<HEAD><TITLE> 로그인 예제 </TITLE></HEAD>
<BODY>
<center>
<H2>로그인 예제</H2>
<HR>
<%
if(!login.checkUser()) {
out.println("로그인 실패 !!");
}else {
out.println("로그인 성공 !!");
}
%>
<HR>
사용자 아이디 : <jsp:getProperty name="login" property="userid" /><BR>
사용자 패스워드 : <jsp:getProperty name="login" property="passwd" />
</BODY>
</HTML>
- login_form.html 에서 넘어가는 파일이다
- userBean action tag 로 login 이라는 자바빈(beans.LoginBean) 객체를 만든다, 힙메모리상에 프로퍼티 저장할 공간 생성
- setProperty action tag 로 객체 login 의 userid, passwd 프로퍼티에 넘어온 폼에서 넘어온 userid, passwd 값이 저장됨
- userBean action tag 로 Bean 객체를 만들때 생성자가 호출되었으므로 _userid 는 "myuser", _passwd 는 "1234" 로 설정
- 나중에 이 _userid, _passwd 는 DB 에서 가져온 값이 될 것이다
- 자바빈 객체의 checkUser() 메소드를 호출하여 아이디값과 비밀번호 값이 DB에 저장된 값인 _userid 와 _passwd 와 값이 같은지 체크함, 이 메소드는 나중에 DAO 클래스에 있음
+ userBean action tag 는 내부적으로 생성자 호출
+ setProperty action tag 는 내부적으로 setter 메소드 사용하므로 setter 메소드가 만들어져 있어야함, getter 도 마찬가지
+ 자바빈의 프로퍼티가 private 이므로 getter setter 메소드로 값을 구해와야한다
- getProperty 로 login 객체의 userid, passwd 프로퍼티값을 구해와서 출력함
자바빈 예제 4
실습 준비
- 확장자가 java 인 자바빈 파일 JoinBean.java 를 src 안에 넣어야한다\
- 패키지명이 join 이므로 join 패키지를 src 안에 만들고 패키지 안에 JoinBean.java 를 복붙한다
자바빈 예제 4
- JoinBean.java (자바빈 클래스)
package join;
public class JoinBean {
private String id;
private String pass;
private String name;
private String sex;
private int age;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
- 프로퍼티와 각 프로퍼티의 getter setter 메소드 들이 있다
- 나이를 저장하는 프로퍼티인 age 의 자료형이 int 임을 주의해야함, 나중에 사용자가 나이 입력시 String 형 으로 들어온다
+ sex 의 자료형이 String 이다 (수정)
- joinForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<html>
<head>
<title>회원가입 폼</title>
</head>
<body>
<center>
<form action="joinChk.jsp" method="post">
<table border=0>
<tr>
<td align=right bgcolor="yellow"><font size=2>아이디 : </font></td>
<td bgcolor="yellow"><input type="text" name="id"></td>
</tr>
<tr>
<td align=right bgcolor="yellow"><font size=2>비밀번호 : </font></td>
<td bgcolor="yellow"><input type="password" name="pass"></td>
</tr>
<tr>
<td align=right bgcolor="yellow"><font size=2>이름 : </font></td>
<td bgcolor="yellow"><input type="text" name="name"></td>
</tr>
<tr>
<td align=right bgcolor="yellow"><font size=2>성별 : </font></td>
<td bgcolor="yellow">
<input type="radio" name="sex" value="남자"><font size=2>남</font>
<input type="radio" name="sex" value="여자"><font size=2>여</font>
</td>
</tr>
<tr>
<td align=right bgcolor="yellow"><font size=2>나이 : </font></td>
<td bgcolor="yellow"><input type="text" name="age"></td>
</tr>
<tr>
<td align=right bgcolor="yellow"><font size=2>이메일주소 : </font></td>
<td bgcolor="yellow"><input type="text" name="email"></td>
</tr>
<tr>
<td align=center bgcolor="yellow" colspan=2>
<input type="submit" value="가입">
<input type="reset" value="다시 작성">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
- 가장 먼저 실행해야 하는 파일
- 가입하는 양식 폼이고 name 값은 자바빈 프로퍼티이름과 같게 설정한다
+ sex 의 자료형이 String 형이므로 라디오버튼에서 value 가 "남자" "여자" 라는 String 형이 됨, 즉 넘어가는 값이 String 형
- 결과 캡처
- joinChk.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%request.setCharacterEncoding("euc-kr");%>
<jsp:useBean id="join" class="join.JoinBean"/>
<jsp:setProperty name="join" property="*"/>
<html>
<head>
<title>회원가입 입력 정보 확인 페이지</title>
</head>
<body>
<center>
<table border=1>
<tr>
<td bgcolor="yellow"><font size=2>아이디 : </td>
<td bgcolor="yellow"><jsp:getProperty name="join" property="id"/></td>
</tr>
<tr>
<td bgcolor="yellow"><font size=2>비밀번호 : </td>
<td bgcolor="yellow"><jsp:getProperty name="join" property="pass"/></td>
</tr>
<tr>
<td bgcolor="yellow"><font size=2>이름 : </td>
<td bgcolor="yellow"><jsp:getProperty name="join" property="name"/></td>
</tr>
<tr>
<td bgcolor="yellow"><font size=2>성별 : </td>
<td bgcolor="yellow">
<%-- <jsp:getProperty name="join" property="sex"/></td> --%>
<%=join.getSex() %></td>
</tr>
<tr>
<td bgcolor="yellow"><font size=2>나이 : </td>
<td bgcolor="yellow"><jsp:getProperty name="join" property="age"/></td>
</tr>
<tr>
<td bgcolor="yellow"><font size=2>이메일주소 : </td>
<td bgcolor="yellow"><jsp:getProperty name="join" property="email"/></td>
</tr>
</table>
</center>
</body>
</html>
- 한글값이 넘어올 수 있으므로 한글 인코딩을 한다
- useBean action tag 로 join 패키지의 JoinBean 이라는 자바빈 클래스의 객체 join 을 만든다, import 필요없음
- 힙메모리상에 기억공간이 생성되고 join 이 stack 에서 주소값을 가지고 있다
- setProperty action tag 로 객체 join 의 프로퍼티에 폼에서 넘어온 이름이 같은 값들을 저장한다
- 필드들의 접근제어자가 private 이므로 setter 메소드로 값을 전달하는것, 즉 setProperty 사용
- getProperty action tag 로 힙메모리에 저장된 프로퍼티 값을 가져와서 출력한다
- getProperty 는 setProperty 처럼 한꺼번에 처리 불가능하고 아이디 따로 비밀번호 따로 성별 따로 작성해야한다
+ sex 의 자료형을 int 에서 String 으로 수정한 이후 getProperty action tag 가 안되서 직접 getSex() 로 값을 불러옴
자바빈 예제 5
- javabean3 폴더의 내용
- DB 연동된 내용이므로 DB 연동 학습 한 후 돌아오기
- DAO 클래스를 만들어서 DB 연동을 한다
- 회원가입, 로그인, 삭제, 수정 등의 내용
+ 태그 중 지시어 태그 중 사용자 정의 태그라는 JSTL 만 남아있다 <%@ taglib %>
JSP DB 연동
JSP 와 Oracle 연동
데이터베이스 접속 방식 3가지
1. JDBC(Java DataBase Connectivity) 방식
- 이 방법으로 자바와 오라클 연동
- JDBC 드라이버 로딩하는데 시간 소요, 접속자 많으면 서버 부하
- 자바코드 대신 JSP 코드로 작성한다는 점만 다르고 자바-오라클 연동할 때와 같다
2. DBCP(DataBase Connection Pool) 방식
- 미리 Connection Pool 에 연결을 시켜둠 (Pool = 뭔가 모아둔 것, Connection Pool = 커넥션을 모아둔 것)
- 필요한 경우에 Connection Pool 에서 하나를 빌려와서 연결을 하고 연결 닫으면 Pool에 반환함
- 접속자가 많거나 접속이 빈번한 경우 주로 사용하는 방식
3. ORM(Object Relational Mapping) 프레임워크
ex) iBatis, MyBatis, hibernate, JPA etc
- Object = DTO 객체, Mapping = 연결
- 프레임워크를 사용하면 매핑을 통해서 DB 에서 검색한 결과를 바로 DTO 객체에 저장시켜줌, 코드 간결해지도록 해줌
- 매핑을 위해서 DB 쪽 테이블의 컬럼명과 DTO 클래스의 필드명이 일치되어야함
+ 즉, 나중에는 form의 name값과 DTO 클래스의 필드명과 DB 테이블의 컬럼명, 총 3개의 이름이 일치해야 연동이 수행됨
- MyBatis 중심으로 설명할 것 (Model 1, Model 2, Spring, SpringBoot 와 모두 연동됨)
- 전자정부 프레임워크에선 MyBatis 주로 사용
- JDBC, DBCP 방식으로 먼저 하고 다음에 ORM 프레임 워크를 사용할 것
- 간단한 테스트 할때는 JDBC 방식 사용
JDBC 아키텍처
- 중간에 Driver 가 반드시 필요하다, DB 를 만든 회사 홈페이지에서 구할 수 있다
- 오라클과 연동하려면 오라클용 JDBC Driver 가 필요함, 그게 ojdbc6.jar 파일 (xe 버전)
JDBC Driver 환경 설정 (저장 위치)
- 자바 오라클 연동시엔 자바가 설치된 곳에 ojdbc6.jar 에 넣었다
- JSP 오라클 연동시엔 JDBC Driver를 자바가 설치된 곳에 저장해도 되고, 아파치 톰캣이 설치된 곳에 저장해도 되고, 프로젝트의 WebContent/WEB-INF/lib 폴더에 저장해도 된다
- 프로젝트의 WEB-INF/lib 에 저장시 import 시 이 Driver 도 같이 import 되고 export 시 Driver 도 같이 export 되므로 편하다
+ 나중에는 Maven 으로 드라이버 관리
JDBC Driver 사용해서 DB 연동
- 자바-오라클 연동과 거의 같다
- 자바코드가 JSP 코드로 바뀐다는 점만 다르다
1. 맞는 JDBC Driver 를 프로젝트의 WEB-INF/lib 에 가져온다
- 지금은 클라우드에 있는 오라클용 JDBC Driver 와 mysql 용 JDBC Driver 를 jspproject/WebContent/WEB-INF/lib 에 복붙
2. DB 연동 테스트를 위한 파일을 WebContent 폴더에 가져온다
- 클라우드에 있는 DB 연동 테스트 파일 JDBC_Con.jsp 가 있는 JDBC 폴더를 WebContent 폴더에 가져옴
- 지금은 JSP 파일에서 연동 테스트 하지만 나중엔 DAO 클래스에서 테스트
3. Oracle 데이터베이스 활성화
3-1)
3-2)
4. DB 연동 테스트
- JDBC_Con.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*" %>
<%
Connection con=null;
try{
/***************** My-SQL 연결 설정하는 부분 *****************************/
// String driver = "com.mysql.jdbc.Driver";
// String jdbcUrl = "jdbc:mysql://localhost:3306/jsptest";
// String dbId = "jspid";
// String dbPass = "jsppass";
/************************************************************************/
/**************** Oracle 연결 설정하는 부분 *****************************/
String driver = "oracle.jdbc.driver.OracleDriver";
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:xe";
String dbId = "scott";
String dbPass = "tiger";
/************************************************************************/
Class.forName(driver); // JDBC Driver Loading
con=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
out.println("제대로 연결되었습니다.");
} catch(Exception e){
e.printStackTrace();
}
%>
- DriaverManater 클래스 쓰기 위해 java.sql 패키지 import
- DB 연동시 반드시 예외처리를 해야한다
<MySQL 연결>
- db 인 jsptest 에 id 인 jspid 와 비밀번호인 jsppass 적기
- 주석을 풀어서 MySQL 연동시도시 연동 성공 확인 했다
<Oracle 연결>
- db 인 xe 에 id인 scott 과 비밀번호인 tiger 적기
<그 뒤>
- OracleDriver 라는 바이트코드를 Class.forName() 으로 메모리상으로 로딩
- 접속되면 connection 객체가 생성되고 연결되었다는 메세지 출력
- 로딩이 안되면 catch 로 가서 오류 출력
- 여기까지가 DB 연결시 공통적인 코드, 뒤에 select, insert, delete, update 등 작성
- 결과 캡처 (Oracle 연동 성공)
- JSP 로 하는 것은 처음이자 마지막, 이후엔 Java 클래스인 DAO 클래스에서 DB 연동
JSP-오라클 연동 예제
실습 준비
- 지금은 JSP 파일로 DB 연동할것, 나중에 DAO 클래스에서 DB 연동
- DB 연동하여 insert 등 하기 위해 scott 계정에 테이블 하나를 만들어야한다
create table member1(
id varchar2(12) primary key,
passwd varchar2(12) not null,
name varchar2(10) not null,
reg_date timestamp not null );
- 이 테이블을 scott 계정에 만들기
- WebContent 폴더에 sql 폴더를 만들고 안에 myoracle.sql 파일 만들기
- myoracle.sql 에서 커넥션 프로파일 설정 후(Oracle_11, New Oracle(scott), xe)
- 이미 생성된 member1 테이블이 없다는 것 확인 후 테이블 생성
- id 는 primary key, 나머지 컬럼은 not null 제약조건
- 나머지는 JSP 파일로 데이터 입력, 수정, 검색, 삭제 할 것
- JSP 로 하는 것은 처음이자 마지막, 이후엔 Java 클래스인 DAO 클래스에서 DB 연동
JSP-오라클 연동 예제 1
- insertTestForm.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<html>
<head><title>레코드 삽입(추가)예제</title>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(document).ready(function(){
$("form").submit(function(){
if($("#id").val()==""){
alert("ID를 입력 하세요");
$("#id").focus();
return false;
}
if($("#passwd").val()==""){
alert("비밀번호를 입력 하세요");
$("#passwd").focus();
return false;
}
if($("#name").val()==""){
alert("이름을 입력 하세요");
$("#name").focus();
return false;
}
});
});
</script>
</head>
<body>
<h2>member1 테이블에 레코드삽입(추가)예제</h2>
<FORM METHOD="post" ACTION="insertTest.jsp">
아이디 : <INPUT TYPE="text" NAME="id" id="id"><p>
패스워드 : <INPUT TYPE="password" NAME="passwd" id="passwd"><p>
이름:<INPUT TYPE="text" NAME="name" id="name"><p>
<INPUT TYPE="submit" VALUE="보내기">
</FORM>
</body>
</html>
- 가장 먼저 실행하는 파일
- 폼을 만들고 유효성 검사를 했다
- 값을 입력후 '보내기' 를 누르면 insertTest.jsp 로 값이 넘어감
- insertTest.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*"%>
<%
request.setCharacterEncoding("euc-kr");
String id= request.getParameter("id");
String passwd= request.getParameter("passwd");
String name= request.getParameter("name");
Timestamp register=new Timestamp(System.currentTimeMillis());
Connection conn=null;
PreparedStatement pstmt=null;
int result = 0;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
// JDBC 방식
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
String sql= "insert into member1 values (?,?,?,sysdate)";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,passwd);
pstmt.setString(3,name);
// pstmt.setTimestamp(4,register);
result = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
<html>
<head><title>레코드 삽입(추가)예제</title></head>
<body>
<%
if(result == 1){
%>
<script>
alert("회원가입 성공");
location.href="selectTest.jsp";
</script>
<% }else{%>
<script>
alert("회원가입 실패");
history.go(-1);
</script>
<% } %>
</body>
</html>
- 자바빈 안쓰고 JSP 만으로 파일 작성하고 있으므로, request.getParameter() 로 받고있음
- 나중엔 DAO, DTO 자바 클래스 사용
- 한글값 인코딩과 폼에서 넘어온 값을 getParameter() 로 받고 있다
- result 가 1이면, 즉 insert 를 성공하면 회원가입 성공 메세지를 띄우고 목록인 selectTest.jsp 로 간다
- result 가 1이 아니면, 즉 isnert 실패시 회원가입 실패 메세지를 띄우고 이전페이지인 회원가입 페이지인 insertTestForm.jsp 로 돌아감
ex) 중복아이디로 회원가입 시도시 insert 실패
+ 수정/삽입 부분은 아래에
DB 연동 (insertTest.jsp 부분)
Connection conn=null;
PreparedStatement pstmt=null;
int result = 0;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
// JDBC 방식
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
String sql= "insert into member1 values (?,?,?,sysdate)";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,passwd);
pstmt.setString(3,name);
// pstmt.setTimestamp(4,register);
result = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
- 자바-오라클 연동할떄와 같은 코드
- 필요한 객체를 만들고 try-catch-finally 로 예외처리
+ PreparedStatemet 는 SQL문을 실행시켜주는 역할
- Class.forName() 으로 오라클용 JDBC 로딩, DriverManager.getConnection(url,username,passwd) 으로 connection 객체 생성
- insert sql 문을 사용해서 값을 삽입, 4번째 자리는 sysdate 오라클 함수로 바로 날짜 입력
+ id, passwd, name 의 자료형이 varchar2 이므로 setString() 메소드로 값을 설정
+ sysdate를 대신 사용하므로 위의 Timestamp 객체는 사용되지 않음
+ int result 로 몇개가 삽입 성공했는지 받음, insert 는 1개씩 되므로 성공시 1을 리턴
- finally 에서 close() 로 닫아줌
* DB 연동 절차 설명 아래에
- 결과 캡처 (전체 흐름)
- 게시판 형태로 만들어졌으므로 가입 후 목록페이지로 보냄
- 아이디 중복되지 않게 여러명 더 가입시켜보자
- 수정 페이지로 감
- 비밀번호가 맞을때만 수정됨
- 삭제도 마찬가지
+ 수정/삽입 부분은 아래에
DB 연동 절차
1. Class.forName() 으로 JDBC Driver 를 로딩한다
2. Connection 객체로 DB 연결함
- DriverManager 클래스의 getConnection() 으로 객체를 가져옴
3. SQL 문 생성 (객체 생성)
- SQL 문 실행하는 방법은 3 가지이다
- Statement 는 " " 가 복잡했다, PreparedStatement 는 값이 들어갈 위치에 ?
- 저장프로시저를 실행할때 exe 나 execute 로 실행했지만 자바로 실행할땐 CallableStatement 사용
4. SQL 문 전송 (실행)
- select문은 executeQuery() 사용, 나머지 DML 은 executeUpdate() 사용
SQL 문 전송 (실행)
- select 는 검색한 결과를 ResultSet 객체가 저장하고 있다
- insert / update / delete 된 데이터 개수를 반환
JSP-오라클 연동 예제 1 이어서
- selectTest.jsp (목록)
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*"%>
<html>
<head><title>테이블의 레코드를 화면에 표시하는 예제</title></head>
<body>
<h2>member1 테이블의 레코드를 화면에 표시하는 예제</h2>
<a href="insertTestForm.jsp">회원가입</a>
<TABLE width="550" border="1">
<TR>
<TD width="100">아이디</TD>
<TD width="100">패스워드</TD>
<TD width="100">이름</TD>
<TD width="250">가입일자</TD>
<TD width="100">수정</TD>
<TD width="100">삭제</TD>
</TR>
<%
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
ResultSet rs01=null;
int cnt=0;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
pstmt=conn.prepareStatement("select count(*) from member1");
rs01=pstmt.executeQuery();
if(rs01.next()){
cnt = rs01.getInt(1);
// cnt = rs01.getInt("count(*)");
}
String sql= "select * from member1";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
String id= rs.getString("id");
String passwd= rs.getString("passwd");
String name= rs.getString("name");
Timestamp register=rs.getTimestamp("reg_date");
%>
<TR>
<TD width="100"><%=id%></TD>
<TD width="100"><%=passwd%></TD>
<TD width="100"><%=name%></TD>
<TD width="250"><%=register.toString()%></TD>
<TD width="100">
<a href="updateTestForm.jsp?id=<%=id%>">
수정
</a>
</TD>
<TD width="100">
<a href="deleteTestForm.jsp?id=<%=id %>">
삭제
</a>
</TD>
</TR>
<% }
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs != null) try{rs.close();}catch(SQLException sqle){}
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
</TABLE>
총 회원수:<%=cnt %>명
</body>
</html>
- '회원가입' 을 누르면 insertTestForm.jsp 로 넘어간다
- select sql 문을 2개 써서 회원 목록, 총 회원수 를 구하고 있다
- 안에 타이틀을 출력하고 DB 연결해서 검색한 데이터를 뿌려준다
<회원수>
- 검색한 총 회원수를 구하기 위해 cnt 변수를 만듬, 그룹함수 count(*) 를 쓰고 결과를 rs01 이라는 ResultSet 객체에 반환
- 결과가 1개이므로 if 문 사용 rs01.next() 와 rs01.getInt(1) 또는 rs01.getInt("count(*)") 을 사용해서 결과 count(*) 를 구해옴
<회원목록>
- 다음으로 회원 목록을 구해오기 위해 select * from member 를 executeQuery() 로 실행
- while 문과 rs.next() 로 하나씩 데이터를 가져와서 출력하고 있다, 출력까지 while문임
- while 문 안에서 데이터를 가져오는 자바코드는 스크립틀릿 태그 안에, 출력하는 html 코드는 스크립틀릿 태그 바깥에 작성, while 문 괄호 잘 보기
- 컬럼의 자료형이 varchar2 이므로 getString() 메소드로 값을 구해옴
+ number 타입이면 getInt() , 즉 컬럼 자료형마다 값을 설정하고 구해오는 메소드가 다름
- select sql 문을 2개 쓰므로 ResultSet 객체를 2개 만듬, 전역변수처럼 try 바깥에 선언해야만 finally 에서도 사용가능
+ 날짜 시간을 원하는 포멧으로 바꾸고 싶다면 출력시 Timestamp 와 SimpleDateFormat 사용해야한다
'수정' 버튼 눌렀을때 수정폼으로 넘어가기 (selectTest.jsp 부분)
<a href="updateTestForm.jsp?id=<%=id%>">
수정
</a>
- '수정' 누르면 수정폼인 updateTestForm.jsp 로 하이퍼링크 통해 이동
- 지금은 session 을 쓰지 않고있기 때문에 updateTestForm 으로 id 값을 넘겨줘야함
- get 방식으로 값이 넘어간다, "전달할파일명?변수명=값" 방식으로 값을 넘김
- 이때 값은 DB 에서 가져온 id 이다
- 나중에 이 값을 받으려면 getParameter() 로 받음
공통코드
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
- 결과 캡처
+ 날짜 시간을 원하는 포멧으로 바꾸기 (selectTest.jsp 수정)
- 년월일시분초 로 출력
- DB 에 저장된 날짜는 어떤 타입이도 상관없다, 출력할때 바꾸어야한다
- Timestamp 와 SimpleDateFormat 사용해야한다
+ 나중에 Model 2 에선 SimpleDateFormat 사용불가하므로 JSTL 지원 라이브러리로 처리
+ 페이징 처리 되지 않았으므로 한페이지에 모든 데이터가 나타난다
+ 페이징 처리시 서브쿼리 형태의 인라인 뷰와 rownum 사용
- updateTestForm.jsp (수정폼)
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*"%>
<%
String uid=request.getParameter("id");
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
String sql= "select * from member1 where id=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, uid);
rs=pstmt.executeQuery();
if(rs.next()){
String id= rs.getString("id");
String passwd= rs.getString("passwd");
String name= rs.getString("name");
Timestamp register=rs.getTimestamp("reg_date");
%>
<html>
<head><title>레코드 수정예제</title></head>
<body>
<h2>member1 테이블의 레코드 수정예제</h2>
<FORM METHOD="post" ACTION="updateTest.jsp">
<input type=hidden name="id" value="<%=id %>">
아이디 : <%=id %><p>
패스워드 : <INPUT TYPE="password" NAME="passwd"><p>
변경할 이름:<INPUT TYPE="text" NAME="name" value="<%=name%>"><p>
<INPUT TYPE="submit" VALUE="보내기">
</FORM>
</body>
</html>
<% } // if end
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs != null) try{rs.close();}catch(SQLException sqle){}
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
- 목록인 selectTest.jsp 에서 get 방식으로 넘어온 id 변수에 전달된 id 값을 request.getParamter() 로 받는다
- id 값은 DB 에서 비밀번호를 끄집어낼때도 필요하고, 데이터를 수정하기 위해서 where 절에 들어가는 용도로도 필요하다
- id 값은 수정할 수 없도록 보여주기만하고 패스워드, 변경할 이름을 입력
- 변경할 이름 입력창에는 DB 에서 가져온 이름을 나타냄, 그걸 지우고 변경할 이름을 쓰게끔함
- where 절에서 id 를 이용해서 단 한명의 정보를 구해서 구해졌다면 form 을 통해 updateTest.jsp 로 비밀번호, 변경할 이름 전송
- 넘어온 id로 select 를 수행해서 비밀번호를 끄집어내는 select 문과, 비밀번호가 맞는 경우 변경할 이름으로 수정하는 update 문은 다음인 updateTest.jsp 에서 실행함
- 여기선 비밀번호와 변경할 이름을 입력받고 비밀번호, 변경할 이름을 form 을 통해 updateTest.jsp 로 전송함
- 아이디값은 hidden 객체로 updateTest.jsp 로 넘김
- 즉 총 3가지 정보, 아이디, 패스워드, 변경할 이름이 updateTest.jsp 로 넘어감
+
패스워드 : <INPUT TYPE="password" NAME="passwd"><p>
- name 변수인 "passwd" 에 사용자가 입력한 패스워드가 form 을 통해 전달됨
hidden 객체로 id 값 넘기기 (updateTestForm.jsp 부분)
- 아이디값은 입력차이 아니므로 넘어가지 않음, 파일끼리 내부적으로 넘기기위해 hidden 객체를 사용해서 넘김
- select 를 수행해서 비밀번호를 끄집어내는 select 문과, 비밀번호가 맞는 경우 변경할 이름으로 수정하는 update 문을 쓰기 위해 id 가 필요하므로 넘겨줘야한다
<input type=hidden name="id" value="<%=id %>">
+ 주의 : 테이블의 이름이 저장되는 공간 크기가 10byte 고 한글 한글자는 3byte 이므로 3 글자까지만 입력 / 수정 가능
- updateTest.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*"%>
<%
request.setCharacterEncoding("euc-kr");
String id= request.getParameter("id");
String passwd= request.getParameter("passwd");
String name= request.getParameter("name");
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
String sql= "select id, passwd from member1 where id= ?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
rs=pstmt.executeQuery();
if(rs.next()){ // id가 있으면
String rId=rs.getString("id");
String rPasswd=rs.getString("passwd");
if(id.equals(rId) && passwd.equals(rPasswd)){
sql= "update member1 set name= ?, reg_date=sysdate where id= ? ";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,id);
pstmt.executeUpdate();
%>
<script>
alert("회원 정보 수정 성공");
location.href="selectTest.jsp";
</script>
<%
}else{
%>
<script>
alert("비밀번호가 틀렸습니다");
history.go(-1);
</script>
<%
}
}else{
%>
<script>
alert("아이디가 틀렸습니다.");
history.go(-1);
</script>
<%
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs != null) try{rs.close();}catch(SQLException sqle){}
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
- 이름 등에서 한글값이 post 방식으로 넘어가므로 한글 인코딩
- request.getParameter() 로 값을 받아서 updateTestForm.jsp 에서 넘어온 아이디, 패스워드, 변경할 이름값을 변수에 저장
- id는 중복되지 않고, 한명의 정보이므로 if문 사용, if(rs.next()) 에서 id 와 같은 아이디가 DB에 있다면 안의 내용이 실행됨
+ id는 hidden 으로 넘어오므로 id 가 틀릴일은 없다
- 넘어온 아이디값을 where 절에 넣어서 select 문으로 DB의 아이디와 패스워드를 끄집어냄
- 그 후, if 문 안의 if 문에서, 수정폼에서 넘어온 아이디와 DB의 아이디가 같고, 수정폼에서 넘어온 패스워드와 DB의 패스워드가 같으면 update 문 수행 해서 이름, 아이디, 날짜 수정
- 비번 불일치시 if 문안의 else 문에서 "비밀번호가 틀렸습니다" 출력 후 다시 수정폼으로 돌아감
- 비밀번호 맞는 경우
- 가입일자도 수정한 시간으로 변경됨
- 비밀번호 틀린 경우
- deleteTestForm.jsp (삭제폼)
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*"%>
<%
String uid=request.getParameter("id");
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
String sql= "select * from member1 where id=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, uid);
rs=pstmt.executeQuery();
if(rs.next()){
String id= rs.getString("id");
String passwd= rs.getString("passwd");
String name= rs.getString("name");
Timestamp register=rs.getTimestamp("reg_date");
%>
<html>
<head><title>레코드 삭제예제</title></head>
<body>
<h2>member1 테이블의 레코드 삭제예제</h2>
<FORM METHOD="post" ACTION="deleteTest.jsp">
<input type=hidden name="id" value="<%=id %>">
<%-- 아이디 : <%=id %><p> --%>
패스워드 : <INPUT TYPE="password" NAME="passwd"><p>
<%-- 이름:<%=name%><p> --%>
<INPUT TYPE="submit" VALUE="삭제">
</FORM>
</body>
</html>
<% } // if end
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs != null) try{rs.close();}catch(SQLException sqle){}
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
- 목록인 selectTest.jsp 파일에서 get 방식으로 넘어온 id 값을 getParameter() 로 받아서 변수 uid 에 저장
- 삭제폼에서 아이디나 이름등을 보여주지 않아도 되므로 수정과 달리 DB 연동하는 코드가 없어도 된다
- 폼을 통해서 hidden 객체로 아이디 값을 전달하고 (<%=id%> 대신 <%=uid%> 도 가능), 사용자가 삭제폼에 입력한 패스워드를 전달함, 즉 2개를 전달함
- 삭제폼에 맞는 비밀번호를 입력했을때 delete sql 문으로 데이터 삭제하는건 다음인 deleteTest.jsp
- deleteTest.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*"%>
<%
request.setCharacterEncoding("euc-kr");
String id= request.getParameter("id");
String passwd= request.getParameter("passwd");
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
String jdbcUrl="jdbc:oracle:thin:@localhost:1521:xe";
String dbId="scott";
String dbPass="tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );
String sql= "select id, passwd from member1 where id= ?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
rs=pstmt.executeQuery();
if(rs.next()){ // id가 있으면
String rId=rs.getString("id");
String rPasswd=rs.getString("passwd");
if(id.equals(rId) && passwd.equals(rPasswd)){ // 비번 일치시
sql= "delete from member1 where id= ? ";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.executeUpdate();
%>
<script>
alert("회원 삭제 성공");
location.href="selectTest.jsp";
</script>
<%
}else{ // 비번 불일치시
%>
<script>
alert("비밀번호가 틀렸습니다.");
history.go(-1);
</script>
<% }%>
<% }else{ %>
<script>
alert("ID가 틀렸습니다.");
history.go(-1);
</script>
<%
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs != null) try{rs.close();}catch(SQLException sqle){}
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
- deleteTestForm.jsp 에서 넘어온 아이디와 비밀번호를 getParatmeter() 로 받는다
- 사용자가 입력한 비밀번호값이 DB 의 비밀번호와 일치하는지 확인하기 위해 DB 연결을 하고 select 문 실행
- id 값을 통해 DB 에 저장된 id 와 passwd 를 가져옴
- if(rs.next()) 는 'id 값이 있으면' 이란 의미
- hidden 으로 넘어온 id 와 DB 의 id 가 일치하고, 사용자가 삭제폼에서 입력한 비번과 DB 의 비번이 일치하면 delet 수행
- 자바를 쓰지 않고 JSP 만으로 오라클 연동하는 처음이자 마지막 예제다
- 그 다음부터는 DAO 클래스로 DB 연동을 처리한다 + DTO 클래스
DAO 클래스
- DB 연동을 처리해주는 클래스가 DAO 클래스이다
- 메소드만으로 구성되어있음
- JSP 파일에서 DAO의 메소드를 호출해서 insert / update / delete 한다
- select 를 DAO 에서 한 후, 검색한 결과를 JSP 파일로 돌려준다
- Model 1, Model 2, Spring 에서 모두 사용
DAO 클래스로 DB 연동
+ DTO(자바빈) 클래스와도 연동
- 이미 만들어진 JSP 파일에다가 DAO, DTO 를 추가하여 만들고 연동하기
- 이미 만들어진 JSP 파일들
- 이걸로 DAO, DTO 연습 후 완성된 프로그램으로 넘어갈 것
DAO 클래스로 DB 연동 예제 1
1. 실습 준비 및 테이블 생성
+ DAO / DTO 클래스가 없어서 생기는 오류
- JSP 파일들은 다 있고 필요한 아래의 테이블을 먼저 생성해야함
create table member2(
id varchar2(12) primary key,
passwd varchar2(12) not null,
name varchar2(10) not null,
jumin1 varchar2(6) not null,
jumin2 varchar2(7) not null,
email varchar2(30),
blog varchar2(50),
reg_date date not null);
- sql/myoracle.sql 에서 테이블 생성 완료
- 이제 DAO, DTO 클래스 만들 것
- DAO / DTO 클래스 이 패키지로 만들기
2. DTO / DAO 클래스 만들기
JavaBeanMember.register - LogonDataBean.java (DTO)
JavaBeanMember.register - LogonDBBean.java (DAO)
- JavaBeanMember.register 패키지 먼저 생성 후 class 자바 파일 만들기
3. DTO 클래스 만들기
- 오라클의 자료형을 자바의 자료형으로 가져온다
- 접근제어자는 private, varchar2 는 String, number 는 int 로, date 는 Date로 변경
- getter setter 메소드 추가
- DTO 클래스 완성
- LogonDataBean.java
// DTO (Data Transfer Object)
package JavaBeanMember.register;
import java.util.Date;
public class LogonDataBean {
private String id; // 프로퍼티
private String passwd;
private String name;
private String jumin1;
private String jumin2;
private String email;
private String blog;
private Date reg_date;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJumin1() {
return jumin1;
}
public void setJumin1(String jumin1) {
this.jumin1 = jumin1;
}
public String getJumin2() {
return jumin2;
}
public void setJumin2(String jumin2) {
this.jumin2 = jumin2;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getBlog() {
return blog;
}
public void setBlog(String blog) {
this.blog = blog;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
}
4. DAO 클래스 만들기
- DB 연동은 이제 모두 DAO 클래스에서 처리
- 메소드만으로 구성
- JSP 에서 DAO 의 메소드를 호출해서 sql 문 실행
- Singleton 사용해서 객체 생성 1번만 수행해서 공유함
- 객체를 생성하자
- static 을 붙여서 공유, 외부에서 접근 못하도록 private 설정, 정적메소드인 getInstance() 를 통해서만 접근 가능
- getInstance() 메소드 만들기
- 이제 이 아래에 메소드를 생성함
- 그 메소드를 JSP 에서 호출 (registerPro.jsp 부분)