Data Provisioning Services for mobile clients

Similar documents
중간고사

PowerPoint Presentation

Data Provisioning Services for mobile clients

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

JAVA Bean & Session - Cookie

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

<4D F736F F F696E74202D203130C0E52EBFA1B7AF20C3B3B8AE205BC8A3C8AF20B8F0B5E55D>

JAVA PROGRAMMING 실습 08.다형성

PHP & ASP

Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint Presentation

Microsoft PowerPoint - 04-UDP Programming.ppt

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

PowerPoint Presentation

제11장 프로세스와 쓰레드

04장

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

JAVA PROGRAMMING 실습 09. 예외처리

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Microsoft PowerPoint - aj-lecture4.ppt [호환 모드]

Microsoft PowerPoint - 2강

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Data Provisioning Services for mobile clients

PowerPoint 프레젠테이션

Data Provisioning Services for mobile clients

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Network Programming

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

14-Servlet

Design Issues

Data Provisioning Services for mobile clients

파일로출력하는작업순서 1. 파일을연다. 2. 파일로자료를쓴다. 3. 파일을닫는다. 파일입출력에사용되는클래스들. FileInputStream, FileOutputStream, FileReader, FileWriter 문자단위로입출력하기 사람이읽을수있는문자로만구성된파일을읽

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

rmi_박준용_final.PDF

PowerPoint 프레젠테이션

PowerPoint Template

교육자료

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

PHP & ASP

PowerPoint 프레젠테이션

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

뇌를 자극하는 JSP & Servlet 슬라이드

JavaGeneralProgramming.PDF

No Slide Title

PowerPoint Presentation

Cluster management software

MasoJava4_Dongbin.PDF

05-class.key

chapter6.doc

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - Java7.pptx

Cookie Spoofing.hwp

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

어댑터뷰

하둡을이용한파일분산시스템 보안관리체제구현


Cluster management software

PowerPoint Presentation

PowerPoint Presentation

자바-11장N'1-502

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

12-file.key

Microsoft PowerPoint - 웹프로그래밍_ ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

(Microsoft PowerPoint - hci2-lecture12 [\310\243\310\257 \270\360\265\345])

JAVA PROGRAMMING 실습 02. 표준 입출력

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Chap12

gnu-lee-oop-kor-lec06-3-chap7

쉽게 풀어쓴 C 프로그래밍

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

17장 클래스와 메소드

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft Word - EEL2 Lab4.docx

신림프로그래머_클린코드.key

Microsoft PowerPoint - chap06-2pointer.ppt

int total = 0; for( int i=1; i<=5; i++ ) { for( int j=1; j<=i; i++ ) { total ++; System.out.println( total ); 대구분 : 객체와 Class 소구분 : 객체생성과사용 / Class 선언

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

JUNIT 실습및발표

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint 장강의노트.ppt

Transcription:

12 장. JSP 에서자바빈활용

자바빈 (JavaBean) 1. 자바빈 (JavaBean) 객체단위의관련데이터를저장및관리하는목적을지닌 Java 객체 데이터베이스와 JSP의중간에서데이터관리의매개체역할을한다. 자바빈활용의장점 데이터를객체단위로한데묶어서관리하는데에많은편리성이있다. 전체적으로 JSP 소스가깔끔해지는효과 자바빈구성요소 생성자 값을저장하는프로퍼티 (Property) 프로퍼티값을읽어올때사용되는멤버메소드 getter 메소드 프로퍼티값을저장할때사용되는멤버메소드 setter 메소드 2/44

1. 자바빈 (JavaBean) 자바빈의일반적인구현형태 3/44 public class JavaBeanClassName implements java.io.serializable { /* 값을저장하는프로퍼티 */ private String id; 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;

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

자바빈코딩방법 getter 와 setter 메소드설정 1. 자바빈 (JavaBean) 예를들어, 프로퍼티의이름이 width이고타입이 int라고할때 public void setwidth(int width); public int getwidth(); 다소규약에서벗어난코딩방법 private int mywidth = 0; public void setwidth(int width) { mywidth = width; public int getwidth() { return mywidth; 위코드에서자바빈객체를활용하는외부에서간주하게되는프로퍼티이름은 mywidth 가아니라 width 가된다. 5/44

자바빈코딩방법 읽기전용프로퍼티와프로퍼티의실체 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; 1. 자바빈 (JavaBean) 프로퍼티는 private 으로지정된변수에의해만들어지는것이아니라외부에서접근이가능하도록 public 으로지정된메소드에의하여정의되는것이다. 6/44

1. 자바빈 (JavaBean) 자바빈코딩방법 boolean 타입의프로퍼티 private boolean good; public boolean isgood() { return end; public void setgood(boolean good) { this.good = good; 7/44

1. 자바빈 (JavaBean) 자바빈코딩방법 배열프로퍼티 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; 8/44 메소드오버로딩 (Overloading) 메소드이름이같지만 (getgrade, setgrade) 파라미터형태가틀리게중복하여메소드를정의하는것

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

10/44 자바빈생성하기 01 package thinkonweb.bean; 02 03 04 import java.util.date; import java.io.serializable; 05 06 07 08 09 10 11 public class Member implements Serializable{ private String id; private String name; private String password; private String email; private Date registerdate; 12 13 14 15 public String getid() { return id; //getter methods 16 17 18 19 20 21 22 public String getname() { return nickname; public String getpassword() { return password; public String getemail() { 23 24 return email; 2. 자바빈의활용 [ 예제 12.1] jspbook\web-inf\java_sources\member.java

자바빈생성하기 25 26 27 public Date getregisterdate() { return registerdate; 28 29 public void setid(string id) { //setter methods 30 31 this.id = id; 32 33 34 35 36 37 38 39 40 41 42 43 public void setname(string name) { this.name = name; public void setpassword(string passwordl) { this.password = password; public void setemail(string email) { this.email = email; public void setregisterdate(date registerdate) { this.registerdate = registerdate; 44 2. 자바빈의활용 [ 예제 12.1] jspbook\web-inf\java_sources\member.java 11/44

자바빈생성및사용을위한액션태그 2. 자바빈의활용 회원정보데이터들을자바빈객체에담아서그객체로부터값을꺼내와보여주는일반적인 JSP 코드 <% Member member = new Member(); member.setid(request.getparameter("id")); member.setname(request.getparameter("name"));... %> 이름 - <%= member.getname() %>, 아이디 - <%= member.getid()%> 위와같이자바빈객체에데이터를할당하는작업및데이터를얻어오는작업을일일이 Java 코딩으로해결하는것이다소귀찮을수있다. 12/44

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

2. 자바빈의활용 자바빈생성및사용을위한액션태그 <jsp:usebean> 액션태그 코딩예 <jsp:usebean id="member" class="thinkonweb.bean.member" scope="request"/> 주의할점 id 속성에서지정한이름에대한객체가해당영역에이미저장이되어있다면객체를새로생성하지않고이미저장되어있는기존객체를그대로사용한다 위의코드가내부적으로수행되는모습 thinkonweb.bean.member member = (thinkonweb.bean.member)request.getattribute("member"); if ( member == null ) { member = new thinkonweb.bean.member(); request.setattribute("member", member); 14/44

자바빈생성및사용을위한액션태그 <jsp:usebean> 액션태그사용예제 2. 자바빈의활용 [ 예제 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" /> 15/44

01 02 03 04 05 06 07 08 09 10 11 12 자바빈생성및사용을위한액션태그 <jsp:usebean> 액션태그사용예제 ( 계속 ) 2. 자바빈의활용 [ 예제 12.2-2] jspbook\ch12\usebean.jsp <%@ 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> 16/44

자바빈생성및사용을위한액션태그 <jsp:usebean> 액션태그사용예제 ( 계속 ) makebean.jsp 실행없이 usebean.jsp 를곧바로실행한모습 2. 자바빈의활용 member 객체를새롭게생성함 17/44

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

자바빈생성및사용을위한액션태그 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> 19/44

자바빈프로퍼티접근을위한액션태그 <jsp:setproperty> 액션태그 이미생성되어있는자바빈객체의프로퍼티값을지정한다. 용법 2. 자바빈의활용 <jsp:setproperty name="[ 자바빈이름 ]" property="[ 프로퍼티이름 ]" value="[ 값 ]" /> 사용예 name - 프로퍼티의값을지정할자바빈객체이름. <jsp:usebean> 액션태그의 id 속성에서지정한값과동일한값이지정된다. 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=" 홍길동 /> 20/44

01 02 03 04 05 06 07 08 09 10 자바빈프로퍼티접근을위한액션태그 2. 자바빈의활용 <jsp:setproperty> 액션태그의 value 속성대신 param 속성사용 request 기본객체가간직하고있는파라미터값을자바빈객체의프로퍼티값으로지정할때사용 <jsp:setproperty> 액션태그의 param 속성사용예제 11 </body> 12 21/44 </html> <jsp:setproperty name="member" property="id" param="id"/> <%@ 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> [ 예제 12.4-1] jspbook\ch12\simpleform.jsp

01 02 03 04 05 06 07 08 09 10 11 12 자바빈프로퍼티접근을위한액션태그 <jsp:setproperty> 액션태그의 param 속성사용예제 <%@ 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> 2. 자바빈의활용 [ 예제 12.4-2] jspbook\ch12\parameterbean.jsp 22/44

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

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

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

자바빈프로퍼티접근을위한액션태그 <jsp:getproperty> 액션태그사용예제 2. 자바빈의활용 [ 예제 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> 26/44

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

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

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

객체직렬화 (Serialization) 3. 객체직렬화와자바빈저장 소프트웨어객체를재구조화하여서스트림 (Stream) 을통하여읽고쓸수있도록만드는과정 데이터베이스의사용없이객체를하드디스크에저장하거나네트워크로전송하기위한기법 객체지향적데이터관리 객체직렬화의이용 회원관리프로그램에서회원에대한정보를자바빈객체에담아내면그정보를데이터베이스에저장할필요가있다. 데이터베이스에대한학습을하지못한상태에서는객체직렬화를이용하여회원정보를영구적으로저장가능하다. 30/44 제 1 장

3. 객체직렬화와자바빈저장 객체직렬화 (Serialization) 와관련된클래스와메소드 객체를읽고쓰는스트림을지원하는 java.io 패키지에있는클래스 public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants 위클래스로부터생성자메소드를통하여객체를읽고쓸수있는스트림객체를만들면그객체에게다음의두메소드를호출하여원하는일을할수있다. public final void writeobject(object o)throws IOException public final Object readobject() throws OptionalDataException, ClassNotFoundException, IOException 31/44

3. 객체직렬화와자바빈저장 객체직렬화 (Serialization) 를사용한객체저장코드 try { Point p = new Point(1, 2); FileOutputStream fos = new FileOutputStream("point.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeobject(p); oos.close(); catch(exception e) { System.out.println(e); 32/44

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); 33/44

3. 객체직렬화와자바빈저장 객체직렬화 (Serialization) 를사용하기위한자바빈객체구성 자바빈구현시에반드시 java.io.serializable 이라는인터페이스를구현 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; java.io.serializable 인터페이스를구현하는클래스가반드시구현해야할메소드는무엇? " 아무것도없다 " java.io.serializable 인터페이스는일종의마크 (Mark) 와같은역할을하는것으로서이것을구현하는클래스는직렬화기능을활용할수있다는마크를붙여주는일을담당 34/44

회원가입과회원정보저장기능구현 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> 35/44

회원가입과회원정보저장기능구현 3. 객체직렬화와자바빈저장 [ 예제 12.6-1] jspbook\ch12\registerform2.jsp 14 15 16 17 18 19 202 1 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> </tr> <tr> <td colspan="4" align="center"> <input type="submit" value=" 회원가입 "> </td> </tr> </table> </form> </body> </html> 36/44

회원가입과회원정보저장기능구현 3. 객체직렬화와자바빈저장 자바빈객체를저장할폴더생성 : ch12 폴더밑의 member 폴더 37/44

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

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

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

3. 객체직렬화와자바빈저장 로그인기능구현 01 02 03 04 05 06 07 08 09 [ 예제 12.6-3] jspbook\ch12\loginmember.jsp <%@ 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> 41/44

20 42/44 21 로그인기능구현 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 <%@ 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(); 19 if (id.equals(storedid) && pw.equals(storedpw)) { // 아이디와패스워드모두일치 %> session.setattribute("success_login", id);

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

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