28
March 2015 ED1.0 HR Kwon ([email protected] ) IT 강의자료 Java Advanced

Java advancd ed10

  • Upload
    hungrok

  • View
    78

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Java advancd ed10

March 2015 ED1.0

HR Kwon ([email protected] )

IT 강의자료 Java Advanced

Page 2: Java advancd ed10

1

String Handling

Methods

. String 객체를 조작하기 위한 Method 들 이다

. Static Method 는 valueOf 와 format 이 제공된다

< Methods > . substring : 문자열 자르기, s2 = s1.substring(0,8) ; . concat : 문자열 이어 붙이기, s2 = s1.concat(“abcd”) ; . split : 문자열 나누기 , s2[] = s1.split(“^”) ; // ‘^’ 기호로 분리 . replace : 문자열 변환 , s2 = s1.replace (“kwon” “Kang”) ; . trim : 문자열 좌우공백제거, s2 = s1.trim() ; // 중간에 공백은 제거되지 않는다 . valueOf : 다른 자료형 을 변환 s1 = String.valueOf(data type) // date String , char[] 는 되나 byte[] 는 안됨

. format : 다른 자료형 을 변환 s1 = String.format(“Test %d %l %f %s %tc “,,,,) . charAt : 특정한 Index 의 char 를 구함 , c1 = s1.charAt(3) ; . getBytes : 전체 Char 획득 , byte[] = s1.getBytes() ; // 전체 혹은 부분을 가져올 수 있다 . getChars : 전체(부분) char 획득 , s1.getChars (startIndex, LastIndex, char[], dest index) ; . euals : 문자열 전체검사 , boolen = s1.equals (“Hello Java”) ; . contains : 문자열 부분검사 , boolen = s1.contains(“hungrok”) ; . startWith : 시작 문자열 검사 , boolen = s1.startWith(“http”) ; . endWith : 마지막 문자열 검사 , boolen = s1.endWith(“com”) ;

예제1. format 을 이용하여 concatenation 처리 String str1 = "abcdefgh" ; String str2 = "ababababa" ; String str3 = "nnnnnnnnn" ; String str4 = "" ; str4 = String.format(“%s%s%s",str1,str2,str3) ;

예제2. getChars 와 valueOf 를 이용하여 특정 index char 변경 String str1 = “abcdefgh” ; String str2 =“” ; char car[] = new char[8] ; str1.getChars(0,str1.length(),car,0) ; car[3] = ‘K’ ; str2 = String.valueOf(car) ; // abcKefgh

Page 3: Java advancd ed10

2

Time Package

Time Package

. SE 8 부터 지원 (그전에는 date, time, calendar 객체 사용 - 모순점 개선)

. Factory 형식으로 지원

. 객체는 현재 혹은 특정시간을 주어서 객체를 생성 함 : 예. 2012.1.1 일자 객체를 생성하고 해당 객체의 시작요일 알아내기

객체

특정시간 객체

객체생성 . LocalDateTiem.now() . ZonedLocalDateTime.now() . LocalDate.of (2013,12,25)

minusX plusX withX

< Methods > get : Nano, Second, Minute, Hour, Year : Month, MonthValue : DayOfMonth 1~31 : DayOfWeek SUNDAY ~ SATURDAY : DayOfYear 1~366

truncatedTo isLeapYear

Page 4: Java advancd ed10

3

자료구조

Collection Framework

. Collection 이란 여러 Type 을 지원하는 배열을 통해 연속된 공간에 Data 를 수집하고 조작하기 용이하게 만든 여러 종류의 객체들을 말한다

(1) List : n*1 구조의 배열로서, 순서를 지니며 data 중복이 가능하다 (2) Set : n*1 구조의 배열로서, 순서의 의미가 없으며 data 중복이 불 가능하다 (3) Map : n*2 구조의 배열로서 순서의 의미가 없다. HashMap 다수개 를 이용하면 기본적인 Data Base 기능이 가능 하다 . java.util 하부에 Class 가 존재한다 . 계층구조 (Implementation 관계)

Collection List

Set

Vector

ArrayList

Stack

LinkedList

SortedSet

HashSet

순서 나 집합적인 저장공간 순서가 있는 저장공간

집합적인 저장공간 TreeSet

Map

SortedMap

HashMap

Hashtable

쌍 (키와 값) 의 데이터

TreeMap

Interface

Page 5: Java advancd ed10

4

자료구조

Collection Framework

. 각 객체 들 Features

객체 설명

LinkedList . Array 간 Linked 되어있음, Queue 기능에 이용 . add(), addFirst(), addLast(), remove(), get(index), getFirst(), getLast(), isEmpty() . peek(), poll(), pop(), push()

Stack . LIFO 구조 . push(), pop(), peak(), search()

ArrayList . 일반 배열에 서 동적 메모리 증가 기능 (일반 Array 는 size 가 정적으로 확보) . 동기화를 보장해 주지 않는다 (동기화 방법 List list = Collections.synchronizeList(new ArrayList(…)); . add(), get(), toArray(), contains(), size()

Vector . ArrayList 에서 동기화 가 보장 되도록 최적화된 것 이다 (이런 사유로 AL 대비 느리다) . JAVA 5.0 이후 Auto Boxing 지원 . addElement(), elementAt(), size(), contains(), indexOf(), insertElementAt(), setElementAt()

HashSet . 순서의 의미가 없으며, Data 중복 이 불가능 하다 . add(), next(), remove(), contains(), size()

TreeSet . Set 기능을 지니면서 정렬기능 추가 (자동 오름차순) . 사용자 가 직접 정렬방식 지정가능 (Comparator 를 Implement 하여 compare() 구현)

Hashtable . Key 와 value 로 data 관리, 동기화 보장 , Null 허용하지 않는다 . 객체 생성 : Hashtable<String, Object> h = new Hashtable<String, Object>(); . put(), get(), remove(), contains(), replace(), size(), keys(), elements()

HashMap . Key 와 value 로 data 관리, 동기화 보장하지 않는다, Null 허용한다 . 객체 생성 : Map<String, Integer> map = new HashMap<String, Integer>(); . put(), get(), remove(), contains(), replace(), size(), . Enumeration 변환 method (keys, elements) 가 없다

TreeMap . Map 기능을 지니면서 정렬기능 추가 (Key 를 기준으로 오름차순) . 사용자 가 직접 정렬방식 지정가능 (Comparator 를 Implement 하여 compare() 구현)

Page 6: Java advancd ed10

5

자료구조

Collection Framework

. Template Code

< HashTable Enumber Search >

Hashtable ht = new Hashtable() ; ht.put (“a1”,obj1) ; // Key, Element Value ht.put (“a2”,obj2) ; ht.put (“a3”,obj3) ; Enumeration keys = ht.keys() ; Enumeration values = ht.elements() ; While(keys.hasMoreElements()){ // boolean for search String key = (String) keys.nextElements() ; // To get “a1”, “a2”, “a3” Object value = ht.get(key) ; // To get obj1,obj2,obj3 }

< 객체생성 > Hashtable ht1 = new Hashtable() ; // ht1 == ht2 Hashtable<Object, Object> ht2 = new Hashtable <Object,Object>() ; Hashtable<String, Object> ht3 = new Hashtable <String,Object>() ; Hashtable<String, Integer> ht4 = new Hashtable <String,Integer>() ; Vector<String> vt1 = new Vector<String>() ; Vector<Object> vt2 = new Vector<Object>() ; ArrayList<String> al1 = new ArrayList<String>() ; ArrayList<Object> al2 = new ArrayList<Object>() ; Stack<String> st1 = new Stack<String>() ; Stack<Object> st2 = new Stack<Object>() ; LinkedList<String> ll1 = new LinkedList<String>() ; LinkedList<Object> ll2 = new LinkedList<Object>() ;

Page 7: Java advancd ed10

6

I/O

기본구조

. 문자열 Stream 처리는 Reader / Writer 가 담당하고, Byte Stream 처리는 Stream 이 담당한다

. 각 객체 별 계층구조

Reader --- BufferedReader --- IntputStreamReader –- FileReader

Writer --- BufferedWriter --- OutputtStreamWriter –- FileWriter

InputStream --- FileInputStream ---- SocketInputStream (Abstract) --- ByteArrayInputStream --- SequenceInputStream --- StringBufferInputStream --- FilteredInputStream ---- DataInputStream ---- BufferedIntputStream ---- PushbackInputStream ---- ObjectInputStream

OutputStream --- FileOutputStream ---- SocketOutputStream (Abstact) --- ByteArrayOutputStream --- FilteredOutputStream ---- DataOutputStream ---- BufferedOutputStream ---- PrintStream ---- ObjectOutputStream

InputStreamReader

InputStream

Socket File

File

FileReader 문자열 Stream

Byte Stream

OutputStreamWriter

OutputStream

Socket File

File

FileWriter

Byte Stream

문자열 Stream

Byte Byte

Page 8: Java advancd ed10

7

I/O

File Handling

. File 객체는 File Descriptor 정보만을 가지고 Handling 한다

. 문자열 Stream 에 대하여는 FileReader / FileWriter 를 통하여 처리한다

File FileOutputStream DataOutputStream

ObjectOutputStream BufferedOutputStream

FileWriter BufferedWriter

File

Directory

File FileInputStream DataInputStream

ObjectInputStream BufferedInputStream

FileReader BufferedReader

get Name,Path,Parent,ParentFile get Absolute, AbsoluteFile list, listFiles is Directory, Hidden, File Mkdir, renameTo, delete, createNewFile

File

Directory Byte Stream

Character Stream

Character Stream

Byte Stream

Page 9: Java advancd ed10

8

I/O

Stream 세부종류

비고 Stream Description 참고

상위 FileOuputStream 파일 객체의 entry point 역할. 직접 write 하거나 Sub stream 에 Pipe line 되어진다

객체 생성시 인자로 File 객체, Append 유무 write (buffer,index,size)

ByteArrayOuputStream Write 되어진 Byte 를 전체로 Byte[] 로 가지고 있으며 toByteArray() 로 Byte[] 을 반환한다

객체 생성시 인자는 없다 write (buffer,index,size)

하위 DataOutputStream 8가지 Primitive data type 으로 write 가능 하며 Pipe Line 을 통하여 상위 Output Stream 과 연결된다

객체 생성시 인자는 상위 OS writeByte, writeInt, writeDouble, writeUTF

ObjectOutputStream 직렬화 가 된 Object 을 write 가능, Pipe Line 을 통하여 상위 Output Stream 과 연결된다

객체 생성시 인자는 상위 OS writeObject (obj)

BufferedOutputStream Stream 입출력 효율을 위한 보조 Stream 객체 생성시 인자는 상위 OS, Buffered Size write(buffer)

PrintStream 문자기반 Stream 으로서 표준 출력장치 (System.out) 와 연결되어 사용. 혹은, Pipe Line 을 통하여 상위 Output Stream 과 연결된다

객체 생성시 인자는 상위 OS println , printf()

Page 10: Java advancd ed10

9

Network

Socket

. Socket 이란 : App 과 TCP/UDP 를 연결 해주는 장치 이다 (Port Number 로 관리)

. Socket 객체 가 만들어 지면, 해당 OS Socket 과 대응되는 InputStream 과 OutputStream 객체는 자동으로 생성된다

. 사용자는 IS 와 OS 만을 보고 Handling 하면 된다.

. read / write 행위는 일반적인 I/O 와 동일하다.

. TCP 용 (Connection Oriented) Client Socket 일반적인 모습 (Server 용은 ServerSocket 으로 별도 존재)

. UDP 용은 아래와 같이 별도의 Socket 으로 존재한다

Socket

Socket InputStream

Socket OutputStream

OS Socket OS Socket Out TCP/IP packet In TCP/IP packet

read() write()

Socket

DatagramPacket DatgramSocket MulticastSocket

send(packet) receive (packet)

Page 11: Java advancd ed10

10

Network

HTTP

. Socket 구조 위에 HttpURLConnection 객체가 Header 를 발송하고 수신하는 기능을 담당한다

(Socket 객체를 App 에서 직접 만들지는 않고, 내부적으로 만들어진다)

. Entity Body 의 data 에 대하여는 App 에서 직접 Handling 한다

Socket

InputStream OutputStream

OS Socket OS Socket Out TCP/IP packet In TCP/IP packet

read() write()

Socket

HttpURLConnection URL

. openConnection() 의 결과로 HttpUrlConnection 객체가 반환된다

Request Header Response Header

setRequestMethod : GET/PUT/POST 지정 setRequestProperty : Header Parameter 지정 setConnectTimeout setUseCaches setDoOutput setDoInput getResponseCode getHeaderField getContentLength disconnect

Entity Body

Entity Body

Page 12: Java advancd ed10

11

Security (암호)

일반

. 비대칭 Key (RSA) 및 대칭 Key (AES,DES,3DES) 발행

. 비대칭 Key 를 이용한 서명 및 증명 (Signature & Verify) , Encryption 및 Decryption 처리

. 대칭 Key 를 이용한 Encryption 및 Decryption 처리

. 인증서 발행 기능은 없고 (3rd Party Class 는 본 기능제공), 인증서를 입력으로 받아들여 증명 및 정보만 조회하는 기능이 있음

. 주로 Single Tone 객체로 구현함

. 비대칭 Key 알고리즘 : SHA1 with DSA, MD5 with RSA, SHA1 with RSA, SHA256 with RSA

. 비대칭 Key 사용

. Signature / Verify : Private key 로 Signature 수신측 은 Public Key 로 Verify

. Encryption / Decryption : Public Key 로 Encryption 수신측 은 Private Key 로 Decryption

. Public Key (공개 Key) 는 X509 인증서에 존재함

. HTTPS 는 비대칭 Key 를 사용하여 encryption / decryption 처리

Page 13: Java advancd ed10

12

Security (암호)

Class 별 기능

. KeySpec 없이도 Cipher , Signature 에 직접 Input 으로 가능

. KeySpec 은 공유(전송) 혹은 저장을 위하여 표준에 정한 data format 으로 변환하는 것임

예. PKCS#8 에서 정의된 PrivateKeyInfo = { [privateKey] }

X509 에서 정의된 SubjectPublicKeyInfo = { [publicKey] }

SecretKeySpec 대칭.key

KeyGenerator

private.key

public.key

KeyFactory

Cipher

Signature

prvkeySpec

pubkeySpec

CertificateFactory X509.cer

KeyPairGenerator

keySpec SecretKeyFactory

SecretKey

DESKeySpec

Page 14: Java advancd ed10

13

GUI

소개

. 두 가지 방법으로 GUI 를 구현한다 : AWT Components 혹은 Swing Components 를 사용

. Swing 은 AWT 의 아래 단점을 보완한 것이다

1) Lightweight component 를 제공 : 운영체제 가 native 로 구현 한 component (Heavyweight ) 의 사용에 따른 호환성 문제

2) AWT 에 없는 추가된 Component 의 제공

3) AWT 가 제공하는 Component 의 기능적 보강 : 버튼에 롤오버 이미지 사용, 풍선말 기능 등,,

4) Drag & Drop 기능 : MIME 기반 확장 가능한 데이터 type 시스템을 통하여 JAVA 와 Non-Java 간 data 교환목적

OS Component

User Application

AWT Package

JVM Component

User Application

Swing Package

AWT Package

Page 15: Java advancd ed10

14

GUI

계층구조

. Swing 의 JComponent 는 AWT 의 Container 를 상속한다

. Swing 의 최상위 Container 는 AWT 의 최상위 Container 를 상속한다

Page 16: Java advancd ed10

15

GUI

Container

. 자신의 영역에 컴포넌트를 포함시키고 관리하는 역할을 하며 컨테이너가 다른 컨테이너를 포함할 수도 있다.

. 컨테이너의 종류에는

(1) 최상위 Container : Frame, Applet, Dialog (JFrame, JApplet, JDialog)

(2) Sub Container : Panel, Window

. Frame 은 Window 를 상속 받은 객체로서 Window 에 경계선, 타이틀, 메뉴, 시스템상자 등이 추가된 기능이다

. Applet 은 Panel 을 상속받은 객체로서, HTML 내에 포함되어져 HTML 의 Window 를 사용하는 개념이다

Panel

. Sub Container 이며, 다른 Sub container (Panel) 도 포함 가능하다

. Container 와 같이 다른 component 를 자신의 영역에 포함 가능하다

. 최상위 Container (Frame) 에 포함 되어져 사용된다 (스스로 그릴 수 는 없다)

Layout 객체

. Container 내의 Component 들을 배치 시키는 기능을 한다

. Layout 종류 : Flow (좌우 사항 배치) , Grid (행렬배치) , Border (동서남북중앙 배치 - Default) , Card (뒤에 숨기 배치)

AWT Components

. OS 에서 실제 구현을 담당하는 Heavyweight Component 이다

Swing Components

. JVM 에서 실제 구현을 담당하는 Lightweight Component 이다

Page 17: Java advancd ed10

16

GUI

AWT 연결구조

. 연결 관계가 Tree 구조를 지닌다

. Container.add() method 를 통하여 연결관계를 형성시킨다

. Panel 은 Panel 을 하부에 지닐 수 있다

public static void main(String[] args) { Frame fr = new Frame() ; FlowLayout flo = new FLowLayout() ; fr.setlayout(flo) ; Panel pan1 = new Panel() ; Panel pan2 = new Panel() ; Button btn1 = new Button() ; pan1.add(pan2) ; pan1.add(btn1) ; Button btn2 = new Button() ; fr.add(pan1) ; fr.add(btn2) ; }

Frame

Panel

Panel

Component

Component

Component

Layout

Layout

Layout

Page 18: Java advancd ed10

17

GUI - Applet

Applet

. 작은 Application 이란 뜻으로, Client 에서 Web Browser (Webkit) 를 통해 실행하는 JAVA class 를 말한다

(1) HTML 내에서 applet tag 를 사용하여 (HTML5 에서 deprecated 되었으며 object tag 사용) 실행될 class 를 지정한다

(2) 해당 class 는 Webkit 이 다운로드 하여 Local 에 위치 시키고 JRE 에게 실행을 요청 한다

(3) Window 에서는 jp2launcher.exe 가 java.exe 를 (java plug-in) 실행시키는 구조

. 반드시 Applet 을 상속 하여야 한다 (Applet 은 Panel 을 상속한다)

. Main thread 에서 Life Cycle 을 관리한다 (init start or paint stop destroy)

HTML <applet codebase = URL code=AppleTest.class width=200 height=100 </applet>

Webkit public class AppletTest extends Applet { public AppletTest(){ // Constructor } @Override public void init(){} @Override public void start(){} @Override public void paint(Graphic g){} @Override public void stop(){} @Override public void destroy(){} }

Applet

Panel

Component

Layout

Layout

Applet Class

JAVA Plug-In

HTML <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" codebase= URL <param name="code" value="Applet1.class"> </object>

Page 19: Java advancd ed10

18

GUI

Swing Pane

. Swing 에서는 Pane 객체를 통하여 공간적인 위치의 연결 관계가 형성된다

. 상위 Container (JFrame, JApplet, JDialog) 객체 가 생성되면 세가지 Pane (JRoot, JLayered, JContent) 은 자동 생성된다

. JRootPane 은 가장 안쪽에 있으면서 ControlPnae 이 차지하는 영역 바깥으로 Border 를 지니고 있다.

. JLayeredPane 을 가져가는 이유는 구성되는 Component 에 대하여 공간적 dimension 인 Z-Order 를 가져갈 수 있다

JLayeredpane 은 JContentPane 하부 에 도 구성할 수 있다

. JContentPane 은 JMenuBar 가 없다면 JLayeredPane 의 전체 영역에 놓이게 된다.

이런 경우, Component 를 바로 LayeredPane 에 붙여도 가능하다

. JMenuBar 는 JLayredPane 에 붙여 사용하는데, 이는 MenuItem 이 보일때 High Priority Z order 를 가져가기 위함이다

JRoot Pane

JLayered Pane

JContent Pane

JMenuBar

JFrame

Page 20: Java advancd ed10

19

GUI

Swing Pane

. 아래와 같이 세가지 모습으로 사용 Pattern 은 분류 할 수 있다

(1) 사용모습 1 : JMENU 를 가져가는 일반적인 경우

(2) 사용모습 2 : JMENU 없이 가져가면서, 구성된 Component 간 Z order 를 가져가는 경우

(3) 사용모습 3 : JLayeredPane 을 ContenPane 하부에 구성하여, Component 에 대하여 Z order 를 가져가는 경우

JFrame

Jroot Pane

JLayered Pane

JContent Pane

Component

JMenuBar

사용모습 1

JFrame

Jroot Pane

JLayered Pane

Component

사용모습 2

JFrame

Jroot Pane

JLayered Pane

Jcontent Pane

JLayered Pane

JMenuBar

Component

사용모습 3

Page 21: Java advancd ed10

20

GUI

Swing JLayeredPane

. JLayeredPane adds depth to a JFC/Swing container, allowing components to overlap each other when needed.

An Integer object specifies each component's depth in the container, where higher-numbered components sit "on top" of other components.

Component 3 (Priority Order 1)

Component 2 (Priority Order 2)

Component 1

(Priority Order 3)

Layered Pane (jlp)

jlp.add(c1,3)

jlp.add(c2,2)

jlp.add(c3,1)

moveToBack(component) moveToFront(component) getPosition(component) getLayer()

Page 22: Java advancd ed10

21

GUI

AWT Event Handling

. Listener Interface 를 구현한 객체를 Event 소스객체에 등록 (addXListener) 한다

구분 Event Type 객체 Event 소스 객체 설명 Listener Interface

AWT KeyEvent Component 모든 Component 에 키 동작 발생시 KeyListener

MouseEvent Component 모든 Component 에 마우스 동작 발생시 MouseListener MouseMotionLister

FocusEvent Component 모든 Component 에 focus On/Off 시 FoxusListener

ComponentEvent Component 모든 Component 의 상태감시 ComponentListener

TextEvent TextField TextArea Text 변경 시 TextListener

WindowEvent Window Window 상태감시 WindowListener

ContainerEvent Container Component 추가 혹은 삭제 시 ContainerListener

Swing ActionEvent JButton JList JMenuItem JTextField

Item 선택 시 ActionListener

ItemEvent JCheckBox JList JCheckBoxMenuItem

선택 혹은 해지 시 ItemListener

AdjustEvent JScrollBar 사용자 가 움직 였을 때 AdjustmentListener

Event 소스객체

Event X

Event 객체 App

Listener Class

App Main Class

addXListener

Method(event) event.getSource() 를 통하여 소스객체를 알 수 있다

Page 23: Java advancd ed10

22

GUI

AWT Event Handling

. Template

package a.b.gui; import java.awt.* ; import javax.swing.* ; public class Main{ public static void main(String[] args) { JButton bt1 = new JButton() ; bt1.addMouseListener (new AWTListenerClass . MouseListenerClass()) ; } }

package a.b.gui; import java.awt.event.* ; import java.util.* ; public class AWTListenerClass { public static class ActionListenerClass implements ActionListener{ @Override public void actionPerformed (ActionEvent arg0){} } public static class KeyListenerClass implements KeyListener{ @Override public void keyPressed(KeyEvent arg0) {} public void keyReleased(KeyEvent arg0) {} public void keyTyped(KeyEvent arg0) {} } public static class MouseListenerClass implements MouseListener{ @Override public void mouseClicked(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) {} public void mouseReleased(MouseEvent arg0) {} } }

Page 24: Java advancd ed10

23

GUI

사용자 정의 Graphics

. AWT : Canvas 의 paint() 를 Override 하여 구현 한다.

. Swing : JPanel 의 paintComponent() 를 Override 하여 구현 한다.

public class CustomJP extends JPanel(){ public CustomJP(){ this.setLayout(null) ; this.setBounds(100,100,300,300) ; } @Override in Component protected void paintComponent (Graphic g){ // 사용자 정의 Graphic } }

public class CustomCanvas extends Canvas(){ public CustomCanvas (){ this.setBounds(100,100,300,300) ; } @Override in Component public void paint (Graphic g){ // 사용자 정의 Graphic } }

Page 25: Java advancd ed10

24

EE

Enterprise Edition

. 서버 측 에서 EE 의 대략적인 모습이다

Web Server

Web Container

Servlets JSP

Web Application Server (WAS)

EJB Container

E JavaBean E JavaBean

JavaMail JMS JNDI JDBC

Browser Client

Application Client

Mail Server

Message Tx.

Directory Service

Oracle

Page 26: Java advancd ed10

25

EE

JSP (Java Server Page) , Servlet

. 서버에서 실행되는 Java Class 로서 , 아래 와 같은 목적 이다

(1) Dynamic html page ; 주어진 Parameter 에 대응하는 HTML page 를 동적으로 만들어서 client 에 제공한다, http://URL/index.jsp

(2) Interact with FORM ; Post 되어진 FORM 객체에 대하여 특정한 기능을 수행한다 , FORM action = /Servlet/test1

. MVC (Model View Control) 사용모델

(1) JSP Only : View, Controller 역할을 JSP 혼자 담당

(2) JSP / Servlet : View 는 JSP 가 담당하고, Controller 역할은 Servlet 이 담당

(3) JSP / JavaBean : View 는 JSP 가 담당하고, Controller 역할은 JavaBean 이 담당

Web Client

Web Server

Servlet (test1)

HTTP Post ?action=/Servelt/test1

Form action=/Servlet/test1

Do Action

Web Client

Web Server

JSP

index.html

HTTP Get ?name=kwon

HTTP Response

index.jsp

동적 생성

참고 (HTTP) . abs_path 및 Parameter 는 URL 의 Optional 정보로서 Request Line 에 포함된다

Page 27: Java advancd ed10

26

EE JSP

JSP

. HTML 문서 (Page) 내에 3가지 (지시어, Scripting, Action) Element 로 표현된다

. HTML 파일 확장 자 명 은 “jsp” 로 한다

. Runtime 에 javax.servlet.http.HttpServlet 을 상속받는 Servlet class 가 만들어 지고 JSP Container 가 life cycle 을 주관한다

(궁극적 으로는 Servlet 과 동류의 개념이다)

. Servlet 을 사용하면 HTML 문서를 만들기가 난이 하여 (PrintWriter 를 이용) , 편의 목적으로 나옴

. EE 에서 제공하는 JSP 의 암묵적 객체 : request, response, out, session, application, config, pageContext, page, exception

. MS 의 ASP (Active Server Page) 나 PHP 와 동일한 기능이다

. 지시어 Element : <%@ page ….. > , Page 와 Include 지시어 두 가지 이다

. Page 지시어 : language, import, session, buffer, autoFlush, isThreadSafe, info, errorPage, isErrorPage, : contentType, pageEncoding, extends .Scripting Element : (1) Declaration <%! ……. %> : 멤버변수 나 메소드 를 선언할 때 사용 (2) Expression <%= …… %> : 간단한 data 출력이나 메소드 호출에 사용 (3) Scriptlet <% …….. %> : 순수 Java code 만 가능, Page 의 간결성을 위하여 사용이 권고되지 않고 JavaBeans 를 대신사용 . Action Element : <jsp: ….. />

Page 28: Java advancd ed10

27

EE - Servlet

Servlet

. Client HTTP message 에서 URL (Parameter 가 포함된) 로 사용이 되어진다 (HTTP POST ?action=/Servlet/test1)

. Server 측에서 수행되는, JAVA 로 구현된 CGI (Common Gateway Interface) 이다

. Web.xml 파일을 필요로 한다

. 반드시 javax.servlet.http.HttpServlet 을 상속 하여야 한다

. Servlet Container 가 Life Cycle 을 관리한다 (init service destroy)

. 주요한 Servlet Container 로는 Tomcat, Jetty, Jboss 등이 있다

public class ServletTest extends HttpServelet { @Override public void init(){} @Override public void service(){} @Override public void doGet(){} @Override public void doPost(){} @Override public void destroy(){} }

Web Server

Servlet Container

Web Client

Servlet Class

Web Server

HTTP Request

HTTP Response

service doGet or doPost

By doGet or doPost

Web Application 설정파일 1) Servlet 정보 2) Error Page 정보 3) Listener 정보 4) Filter 정보 5) 보안설정 정보

web.xml