12장. JSP에서 자바빈 활용 제12장.

Slides:



Advertisements
Similar presentations
XHTML Basic 제 13 장 1. XHTML Basic의 개요 2. XHTML Basic 기본 문법 3. 표 만들기
Advertisements

- SW_Desing Study Group -
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
11 JSTL 사용하기.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
Internet Computing KUT Youn-Hee Han
7. JavaBeans 프로그래밍 JavaBeans JavaBeans 만들기 빈을 이용한 회원가입 양식 작성하기 빈 작성
Java Presentation 중간 시험2 풀이
12 커스텀 액션.
2 서블릿의 기초.
3장. 웹 어플리케이션과 JSP 및 Servlet의 이해 제3장.
1. JSP(Java Server Pages) 소개
9 표준 액션.
9장. 요청 흐름제어와 모듈화 #1: <jsp:forward> 액션태그 사용
10장. 에러 처리 제10장.
JSP 내장 객체 개요 내장 객체 (참조 변수 이름) 자바 클래스 주요 역할
5 익셉션 처리.
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
7. JavaBeans 프로그래밍 JavaBeans JavaBeans 만들기 Bean을 이용한 회원가입 양식 작성하기
Web Server와 DB 연동.
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
APM (Apache+PHP+MySQL)
1. JSP(Java Server Pages) 소개
3 JSP의 기초.
7 JSP의 기초.
Java 12장. 입출력 public class SumTest {
8장 자바 입출력.
4 쿠키와 세션.
Chapter 14. 입출력 스트림.
Java Programming Language (4)
중 간 고 사 (웹프로그래밍)
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
강의 보조자료 & Homework #2 - 로그인과 이미지 카운터 만들기 -
5. JSP의 내장객체1.
[INA240] Web Programming Homework #3 [INA240] Web Programming
JSP와 자바 빈즈 JSP 빈즈 구조를 이해하고 활용한다. useBean 액션 활용법을 익힌다.
JSP 내장 객체 JSP에서 기본으로 사용할 수 있는 내장 객체 종류를 알아본다. 내장 객체별 주요 기능과 메서드를 이해한다.
4. JSP의 스크립트 요소 Script 요소의 이해 선언문(Declaration) Scirptlet 표현식 주석
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
Cookie 와 Session.
Web Socket.
BIZSIREN 실명확인서비스 개발 가이드 서울신용평가정보㈜ 신용조회부 (TEL , FAX )
입출력 CHAPTER 12 Section 1 java.io 패키지 개요 Section 2 파일과 디렉터리
HTML.
10장. 자바빈(JavaBean) 이 장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다. 하나의 JSP페이지 안에 디자인부와 로직부가 혼재하게 되면 프로그램의 협업과 유지보수가 어렵다. 자바빈은 로직을.
이장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
CGI (Common Gateway Interface)
JSP Programming with a Workbook
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
상품등록 방식 비교 년 4월 23일 (주)에이치케이넷츠.
JSP문법 JSP 기본 구조를 이해한다. 지시어, 스크립트릿 JSP 액션 태그 사용법을 익힌다. 한빛미디어(주)
표현언어와 커스텀태그 표현 언어의 개념을 이해한다. JSP1.2 커스텀 태그 개발 방법을 익힌다.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
CGI (Common Gateway Interface)
컴퓨터공학실습(I) 3주 인공지능연구실.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
Spring Security 2015 Web Service Computing.
세션 (Session) Yang-Sae Moon Department of Computer Science
JSP Expression Language
JSP 빈즈 1.JSP 빈즈? JSP와 연동을 위해 만들어진 컴포넌트 클래스를 말한다. JSP 빈즈는 컨테이너에 위치하며, 데이터 처리와 공용화된 기능을 제공하기 때문에 빈즈를 잘 활용하면 프로그램의 중복을 줄이고 좀더 원할한 유지보수가 가능한다. 물론 , 모든 JSP를.
JSP Programming with a Workbook
제 11 장 자바빈즈를 이용한 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
1. 객체-지향 프로그래밍.
Presentation transcript:

12장. JSP에서 자바빈 활용 제12장

1. 자바빈 (JavaBean) 자바빈(JavaBean) 자바빈 활용의 장점 자바빈 구성 요소 또는, JSP와 데이터베이스의 중간에서 데이터 관리의 매개체 역할을 한다. 자바빈 활용의 장점 데이터를 객체 단위로 한데 묶어서 관리하는 데에 많은 편리성이 있다. 메소드로 데이터를 접근: Information Hiding 클래스로부터 객체를 만들고 각 객체별 메소드로 저장된 데이터들을 관리 자바빈 구성 요소 생성자 데이터를 저장하는 프로퍼티(property) 프로퍼티 (데이터) 값을 읽어 올 때 사용되는 멤버 메소드 getter 메소드 프로퍼티(데이터) 값을 저장할 때 사용되는 멤버 메소드 setter 메소드 제12장

1. 자바빈 (JavaBean) 자바빈의 일반적인 구현 형태 제12장 public class JavaBeanClassName implements java.io.Serializable { /* 자체 데이터를 저장하는 프로퍼티 */ // byte stream으로 하드디스크에 저장하고, private String id; // 네트워크로 전송 가능한 객체(Serializable) private String name; /* JavaBeanClassName의 기본 생성자 */ public JavaBeanClassName() { } /* 프로퍼티의 값을 읽어 오는 멤버메소드: getter */ public String getId() { return id; public String getName() { return name; /* 프로퍼티의 값을 변경하는 멤버메소드: setter */ public void setId(String id) { this.id = id; public void setName(String name) { this.name = name; 제12장

1. 자바빈 (JavaBean) 자바빈 규약 (반드시 모든 사항을 지켜야 하는 것은 아니다) 클래스는 java.io.Serializable을 구현(implement)해야 한다. 2) 클래스 내부에 기본 생성자가 정의되어야 한다. 3) 클래스는 public, 프로퍼티는 private, 메소드는 public 접근 제어자를 붙인다. 4) 프로퍼티에 접근할 수 있는 getter 메소드와 setter 메소드가 정의되어야 하며 메소드의 이름은 다음과 같은 규칙을 따라야 한다. - 프로퍼티와 메소드의 이름은 소문자로 시작한다. - 메소드의 이름은 get 또는 set으로 시작한다. - get 이나 set 뒤에 따라오는 단어는 프로퍼티명과 일치해야 하며 대문자로 시작해야 한다. 5) 프로퍼티 타입이 boolean일 경우 getter 메소드의 이름은 get 대신에 is로서 시작한다. 제12장

1. 자바빈 (JavaBean) 자바빈 코딩 방법 getter와 setter 메소드 설정 예를 들어, 프로퍼티의 이름이 width이고 타입이 int라고 할 때 다소 규약에서 벗어난 코딩 방법도 허용된다. 위 코드에서 자바빈 객체를 활용하는 외부에서 간주하게 되는 프로퍼티 이름은 myWidth가 아니라 width가 된다. (메소드에서 정의된 이름) 규약에 있는 각 사항들은 추천사항이며 꼭 지켜야하는 엄격한 룰은 아니다. public void setWidth(int width); public int getWidth(); private int myWidth = 0; public void setWidth(int width) { myWidth = width; } public int getWidth() { return myWidth; 제12장

1. 자바빈 (JavaBean) 자바빈 코딩 방법 읽기 전용 프로퍼티와 프로퍼티의 실체 fahrenheit 프로퍼티는 그 실체가 class에서 명시적으로 정의되어 있지 않다. getFahrenheit() 메소드를 제공함으로써 fahrenheit 프로퍼티를 제공함. 즉, 프로퍼티는 private으로 지정된 변수에 의해 만들어지는 것이 아니라 외부에서 접근이 가능하도록 public으로 지정된 메소드에 의하여 정의됨 public class Temperature { private double celsius; public double getCelsius() { return celsius; } public void setCelsius(double celsius) { this.celsius = celsius; // fahrenheit 프로퍼티는 읽기 전용 프로퍼티 public double getFahrenheit() { return celsius*9.0/5.0+32.0; 제12장

1. 자바빈 (JavaBean) 자바빈 코딩 방법 boolean 타입의 프로퍼티 private boolean good; public boolean isGood() { return end; } public void setGood(boolean good) { this.good = good; 제12장

1. 자바빈 (JavaBean) 자바빈 코딩 방법 배열 데이터를 저장하는 프로퍼티 배열 전체가 아닌 배열의 각 원소를 접근할 수 있는 메소드 들도 추가로 제공 가능 -> 메소드 오버로딩 (Overloading) 메소드 이름이 같지만 (getGrade, setGrade) 파라미터 형태가 틀리게 중복하여 메소드를 정의하는 것 private int[] grade; public int[] getGrade() { return grade; } public void setGrade(int[] grade) { this.grade = grade; public int getGrade(int index) { return grade[index]; } public void setGrade(int index, int value) { grade[index] = value; 제12장

각 프로퍼티 별로 getter/setter 2. 자바빈의 활용 자바빈 생성하기 예제로서 사용할 자바빈 클래스는 이름이 Member이며 다음 표와 같은 데이터들을 저장하는 프로퍼티들을 갖는다. 프로퍼티 이름 값 타입 읽기/쓰기 여부 id String 읽기/쓰기 각 프로퍼티 별로 getter/setter 메소드 존재 name password email registerDate java.util.Date 제12장

2. 자바빈의 활용 자바빈 생성하기 [예제 12.1] jspbook\WEB-INF\java_sources\Member.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package thinkonweb.bean; import java.util.Date; import java.io.Serializable; public class Member implements Serializable{ // 하드디스크에 저장, 네트워크로 전송 가능 private String id; (serializable) private String name; private String password; private String email; private Date registerDate; public String getId() { //getter methods return id; } public String getName() { return name; public String getPassword() { return password; public String getEmail() { return email; 제12장

2. 자바빈의 활용 자바빈 생성하기 [예제 12.1] jspbook\WEB-INF\java_sources\Member.java 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public Date getRegisterDate() { return registerDate; } public void setId(String id) { //setter methods this.id = id; public void setName(String name) { this.name = name; public void setPassword(String password) { this.password = password; public void setEmail(String email) { this.email = email; public void setRegisterDate(Date registerDate) { this.registerDate = registerDate; 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 서버가 가진 데이터를 출력 회원 정보 데이터들을 자바빈 객체에 담아서 그 객체로부터 값을 꺼내와 보여주는 일반적인 JSP 코드 데이터들을 객체의 멤버 메소드들을 통하여 접근: 일관성 제공 (by information hiding) 그러나 위와 같이 자바빈 객체에 데이터를 할당하는 작업 및 데이터를 얻어오는 작업을 일일이 Java 코딩으로 해결하는 것이 다소 귀찮을 수 있다. 코딩 대신 태그: 데이터 할당과 접근을 위한 액션 태그들을 별도로 제공 <% Member member = new Member(); member.setName(request.getParameter("name")); member.setId(request.getParameter("id")); .... %> 이름 - <%= member.getName() %>, 아이디 - <%= member.getId()%> 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 1. <jsp:useBean> 액션 태그 자바빈 관련 액션 태그 <jsp:useBean> <jsp:setProperty> <jsp:getProperty> 1. <jsp:useBean> 액션 태그 JSP 페이지에서 사용할 자바빈 객체를 생성해 주는 역할을 한다. 용법 id - 새롭게 생성하는 자바빈 객체의 이름을 명시한다. (소문자) class - 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 명시한다. scope - 자바빈 객체가 속성으로서 저장될 영역(Scope)을 지정한다. request, session, application, page 중 하나를 값으로 갖는다. 기본 값은 page이다. (chap 8: JSP 기본 객체 참조) <jsp:useBean id="[자바빈 이름]“ class="[자바빈 클래스 이름]” scope="[범위]“/> 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 <jsp:useBean> 액션 태그 코딩 예 Member 클래스의 자바빈 객체를 생성하여 변수 member에 할당하고 request 기본객체의 속성으로서 위 객체를 저장함 주의할 점 id 속성에서 지정한 이름에 대한 객체가 해당 영역에 이미 저장이 되어 있다면 객체를 새로 생성하지 않고 이미 저장되어 있는 기존 객체를 그대로 사용한다 i.e., useBean (not createBean) 위의 코드가 내부적으로 변환되는 모습 <jsp:useBean id="member" class="thinkonweb.bean.Member" scope="request"/> thinkonweb.bean.Member member = (thinkonweb.bean.Member) request.getAttribute("member"); if ( member == null ) { // 없으면 새로 객체를 새로 생성 member = new thinkonweb.bean.Member(); request.setAttribute("member", member); } 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 <jsp:useBean> 액션 태그 사용 예제 <jsp:useBean>을 사용하여 Member 객체를 생성한 후 <jsp:forward>를 사용하여 다른 페이지로 흐름을 이동 시킴. (forward되어도 처음 URL은 그대로) -> Member.java가 컴파일되어서 Member.class가 지정된 위치에 있어야 함 [예제 12.2-1] jspbook\ch12\makeBean.jsp 01 02 03 04 05 06 07 08 09 10 11 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="java.util.Date" %> <jsp:useBean id="member" class="thinkonweb.bean.Member" scope="request" /> <% member.setId("200910231"); member.setName("홍길동"); member.setPassword("112233"); member.setEmail("hong@aaa.bbb.com"); member.setRegisterDate(new Date()); %> <jsp:forward page="useBean.jsp" /> 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 <jsp:useBean> 액션 태그 사용 예제(계속) [예제 12.2-2] jspbook\ch12\useBean.jsp 01 02 03 04 05 06 07 08 09 10 11 12 <%@ page contentType="text/html;charset=utf-8" %> <jsp:useBean id="member" class="thinkonweb.bean.Member" scope="request" /> <html> <head><title>자바빈 객체 사용</title></head> <body> <%= member.getName() %> (<%= member.getId() %>) 회원님 안녕하세요.<br/> 당신의 이메일은 <%= member.getEmail() %>입니다. <br/> 당신의 가입 날짜는 <%= member.getRegisterDate() %>입니다. </body> </html> 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 <jsp:useBean> 액션 태그 사용 예제(계속) makeBean.jsp 실행 없이 useBean.jsp를 곧바로 실행한 모습 request 기본 객체에 member 객체가 없으므로 새롭게 생성하였으나, 각 프로퍼티 값을 설정하여 주는 setter 메소드들을 수행하지 않았기 때문에 null 값들이 출력 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 <jsp:useBean> 액션 태그에서 class 속성 대신 type 속성 사용 지정한 영역에 이미 id에 지정한 이름의 객체가 존재한다고 가정하는 것 만약 존재하지 않을 경우 새로 thinkonweb.bean.Member 객체를 생성하지 않고 에러를 발생시킨다. 위의 코드가 내부적으로 수행되는 모습 <jsp:useBean id="member" type="thinkonweb.bean.Member" scope="request"/> thinkonweb.bean.Member member = (thinkonweb.bean.Member)request.getAttribute("member"); if ( member == null ) { // HTTP 응답 코드 500 에러를 발생! } 제12장

2. 자바빈의 활용 자바빈 생성 및 사용을 위한 액션 태그 <jsp:useBean> 액션 태그에서 class 속성 대신 type 속성 사용 예제 [예제 12.3] jspbook\ch12\useBean2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 <%@ page contentType="text/html;charset=utf-8" %> <jsp:useBean id="member" type="thinkonweb.bean.Member" scope="request" /> <html> <head><title>자바빈 객체 사용</title></head> <body> <%= member.getName() %> (<%= member.getId() %>) 회원님 안녕하세요.<br/> 당신의 이메일은 <%= member.getEmail() %>입니다. <br/> 당신의 가입 날짜는 <%= member.getRegisterDate() %>입니다. </body> </html> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 2. <jsp:setProperty> 액션 태그 이미 생성되어 있는 자바빈 객체의 프로퍼티 값을 지정한다. 용법 name - 프로퍼티의 값을 지정할 자바빈 객체 이름. <jsp:useBean> 액션 태그의 id 속성에서 지정한 값과 동일한 값이 지정된다. property - 값을 지정할 프로퍼티 이름 value - 프로퍼티 값. 표현식 사용이 가능하다. 사용 예 <jsp:setProperty name="[자바빈 이름]" property="[프로퍼티 이름]" value="[값]" /> <jsp:useBean id="member" class="thinkonweb.bean.Member" scope="request" /> <jsp:setProperty name="member" property="id" value="101010“ /> <jsp:setProperty name="member" property="name" value="홍길동“ /> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:setProperty> 액션 태그의 value 속성 대신 param 속성 사용 request 기본 객체가 간직하고 있는 파라미터 값을 자바빈 객체의 프로퍼티 값으로 지정할 때 사용 (e.g., Form 사용시 ‘id’ 값) <jsp:setProperty> 액션 태그의 param 속성 사용 예제 <jsp:setProperty name="member" property="id" param="id“ /> [예제 12.4-1] jspbook\ch12\simpleForm.jsp 01 02 03 04 05 06 07 08 09 10 11 12 <%@ page contentType="text/html;charset=utf-8" %> <html> <head><title>간단한 폼</title></head> <body> <form action="parameterBean.jsp" method="get"> 아이디: <input type="text" name="id“ ><br/> 이름: <input type="text" name="name“><br/> <input type="submit" value="전송"> </form> </body> </html> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:setProperty> 액션 태그의 param 속성 사용 예제 [예제 12.4-2] jspbook\ch12\parameterBean.jsp 01 02 03 04 05 06 07 08 09 10 11 12 <%@ page contentType="text/html;charset=utf-8" %> <% request.setCharacterEncoding("utf-8"); %> <jsp:useBean id="member" class="thinkonweb.bean.Member" /> <jsp:setProperty name="member" property="id" param="id" /> <jsp:setProperty name="member" property="name" param="name" /> 자바빈 처리 완료<br/> 아이디 : <%= member.getId() %><br/> 이름 : <%= member.getName() %> </body> </html> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:setProperty> 액션 태그의 param 속성 사용 예제 [Note] 문자열 외의 타입을 지닌 프로퍼티 처리 만약 자바빈 프로퍼티 타입이 문자열이 아닌 int라고 가정해 보자. 이 경우 파라미터로 입력된 값이 "10"이라는 문자열이라면 이것은 int 타입으로 자동으로 변환되어 정수인 10이 저장된다. 즉, <jsp:setProperty> 액션 태그는 프로퍼티 타입에 따라서 알맞게 그 값을 처리하는 기능을 지닌다. double 또는 float도 마찬가지이다.   제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 만약 사용자 입력 폼에서 입력받는 파라미터 데이터가 많고 이에 관한 자바빈 객체 프로퍼티도 같은 이름으로 모두 설정되어 있을 때 코딩 방법 <jsp:setProperty> 액션 태그의 property 속성 값으로 “*”을 사용한 축약된 코딩 방법 유의할 점 각각의 파라미터 이름이 자바빈 객체의 프로퍼티 이름과 대소문자까지 정확하게 같아야 한다. <jsp:useBean id="member" class="thinkonweb.bean.Member" scope="request" /> <jsp:setProperty name="member" property="id" param="id"/> <jsp:setProperty name="member" property="password" param="password"/> <jsp:setProperty name="member" property="name" param="name"/> <jsp:setProperty name="member" property="email" param="email"/> <jsp:useBean id="member" class="thinkonweb.bean.Member" scope="request"/> <jsp:setProperty name="member" property="*"/> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 3. <jsp:getProperty> 액션 태그 자바빈 객체의 프로퍼티 값을 가지고 올 때 사용 용법 name - <jsp:useBean> 액션 태그의 id 속성에서 지정한 값과 동일한 값이 지정된다. property - 값을 가져올 프로퍼티 이름 사용 예 위의 코드는 수행된 후 가져온 값을 바로 출력한다. <jsp:getProperty name="[자바빈 이름]" property="[프로퍼티 이름]"/> <jsp:getProperty name="member" property="name"/> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:getProperty> 액션 태그 사용 예제 [예제 12.5-1] jspbook\ch12\registerForm.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 <%@ page contentType="text/html;charset=utf-8" %> <html> <head><title>회원가입 입력 폼</title></head> <body> <form action="<%= request.getContextPath() %>/ch12/register.jsp" method="post"> <table border="1" cellpadding="0" cellspacing="0"> <tr> <td>아이디</td> <td><input type="text" name="id" size="15"></td> <td>비밀번호</td> <td><input type="password" name="password" size="10"></td> </tr> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:getProperty> 액션 태그 사용 예제 (계속) [예제 12.5-1] jspbook\ch12\registerForm.jsp 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <tr> <td>이름</td> <td colspan="3"><input type="text" name="name" size="15"></td> </tr> <td>이메일</td> <td colspan="3"><input type="text" name="email" size="30"></td> <td colspan="4" align="center"> <input type="submit" value="회원가입"> </td> </table> </form> </body> </html> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:getProperty> 액션 태그 사용 예제 (계속) [예제 12.5-2] jspbook\ch12\register.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="java.util.Date" %> <% request.setCharacterEncoding("utf-8"); %> <jsp:useBean id="member" class="thinkonweb.bean.Member" /> <jsp:setProperty name="member" property="*" /> <jsp:setProperty name="member" property="registerDate" value="<%= new Date() %>" /> <html> <head><title>가입 처리</title></head> <body> 회원 가입 처리 완료 <br/> <table width="400" border="1" cellpadding="0" cellspacing="0"> <tr> <td>아이디</td> <td><jsp:getProperty name="member" property="id" /></td> </tr> 제12장

2. 자바빈의 활용 자바빈 프로퍼티 접근을 위한 액션 태그 <jsp:getProperty> 액션 태그 사용 예제 (계속) [예제 12.5-2] jspbook\ch12\register.jsp 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <tr> <td>이름</td> <td><jsp:getProperty name="member" property="name" /></td> </tr> <td>이메일</td> <td><jsp:getProperty name="member" property="email" /></td> <td>가입일시</td> <td><jsp:getProperty name="member" property="registerDate" /></td> </table> </body> </html> 제12장

3. 객체 직렬화와 자바빈 저장 객체 직렬화(Serialization) 객체 직렬화의 이용 소프트웨어 객체를 byte 단위로 I/O 스트림(stream)을 통하여 읽고 쓸 수 있도록 만드는 과정 (java.io.* package) 데이터베이스의 사용 없이 메모리에 있는 객체를 하드디스크에 저장하거나 네트워크로 전송하기 위한 기법 객체의 영속성(persistence): 객체가 자신의 상태를 기록함으로써 다음 기회나 다른 환경에서 재생될 수 있는 능력을 제공 객체 직렬화의 이용 회원 관리 프로그램에서 회원에 대한 정보를 메모리에 있는 자바빈 객체에 담아낸 후 그 정보를 디스크의 데이터베이스에 저장할 필요가 있다. 그러나 데이터베이스를 사용하지 않아도 객체 자체를 직렬화하면 회원 정보를 디스크에 영구적으로 저장/전송 가능하다. 제1장

3. 객체 직렬화와 자바빈 저장 객체 직렬화(Serialization)와 관련된 클래스와 메소드 객체의 입출력 스트림을 지원하는 java.io 패키지에 있는 클래스 직렬화: 객체를 순차적인 바이트로 표현한 데이터 위 클래스로부터 생성자 메소드를 통하여 객체를 디스크에 읽고 쓸 수 있는 스트림 객체를 만들면 그 객체에게 다음의 두 메소드를 호출하여 원하는 일을 할 수 있다. public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants // 객체 Object obj를 write public final void writeObject(Object obj)throws IOException // 객체 Object를 read public final Object readObject() throws OptionalDataException, ClassNotFoundException, IOException 제12장

3. 객체 직렬화와 자바빈 저장 객체 직렬화(Serialization)를 사용한 객체 저장 코드 try { // Point 객체 (http://download.oracle.com/javase/6/docs/api/index.html 참조) Point p = new Point(1, 2); // file을 만든다. FileOutputStream fos = new FileOutputStream("point.ser"); // Point 객체를 file에 byte stream으로 저장한다. ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(p); oos.close(); } catch(Exception e) { System.out.println(e); } 제12장

3. 객체 직렬화와 자바빈 저장 객체 직렬화(Serialization)를 사용한 객체 읽기 코드 try { FileInputStream fis = new FileInputStream("point.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Object o = ois.readObject(); Point p = (Point) o; ois.close(); } catch(Exceptin e) { System.out.println(e); } 제12장

3. 객체 직렬화와 자바빈 저장 객체 직렬화(Serialization)를 사용하기 위한 자바빈 객체 구성 자바빈 구현시에 반드시 java.io.Serializable 이라는 인터페이스를 구현 java.io.Serializable 인터페이스를 구현하는 클래스가 반드시 구현해야 할 메소드는 무엇? "아무것도 없다" java.io.Serializable 인터페이스는 일종의 스펙(specification)와 같은 역할을 하는 것으로서 이것을 구현하는 클래스는 직렬화 기능을 활용할 수 있다. package thinkonweb.bean; import java.util.Date; import java.io.Serializable; public class Member implements Serializable { private String id; private String name; private String password; … } 제12장

3. 객체 직렬화와 자바빈 저장 회원 가입과 회원 정보 저장 기능 구현 [예제 12.6-1] jspbook\ch12\registerForm2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 <%@ page contentType="text/html;charset=utf-8" %> <html> <head><title>회원가입 입력 폼</title></head> <body> <form action="<%= request.getContextPath() %>/ch12/register2.jsp" method="post"> <table border="1" cellpadding="0" cellspacing="0"> <tr> <td>아이디</td> <td><input type="text" name="id" size="15"></td> <td>비밀번호</td> <td><input type="password" name="password" size="10"></td> </tr> 제12장

3. 객체 직렬화와 자바빈 저장 회원 가입과 회원 정보 저장 기능 구현 [예제 12.6-1] jspbook\ch12\registerForm2.jsp 14 15 16 17 18 19 2021 22 23 24 25 26 27 28 29 <tr> <td>이름</td> <td colspan="3"><input type="text" name="name" size="15"></td> </tr> <td>이메일</td> <td colspan="3"><input type="text" name="email" size="30"></td> <td colspan="4" align="center"> <input type="submit" value="회원가입"> </td> </table> </form> </body> </html> 제12장

3. 객체 직렬화와 자바빈 저장 회원 가입과 회원 정보 저장 기능 구현 자바빈 객체를 저장할 폴더: ch12 폴더 밑의 member 폴더 생성함. 각 회원별로 자신의 Id 값을 “member_” 뒤에 붙여서 자바빈 객체가 저장되는 파일명을 지정한다. 따라서 각 회원별 정보는 그 회원의 Id 값이 붙여진 파일에 저장된다. 제12장

3. 객체 직렬화와 자바빈 저장 회원 가입과 회원 정보 저장 기능 구현 [예제 12.6-2] jspbook\ch12\register2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="java.util.Date" %> <%@ page import="java.io.*" %> <% request.setCharacterEncoding("utf-8"); %> <jsp:useBean id="member" class="thinkonweb.bean.Member" /> <jsp:setProperty name="member" property="*" /> <jsp:setProperty name="member" property="registerDate" value="<%= new Date() %>" /> member.setPassword(request.getParameter("password")); String realPath = application.getRealPath("/ch12/member/member_ "+member.getId ()); FileOutputStream fos = new FileOutputStream(realPath); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(member); oos.close(); <html> <head><title>가입 처리</title></head> <body> 회원 가입 처리 완료 <br/> 제12장

3. 객체 직렬화와 자바빈 저장 회원 가입과 회원 정보 저장 기능 구현 [예제 12.6-2] jspbook\ch12\register2.jsp 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 <table width="400" border="1" cellpadding="0" cellspacing="0"> <tr> <td>아이디</td> <td><jsp:getProperty name="member" property="id" /></td> </tr> <td>이름</td> <td><jsp:getProperty name="member" property="name" /></td> <td>이메일</td> <td><jsp:getProperty name="member" property="email" /></td> <td>가입일시</td> <td><jsp:getProperty name="member" property="registerDate" /></td> </table> <a href="loginMember.jsp">로그인</a> </body> </html> 제12장

3. 객체 직렬화와 자바빈 저장 회원 가입과 회원 정보 저장 기능 구현 회원 가입시 마다 member 폴더에 저장된 객체 모습 제12장

3. 객체 직렬화와 자바빈 저장 로그인 기능 구현 로그인 처리를 할 때 직렬화되어 파일로 저장된 객체를 읽어와서 로그인시 입력한 정보와 비교한다. [예제 12.6-3] jspbook\ch12\loginMember.jsp 01 02 03 04 05 06 07 08 09 <%@ page contentType="text/html;charset=utf-8" %> <html> <head><title>로그인</title></head> <body> <form action="loginMemebrProcess.jsp" method="post"> ID : <input type="text" name="id"><br/> Password : <input type="password" name="pw"><br/> <input type="submit" value="전송"> </body> </html> 제12장

3. 객체 직렬화와 자바빈 저장 로그인 기능 구현 [예제 12.6-4] jspbook\ch12\loginMemberProcess.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 - 15 16 17 18 19 20 21 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="thinkonweb.bean.Member" %> <%@ page import="java.io.*" %> <% String storedID = null; String storedPW = null; String id = request.getParameter("id"); String pw = request.getParameter("pw"); try { String realPath = application.getRealPath("/ch12/member/member_"+ id); FileInputStream fis = new FileInputStream(realPath); if (fis != null) { ObjectInputStream ois = new ObjectInputStream(fis); thinkonweb.bean.Member storedMember = (thinkonweb.bean.Member)ois.readObject(); storedID = storedMember.getId(); storedPW = storedMember.getPassword(); ois.close(); } if (id.equals(storedID) && pw.equals(storedPW)) { // 아이디와 패스워드 모두 일치 session.setAttribute("SUCCESS_LOGIN", id); // p.266 session 기본객체 %> 제12장

3. 객체 직렬화와 자바빈 저장 로그인 기능 구현 [예제 12.6-4] jspbook\ch12\loginMemberProcess.jsp 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 <html> <head><title>로그인 처리</title></head> <body> 로그인에 성공했습니다. <br/> </body> </html> <% } else if (id.equals(storedID)) { // 패스워드 불일치 %> <script> alert("패스워드가 다릅니다."); history.go(-1); // 바로 전 page로 backward </script> } else { //아이디 불일치 (아이디가 다른 경우 패스워드는 일치 유무 검사 하지 않음) alert("일치하는 ID의 회원정보가 없습니다."); history.go(-1); 제12장

3. 객체 직렬화와 자바빈 저장 로그인 기능 구현 [예제 12.6-4] jspbook\ch12\loginMemberProcess.jsp 42 43 44 45 46 47 48 49 50 <% } } catch (Exception e) { %> <script> alert("일치하는 ID의 회원정보가 없습니다."); history.go(-1); </script> <% } %> 제12장