모바일 Programming
- 모바일 환경 및 응용
모바일 모바일 Programming Programming
- - 모바일 모바일 환경 환경 및 및 응용 응용
2009 2009 년 년 2 2 학기 학기 숙명여자대학교 숙명여자대학교
윤용익 윤용익
Yiyoon@sookmyung.ac.kr
Yiyoon@sookmyung.ac.kr
목 목 차 차
▶ 1부 이동통신의 소개
▶ 2부 무선 인터넷 서비스 – 모바일 환경 소개
▶ 3부 WML/WAP 소개
▶ WIPI 소개
▶ 4부 Java 모바일 프로그래밍 소개
– J2ME using CLDC and MID profile
▶
5부 J2ME 기반 모바일 자바 Network 프로그래밍
GCF (Generic Connection Framework)
GCF GCF (Generic Connection Framework) (Generic Connection Framework)
Get Get 방식 방식
1.
GET 방식의 경우 넘겨주는 값은 주소 줄에 추가됩니다.
2.
GET을 통한 값의 전달은 주소 줄을 타고 전달이 됩니다.
3.
비밀번호 같은 중요한 값들은 노출되기 쉽고, 항목이 많
은 form 양식은 GET방식으로 처리하지 않을 수 밖에
없습니다.
Post
Post 방식 방식
▶
POST 방식은 값의 전달경로는 header 부분입니다.
▶
getContentLength() 메소드를 통해서 전달되는 값의 Byte 크기를 알 수 있습니다.
▶
이 때 parameter 이름과 값이 = 을 사이에 두고, 항목과 항목은 & 로 구분된 문자열로 Header 를 통해서 전달이 됩니다.
▶
주소줄에 GET 방식의 자국을 남긴채 POST 폼을 사용하 면 주소줄의 파라메터도 전달이 됩니다.
▶
두번째 입력창에 okjsppost 를 입력하고 전송하면 아래
그림과 같이 나옵니다.
Introduction Introduction
1. GCF 소개
2. MIDP HTTPConnection 프로그래밍 3. MIDP HTTPConnection 상태 유지
4. MIDP StreamConnection 프로그래밍
5. MIDP DatagramConnection 프로그래밍
GCF GCF 소개 소개 (1) (1)
• J2SE, J2EE 환경과 J2ME 환경차이
- J2SE와 J2EE의 입출력과 네트워크의 라이브러리를 사용하기에는
무리가 따른다. 이러한 입출력과 네트워크에 대한 문제는 GCF를 정
의 함으로써 해결이 가능.
GCF GCF 소개 소개 (2) (2)
• J2SE, J2EE 플랫폼의 java.io, java.net 패키지를 사용할 수 없음.
• GCF 개념
- 가능한 넓은 범위의 휴대 장치를 지원하기 위해 입출력과 네트워크 를 추상화하고, 실제 구현은 각 장치 제조업체가 하도록 설계
• GCF 설계 목적
- 서로 다른 형태의 입출력 형태를 일관성 있게 지원 - 서로 다른 형태의 프로토콜을 일관성 있게 지원 - 어플리케이션 이식성 향상
- 표준 자바 클래스 라이브러리와 상위 호환 - 더 작은 메모리 풋프린트를 가짐
GCF GCF 소개 소개 (3) (3)
• GCF 구조도
MIDP Connection
MIDP Connection 생성 생성 (1) (1)
• connection은 일관성을 유지하기 위해 Connector class의 open 메 소드 하나를 사용하여 모든 Connection을 생성
• open 메소드 정의
- static Connection open (String name)
MIDP Connection
MIDP Connection 생성 생성 (2) (2)
•
J2ME CLDC/MIDP에서 Connection을 생성하고 데이터를 주고 받는 절차open() 메소드를 이용해 Connection을 연다.
Connection을 이용해 InputStream 또는 OutputStream을 만든다.
데이터를 송신하거나 수신한다.
Connection과 Input/Output Stream을 반드시 닫는다.
MIDP Connection
MIDP Connection 생성 생성 (3) (3)
1. Connection 열기
HttpConnection c = (HttpConnection)
Connector.open( "http://aaa.bbb.ccc:80") StreamConnection c = (StreamConnection)
Connector.open("socket://aaa.bbb.ccc:1234") DatagramConnection c = (DatagramConnection)
Connector.open(“datagram://aaa.bbb.ccc:1234)
2. InputStream or OutputStream 만듬
DataInputStream dis = c.openDataInputStream();
DataOutputStream dos = c.openDataOutputStream();
MIDP Connection
MIDP Connection 생성 생성 (4) (4)
3. 데이터 송/수신
dis.readChar() ; dos.writeChar();
4. Connection과 Input/Output Stream 닫기
c.close();dis.close();
dos.close();
GCF API
GCF API 설명 설명 (1) (1)
•
Connection 인터페이스- GCF에서 가장 기본이 되는 최상위 인터페이스로서 단지 열리고 닫는 기능만 한다.
• StreamConnectionNotifier 인터페이스
- 연결이 설정될 때까지 기다리기 위해 사용되는 연결형 Connection
• DatagramConnection 인터페이스
- UDP/IP 통신을 위해서 데이터그램 종단을 표현하기 위한 연결형 Connection 을 생성
• InputConnection 인터페이스
-
데이터를 읽어 들일 수 있는 장치를 지정하는 인터페이스GCF API
GCF API 설명 설명 (2) (2)
•
OutputConnection 인터페이스- 데이터를 전송할 수 있는 장치를 지정하는 인터페이스
• StreamConnection 인터페이스
- InputConnection과 OutputConnection을 통합하기 위한 인터페이스
• ContentConnection 인터페이스
- HTTP 연결에 의한 기본적인 메타 데이터 정보에 대한 접근을 제공
• Connection 인터페이스
- ContentConnection을 상속하였으며, HTTP1.1을 지원하기 위해 사용
• Connector 클래스
-
GCF에서 유일한 클래스이며, open() 메소드의 파라미터로 부터 요청 한 Connection을 형성하여 돌려 준다.MIDP
MIDP HTTPConnection HTTPConnection 프로그래밍 프로그래밍
•
HttpConnection 인터페이스를 사용 했을 때 장단점- J2ME CLDC/MIDP를 구현한 디바이스에서 HTTP Connection의 지원은 필수이며, Socket, UDP등 기타 Connection의 구현은 선택 사항이다.
이식성이 우수하다.
- HTTP Connection을 사용하면 방화벽에서 일반적으로 열어 두는 80포트 를 사용하기 때문에 네트워크 보안이나 방화벽 문제를 쉽게 처리 가능하다.
- HTTP Connection의 Request에 XML의 데이터를 보내게 되면 다른 형태 의 데이터를 손쉽게 전송할 수 있다.
- J2ME CLDC/MIDP는 HTTP 1.1 프로토콜의 서브 셋을 지원한다.
- HTTP 프로토콜이 연결 지속성이 아니라서 Session관리를 위해서 별도의 노력을 기울여야 하는 단점이 있다.
준비 과정
▶
Tomcat 설치
▶
Servlet을 수정하기 위하여 servlet.jar 파일을 – Jre/lib로 복사
▶
해당 Servlet 파일을 Compile 한 후에
– Tompcat/webapps/examples/WEB_INF/classes/ 내에 복사함.
- 여기서 webapps까지 자동 인지됨
- 또한, WEB_INF/classes/ 자동 인지됨
-Midlet file 내에서 URL 주소 설정
- “http://203.153.155.102:8080/examples/servlet/HttpGetServlet”
HTTP GET
HTTP GET 방식 방식 데이터 데이터 요청 요청 예제 예제 (2) (2)
• HttpGetServlet을 생성하고 GET 방식으로 요청을 설정하는 부분
hc = (HttpConnection)Connector.open(url + queryString);hc.setRequestMethod(HttpConnection.GET);
• getParameter() 메소드를 이용해 GET 방식 요청
// request로 부터 ID, PASSWORD를 얻어옴id = request.getParameter("id");
password = request.getParameter("password");
HTTP GET
HTTP GET 방식 방식 데이터 데이터 요청 요청 예제 예제 (3) (3)
• GET 요청을 위해 QueryString을 생성
// GET 요청을 위해 queryString을 생성queryString = "?" + "id=" + idField.getString() + "&"
+ "password=" + pwField.getString();
• HttpConnection을 생성
// HTTP Connection을 생성hc = (HttpConnection)Connector.open(url + queryString);
• RequestMethod로 GET 설정
// RequestMethod로 GET 설정hc.setRequestMethod(HttpConnection.GET);
HTTP GET
HTTP GET 방식 방식 데이터 데이터 요청 요청 예제 예제 (4) (4)
• HttpGetMIDlet 실행 화면
HTTP POST
HTTP POST 방식 방식 데이터 데이터 요청 요청 예제 예제 (1) (1)
•
GET 방식이 서버로부터 데이터를 받기 위한 목적으로 사용하는 것이라면 POST 방식은 그 반대의 기능을 제공•
GET 방식 요청이 허용하는 것 보다 많은 정보를 전달하기 위해 사용됨.
• HttpConnection을 생성하고 POST 방식 요청을 설정하는 부분
hc = (HttpConnection)Connector.open(url, Connector.READ_WRITE);hc.setRequestMethod(HttpConnection.POST);
Servlet은 클라이언트로부터 POST 방식 요청으로 UpperCase할 데이 터를 받은 후 결과를 클라이언트에
보낸다.
사용자로부터 UpperCase할 데이 터를 받은 후 Server에 Http Conn Ection의 POST 방식 요청을 보내 고 결과를 받아 출력한다.
Servlet 예제 MIDlet 예제
HTTP POST
HTTP POST 방식 방식 데이터 데이터 요청 요청 예제 예제 (2) (2)
• InputStream을 통해 데이터를 받음 (Servlet)
// InputStream 생성
BufferedReader inputStream = request.getReader();
// Input String을 받음 String line;
String requeststring = "";
while (( line = inputStream.readLine()) != null) {
requeststring = requeststring + line;
• HttpConnection을 생성(MIDlet)
// HTTP Connection을 생성hc = (HttpConnection)Connector.open(url, Connector.READ_WRITE);
HTTP POST
HTTP POST 방식 방식 데이터 데이터 요청 요청 예제 예제 (3) (3)
• RequestMethod로 POST 생성(MIDlet)
// RequestMethod로 POST 설정hc.setRequestMethod(HttpConnection.POST);
•
OutputStream을 통해 데이터를 전달(MIDlet)// 서버로 부터 데이타를 받기 위해 outputStream 생성 out = hc.openDataOutputStream();
// 서버에 요청 스트링을 보낸다.
byte[] request = requeststring.getBytes();
for (int i = 0; i < request.length; i++) {
out.writeByte(request[i]);
}
out.flush();
HTTP POST
HTTP POST 방식 방식 데이터 데이터 요청 요청 예제 예제 (4) (4)
• HttpPostMIDlet 실행 화면
HTTP HEAD
HTTP HEAD 방식 방식 데이터 데이터 요청 요청 예제 예제
•
GET 방식과 유사•
서버는 HEAD에 대한 정보만 돌려 보낸다.•
HEAD 정보HTTP/1.0 200 OK
Data: Thu, 03 May 2002 16:04:09 GMT Server: NCSA/1.4.2
MIME-version: 1.0
Content-type: text/html
Last-modified: Thu, 03 May 2002 16:03:27 GMT Content-length: 145
•
HEAD는 다음의 정보 확인을 위해 사용 Server 문서의 최근 modified 날짜다운 받을 문서의 크기 – 다운 로드 진행 상태를 알 수 있다.
Server Type – Server에 따른 Client 처리
문서 형식 – 클라이언트의 문서 지원 여부 확인
MIDP
MIDP HTTPConnection HTTPConnection 상태 상태 유지 유지 (1) (1)
•
접속 상태를 유지하지 않는 프로토콜•
한쌍의 Request – Reponse는 독립적으로 처리Cookie 이란?
Cookie는 클라이언트가 저장이 필요한 정보가 생길 때 마다 클라이언트 쪽에 일정한 형식의 데이터(Cookie)로 만들어 저장하고 필요한 서버와 서버의 디렉터리를 접근할 때 그 정보도 같이 서버에 보내주는 형태
Session이란?
Session은 사용자의 정보를 유지 하기 위해 서버에 저장되는 Cookie라고 생각하면 된다
MIDP
MIDP HTTPConnection HTTPConnection 상태 상태 유지 유지 (2) (2)
•
Cookie 값HTTP/1.1 200 OK
Content-Type: text/plain Content-Length: 53
Date: Tue, 18 Dec 2001 17:19:22 GMT
Server: Apache Tomcat/4.0.1 (HTTP/1.1 Connector)
Set-Cookie: JSESSIONID=35E2621570C3B1D;Path=/midp
서버가 클라이언트의 접속에 대해 생성한 유일한 식별자
MIDP
MIDP HTTPConnection HTTPConnection 상태 상태 유지 유지 (3) (3)
• 유일한 식별자인 JSESSIONID을 Cookie로 설정해 서버에 보낸다.
hc.setRequestProperty("Cookie", sessionID);
• 서버의 응답으로부터 Cookie를 얻는다.
String cookie = hc.getHeaderField("Set-Cookie");
• Cookie 중에 유일한 식별자인 JSESSIONID을 얻는다.
// cookie에서 JSESSIONID를 얻는다.
if (cookie != null) {
int index = cookie.indexOf(';');
sessionID = cookie.substring(0, index);
}
MIDP
MIDP HTTPConnection HTTPConnection 상태 상태 유지 유지 (4) (4)
• SessionMIDlet 실행 화면
MIDP
MIDP StreamConnection StreamConnection 프로그래밍 프로그래밍
•
StreamConnection 인터페이스는 연결 지향형 Connection을 지원.•
한번 접속하면 접속 종료 전까지 계속적으로 데이터를 주고 받음.•
TCP/IP•
Daemon- 시스템의 특정 포트를 열고 Background에서 실행되는 프로세스
•
StreamConnecton을 생성하기 위해 Connector의 open() 메소드 이용-
StreamConnection sc =(StreamConnection)Connector.open("socket://java.sun.com:1500 " )
StreamConnection
StreamConnection 예제 예제 (1) (1)
• StreamConnectionServer 작업 흐름도
ServerSocket을 열고 클라이언트의 접속 대기
InputStream을 이용해 클라이언트에서 온 데이터를 받음
OutputStream을 이용해 데이터를 클라이언트로 보냄 클라이언트 접속
접속 대기
StreamConnection
StreamConnection 예제 예제 (2) (2)
• Server Socket 생성
// Server Socket 생성
server = new ServerSocket(port);
• Client 접속을 기다림
System.out.println("클라이언트가 접속 하였습니다.");
• InputStream을 생성하고 데이터를 받음
in = new DataInputStream(client.getInputStream());
// Client로 부터 메세지를 받음 String input = in.readUTF();
// Output 메세지(Reverse String) 생성
• OutputStream을 생성하고 데이터를 보냄
out = new DataOutputStream(client.getOutputStream());
// Client에 결과 메세지를 보냄 out.writeUTF(output);
out.flush();
StreamConnection
StreamConnection 예제 예제 (3) (3)
• StreamConnectionMIDlet 작업 흐름도
StreamConnection을 생성
InputStream을 이용해 서버에 데이터 전송
OutputStream을 이용해 데이터를 받아 출력
StreamConnection
StreamConnection 예제 예제 (4) (4)
• StreamConnection 생성
// Server와 StreamConnection(Socket)을 생성 sc = (StreamConnection) Connector.open
(url, Connector.READ_WRITE, true);
• OutputStream 생성 후 데이터를 보냄
// Server에 reverse 할 String을 보냄 out = sc.openDataOutputStream();
out.writeUTF(reverseString);
out.flush();
• InputStream 생성 후 데이터를 받음
// InputStream 생성
in = sc.openDataInputStream();
// Server로 부터 reverse된 String을 받아 화면에 출력.
String input = in.readUTF();
StreamConnection
StreamConnection 예제 예제 (5) (5)
• StreamConnectionMIDlet 실행 화면
MIDP
MIDP DatagramConnectionDatagramConnection 프로그래밍프로그래밍
•
Connector 클래스의 open 메소드를 사용 - (DatagramConnection) Connector.open( " datagram:// java.sun.com:1500" )
•
서버 모드의 DatagramConnection의 생성- DatagramConnection dc = (DatagramConnection)
Connector.open ( " datagram://:port " ) - DatagramConnection dc = (DatagramConnection)
Connector.open ( " datagram://localhost:port " )
• UDP (User Datagram Protocol)
- IP를 사용하는 네트웍 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다. UDP는 TCP의 대안
- TCP와 마찬가지로 UDP도 한 컴퓨터에서 다른 컴퓨터로 데이터그램이라 고 불리는 실제 데이터 단위를 받기 위해 IP를 사용
DatagramConnection
DatagramConnection 예제 예제 (1) (1)
• DatagramConnectionServer
- 클라이언트와 Datagram Connection을 유지하고 받은 데이터를 Reverse String으로 변환한 결과를 클라이언트로 보냄
1. DatagramSocket을 서버모드로 생성 // receive DatagramSocket 생성 recei = new DatagramSocket(port);
2. 클라이언트로부터 데이터를 받기 위해 DatagramPacket을 생성하고 데이 터를 기다림
rPacket = new DatagramPacket( buffer, buffer.length );
recei.receive(rPacket);
DatagramConnection
DatagramConnection 예제 예제 (2) (2)
3. 클라이언에 보낼 DatagramPacket을 생성 // Client에 보낼 DatagramPacket 생성
int sPort = rPacket.getPort();
InetAddress sAddress = rPacket.getAddress();
sPacket = new DatagramPacket( out, out.length, sAddress, sPort );
4. 클라이언트에 데이터를 보냄
// 결과 DatagramPacket을 Client에 보냄 send = new DatagramSocket();
send.send( sPacket );
DatagramConnection
DatagramConnection 예제 예제 (3) (3)
• DatagramConnectionMIDlet
1. Server에 보낼 Datagram을 생성 후 데이터를 보냄 // DatagramConnection을 생성
dc = (DatagramConnection)Connector.open(sendUrl);
// Server에 보낼 Datagram 생성
dgram = dc.newDatagram( reverseString.getBytes(),
reverseString.getBytes().length, sendUrl);
// Server에 Datagram을 보냄 dc.send(dgram);
2. Server로부터 받을 Datagram을 생성 후 Server로부터 데이터를 받음 // Server로 부터 받을 Datagram 생성
dgram = dc.newDatagram(128);
dc.receive(dgram);
MIDP
MIDP DatagramConnectionDatagramConnection 프로그래밍프로그래밍 (4)(4)
•
DatagramConnectionMIDlet 실행 화면J2ME-J2EE 연동 (추가 기능)
J2ME J2ME - - J2EE J2EE 연동 연동 ( ( 추가 추가 기능 기능 ) )
SOD (Services On Demand) SOD (Services On Demand)
• 엔터프라이즈에서 보유하고 있는 방대한 정보는 고객이 언제 어디
서든, 어떤 디바이스를 이용해서도 접근 할 수 있도록 해야 함.
J2ME
J2ME 플랫폼의 플랫폼의 오늘과 오늘과 내일 내일 (1) (1)
• 자바 플랫폼 (J2EE, J2SE, J2ME) 비교
J2ME
J2ME 플랫폼의 플랫폼의 오늘과 오늘과 내일 내일 (2) (2)
• J2ME MID 프로파일
-
MIDP는 J2ME의 두 Configuration(CLDC/CDC)중 CLDC의 Profile로 휴대전화나 pager등에 적당한 프로그램을 할 수 있도록 설계됨.• J2ME 기술 무선 디바이스 스팩
J2ME
J2ME 플랫폼의 플랫폼의 오늘과 오늘과 내일 내일 (3) (3)
• J2ME 플랫폼의 사용 가능성
J2EE-J2EE-J2ME J2ME 어플리케이션어플리케이션 아키텍처아키텍처
• 자바 스마트 티켓 데모 어플리케이션
-
사용자가 핸드폰, PDA 또는 다른 무선 디바이스를 이용하여 영화 티켓 을 구매할 수 있도록 무선 프로그램을 위한 자바 블루 프린터에서 제공 하는 간단한 mCommerce 어플리케이션이다.자바자바 스마트스마트 티켓티켓 데모데모 어플리케이션어플리케이션 아키텍처아키텍처 (1)(1)
•
J2ME 무선 디바이스에서 MIDP를 사용하여 J2EE 어플리케이션 서버에 연결 하도록 구성됨.• J2ME 클라이언트에서는 EJB 컴포넌트에서 제공하는 서비스를 받기 위해 웹-티어에 존재하는 서블릿과 HTTP 네트워킹 기능을 사용해 통신함.
•
J2ME 클라이언트 티어 (Client Tier - J2ME)- MovieList 및 AccountForm 등과 같은 스크린(Screen)은 MIDP의 LCD UI 컴포넌트 프레임워크를 제공해 준다.
자바자바 스마트스마트 티켓티켓 데모데모 어플리케이션어플리케이션 아키텍처아키텍처 (2)(2)
• J2EE 어플리케이션 서버 티어 (Application Server Tier - 2EE Platform)
- 웹-티어에 존재하는 프론트 클라이언트 서블릿은 HTTP 요청이 들어오면, 요청에 해당하는 서비스를 제공해 주는 EJB 컴포넌트의 메소드를 호출하 고, 그 결과를 HTTP 응답을 통해 클라이언트에게 되돌려 주는 역할
• 통신 기법 (Communication Mechanism)
- 컨트롤러는 어플리케이션의 실행 과정에서의 스크린의 흐름을 관리 - Session 객체는 헬퍼 객체로서 MIDP에서 제공해 주는 HTTP 네트워킹
API 를 이용하여 서버와의 HTTP 통신을 담당
MVC MVC 모델에모델에 기반한기반한 자바자바 스마트스마트 티켓티켓 어플리케이션어플리케이션
• 좀더 쉽고 빠르게 비즈니스 로직을 개발할 수 있다.
• 개발된 비즈니스 로직에 대한 재 사용성 및 확장성을 높여준다.
• 데이터 액세스 로직으로부터 프리젠테이션 로직과 컨트롤 로직을 분리함으로 써 같은 데이터에 대해서도 다양한 뷰를 제공할 수 있다.
영화 영화 예매 예매 모바일 모바일 시스템 시스템 (1) (1)
• J2ME Wireless을 실행하고 Smarticket 프로젝트를 실행
영화 영화 예매 예매 모바일 모바일 시스템 시스템 (2) (2)
• 영화 예매 모바일 시스템에서 사용하는 13개의 자바 파일과 환경변수 2개
영화 예매 모바일 시스템 초기 실행 화면
영화 영화 예매 예매 모바일 모바일 시스템 시스템 (3) (3)
• 영화 예매 모바일 프로그램의 전반적인 처리 프로세스
영화 영화 예매 예매 모바일 모바일 시스템 시스템 소스 소스 (1) (1)
• Account를 얻기 위해 진행하는 화면
영화 영화 예매 예매 모바일 모바일 시스템 시스템 소스 소스 (2) (2)
• 회원 가입 후 로그인 처리 (CommandAction() 메소드)
// 회원 가입을 한 후 로그인 했을 경우
//Session클래스의 message값에 MessageConstants값을 설정 session.message = MessageConstants.LOGIN_USER;
// 현재 화면을 nextScreen에 등록 nextScreen = signedInForm;
// 다음 화면을 previousScreen에 등록 previousScreen = splashCanvas;
// 진행 상황을 보여주기 위해 startLoading메소드 호출
startLoading(false, getMsg(MessageConstants.SIGNING_IN));
영화 영화 예매 예매 모바일 모바일 시스템 시스템 소스 소스 (3) (3)
• 작업 진행 사항 표시 (startLoading() 메소드)
// GaugeForm 의 초기값 설정gaugeForm.init(title, stoppable);
// 현재화면을 진행사항을 표시하는 화면 display.setCurrent(gaugeForm);
• 다음 화면을 previousScreen에 등록
(startLoading() 메소드)// Session 클래스 프로그램 스레드 시작 new Thread(session).start();
GaugeForm 실행 화면
영화 영화 예매 예매 모바일 모바일 시스템 시스템 소스 소스 (4) (4)
• 로그인을 처리하는 login 메소드 호출 (RUN() 메소드)
// 사용자 로그인 하려 할때
case MessageConstants.LOGIN_USER:
login();
영화 영화 예매 예매 모바일 모바일 시스템 시스템 소스 소스 (5) (5)
• 결과 화면을 사용자에게 보여줌 (stopLoading() 메소드)
display.setCurrent(alertScreen, nextScreen);display.setCurrent(nextScreen);
로그인 성공시 결과 화면
네트워크과
네트워크과 RMS (1) RMS (1)
영화에 따른 포스터 보기 화면
영화를 볼 극장 위치 선택 화면
영화 볼 시간 선택 화면
좌석 선택 화면 신용카드 결제 화면
영화 예매 완료 화면 영화 선택 화면
네트워크과
네트워크과 RMS (2) RMS (2)
1. Open 메소드, httpConnection 생성 후 POST 방식 요청 - Http Connection 생성
- HttpConnection의 Method로 POST를 사용 - OutputStream 생성
- 데이터 전송 - Stream close
2. RMS의 RecordStore 처리 – RecordStore 생성)
3. RecordStore에 데이터 저장하기 - RecordStore에 데이터 UPDATE - RecordStore에 데이터 INSERT 4. RecordStore에서 데이터 읽어 오기
- RecordStore로부터 데이터를 읽어 들인다.
영화 영화 예매 예매 엔터프라이즈 엔터프라이즈 시스템 시스템 (1) (1)
• 휴대 장치의 영화 예매 모바일 시스템에서 HTTP POST 방식으로 요청에 대해 처리하고 결과를 보내는 역할.
• 영화 예매 엔터프라이즈 시스템의 중심 기술
- Java Servlet API- Enterprise JavaBeans™ (EJB™) architecture - Java DataBase Connectivity (JDBC™) API
영화 영화 예매 예매 엔터프라이즈 엔터프라이즈 시스템 시스템 (2) (2)
• 영화 예매 엔터프라이즈 시스템은 HTTP 요청을 받는 서블릿 파일과
각각의 요청에 따라 해당 처리를 하는 EJB 부분으로 구성되어 있음
영화 영화 예매 예매 엔터프라이즈 엔터프라이즈 시스템 시스템 (3) (3)
• MIDService 클래스의 processRequest 메소드에 처리 요청 (doPost() 메소드)
// MIDPService클래스의 processRequest메소드에 처리 요청
invalidate = midpService.processRequest(out, command, sessionURL);
• 사용자 로그인 Command일 경우 로그인 처리 메소드 호출 (processRequest() 메소드)
// 사용자 로그인 Command일 경우 case LOGIN_USER:
// 로그인 처리 메소드 호출 loginUser(out, params);
break;
영화 영화 예매 예매 엔터프라이즈 엔터프라이즈 시스템 시스템 (4) (4)
• 로그인 관련 EJB Remote Interface 생성(loginUser() 메소드)
Customer c = findCustomerEJB(username);• EJB Home Interface 생성(loginUser() 메소드)
CustomerInformation ci = c.getInformation();• 처리 비즈니스 메소드 호출 (loginUser() 메소드)
// 사용자가 입력한 로그인 페스워드와 회원 가입시 페스워드를 비교.
if (!(password == (ci.getPassword()))) {
throw new MIDPException(PASSWORD_INCORRECT_ERROR);
}
Next generation of the Mobile Information Device Profile (MIDP v Next generation of the Mobile Information Device Profile (MIDP v2.0)2.0)
• Application Delivery
- MIDlet Upgrade 처리- MIDlet 다운로드에 대한 Cookie 처리
- MIDlet이 정상적으로 다운 되었을 경우 서버에 알림
• UI additions
- Custom Item support - look & feel 지원 - Layout control – Layout 관리 가능
- Graphics enhancements – 투명 이미지 지원, fillTriangle 지원
- Miscellaneous ‘tweaks’ – Gauge 지원, 리스트에 Command지원, ImageItem 보완
Next generation of the Mobile Information Device Profile (MIDP v Next generation of the Mobile Information Device Profile (MIDP v2.0)2.0)
• Game APIs
• Sound APIs
- Tone Generation, Sampled sounds, MIDI 지원
Next generation of the Mobile Information Device Profile (MIDP v Next generation of the Mobile Information Device Profile (MIDP v2.0)2.0)
• Trusted MIDlet Suites for better security
- 제한된 API에 Permission 정의- JAR Signature
•
Enhanced networking- New network and device I/O handlers – SocketConnection, ServerSocketConnection, UDPDatagramConnection등 다수 추가
- Secure Networking - HTTPSConnection, SecureConnection등 다수 추가 - Push Application Support
• HTTPs
•
Push▶
J2ME-J2EE 연동 프로그램
– Java Smart Ticket Application
J2ME J2ME - - J2EE J2EE 연동 연동 프로그램 프로그램
▶
Java Smart Ticket Application 예제
– J2ME와 J2EE의 연동을 적용시킨 100% 순수 자바 기술 구현 예제
– 모바일 기기로 J2EE Server 에 HTTP 연결을 하여 실시간 극장 예매를 가능하게 하는 Application
– MID Profile의 Generic Connection Framework API 를 사용하여 HTTP 연결
Multi
Multi - - tier tier 엔터프라이즈 엔터프라이즈 시스템 시스템
▶
Multi-tier 시스템의 전형적인 구조
프리젠테이션 애플리케이션 데이터 서비스
서비스
Multi
Multi - - tier tier 엔터프라이즈 엔터프라이즈 시스템 시스템
▶
Multi-tier 엔터프라이즈 시스템 개발의 난점
– Tier 간의 서로 다른 요구
• Server : 애플리케이션 간의 상호 연동성과 협업성, 안전성, 견고성, 측정 가능성
• Client : 편리성, 이동성, 효율성, 다양성
– 다양한 개념, 기술, 도구, 언어 요구
• 학습 비용과 기간이 많이 소요
• 이질적 언어와 도구의 상호 연동이 어려움
⇒ 개방형, 플랫폼 중립, 산업표준기술 기반의
컴퓨팅 환경 필요
Service On Demand Service On Demand
▶
Sun의 SOD (Service On Demand) 개념
– 엔터프라이즈 환경의 자산들의 분산 정도에 관계없이 다양한 형태의 고객에게 다양한 서비스를 제공하는 컴 퓨팅 환경에 대한 Sun의 비전
▶
J2EE와 J2ME의 접목
– 엔터프라이즈 컴퓨팅을 위한 J2EE 기술과
모바일 컴퓨팅을 위한 J2ME 기술의 연동을 통해
시간(Anytime), 장소(Anywhere), 기기(AnyDevice)에 구애 받지 않는 환경을 구현
Multi
Multi - - tier tier 엔터프라이즈 엔터프라이즈 시스템 시스템
▶
순수 자바 기술을 사용한
Multi-tier 엔터프라이즈 시스템 개발
– 유용성이 입증된 자바 기술
• 높은 생산성, 이식성, 안정성, 가용성
– 시스템 개발의 모든 부분에 단일 기술 사용 – J2ME-J2EE의 연동
• 모바일 엔터프라이즈 서비스 제공 가능
⇒ Java Smart Ticket Application 예제
– J2ME-J2EE 연동을 구현한 100% 순수 자바 기술
순수 순수 자바 자바 기술을 기술을 사용한 사용한 Multi
Multi - - tier tier 엔터프라이즈 엔터프라이즈 시스템 시스템 개발 개발
▶
J2EE-J2ME 애플리케이션 아키텍처
Java Smart Ticket Application Java Smart Ticket Application
▶
Java Smart Ticket Application
– MVC (Model, View, Controller) 모델을 적용
• J2ME Client tier: 프리젠테이션 로직(View)
• J2EE Web tier: 브리지 (Controller)
• J2EE EJB tier: 비즈니스 로직 (Model)
• EIS tier: 데이터 서비스 (Model)
EJB DB
DB MIDlet HTTP
J2ME tier
Web tier EJB tier ServletEIS tier
JDBC
J2EE
tier
Java Smart Ticket Application Java Smart Ticket Application
▶
세션정보 관리
– 세션 : 사용자가 단일 클라이언트를 사용하여 발생시 키는 일련의 서비스 요청
– 세션정보 : 한 세션이 여러 요청에 걸쳐 유지하는 정 보 (ex : 쇼핑 카트)
– HTTP는 stateless 프로토콜임
• Servlet API는 HttpSession 객체를 제공
– 세션정보 표현을 위한 기법
• Cookie
• URL-Rewriting
• SSL (SSL은 MIDP의 필수 요소는 아님)
Java Smart Ticket Application Java Smart Ticket Application
▶
개인정보 관리
– 개인정보 : 여러 세션에 걸쳐 유지되는 사용자 정보 – 개인정보의 중요성 : 서비스를 요청할 때 사용자 개
입을 최소화
– 개인정보의 유지
• J2ME : MIDP의 RMS 기능 사용
• J2EE : 다양한 방법을 사용할 수 있음
▶
세션 및 개인정보 관리
– 서버에서 관리
• 서버로 전달되는 메시지 규모 축소
• 다양한 클라이언트 유형들의 효과적 지원
– 일반 정보와 기기 유형별 정보의 분리
Java Smart Ticket Application Java Smart Ticket Application
▶
Deployment (배치)
– J2ME 요소
• 프로그램 코드 : JAR 파일에 패키징
• 설명과 구성 : JAD 파일
– J2EE 요소
• JSP 페이지와 Servlet : WAR 파일에 패키징
• EJB 컴포넌트 : JAR 파일에 패키징
• WAR+JAR : EAR 파일에 패키징
• J2EE 참조 구현의 deploytool 사용
Java Smart Ticket Application (
Java Smart Ticket Application ( 결론 결론 ) )
▶
J2ME-J2EE 연동 프로그램
– 무선 엔터프라이즈의 효과적 구축 가능
– 프로그래밍이 용이 - Fast Learning Curve – 여러 기술과 도구의 빈틈없는 결합 제공
Java Smart Ticket Application Java Smart Ticket Application
▶