SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
March 2015
ED1.0
HR Kwon (hungrok@hanmail.net )
IT 강의자료
Java Advanced
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
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
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
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() 구현)
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>() ;
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
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
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()
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 packetIn TCP/IP packet
read() write()
Socket
DatagramPacketDatgramSocket
MulticastSocket
send(packet)
receive (packet)
10
Network
 HTTP
. Socket 구조 위에 HttpURLConnection 객체가 Header 를 발송하고 수신하는 기능을 담당한다
(Socket 객체를 App 에서 직접 만들지는 않고, 내부적으로 만들어진다)
. Entity Body 의 data 에 대하여는 App 에서 직접 Handling 한다
Socket
InputStream OutputStream
OS Socket OS Socket
Out TCP/IP packetIn TCP/IP packet
read() write()
Socket
HttpURLConnectionURL
. openConnection() 의 결과로
HttpUrlConnection 객체가 반환된다
Request HeaderResponse Header
setRequestMethod : GET/PUT/POST 지정
setRequestProperty : Header Parameter 지정
setConnectTimeout
setUseCaches
setDoOutput
setDoInput
getResponseCode
getHeaderField
getContentLength
disconnect
Entity
Body
Entity
Body
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 처리
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
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
14
GUI
 계층구조
. Swing 의 JComponent 는 AWT 의 Container 를 상속한다
. Swing 의 최상위 Container 는 AWT 의 최상위 Container 를 상속한다
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 이다
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
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>
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
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
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()
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() 를 통하여
소스객체를 알 수 있다
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) {}
}
}
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
}
}
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
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 에 포함된다
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: ….. />
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

Contenu connexe

Tendances

파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
Yong Joon Moon
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
Daum DNA
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 

Tendances (20)

엘라스틱서치 이해하기 20160613
엘라스틱서치 이해하기 20160613엘라스틱서치 이해하기 20160613
엘라스틱서치 이해하기 20160613
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivity
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 

En vedette

(140118) #fitalk detection of anti-forensics artifacts using ioa fs
(140118) #fitalk   detection of anti-forensics artifacts using ioa fs(140118) #fitalk   detection of anti-forensics artifacts using ioa fs
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
INSIGHT FORENSIC
 

En vedette (19)

제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
 
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
 
IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10
 
(120616) #fitalk web browser forensics - part iii
(120616) #fitalk   web browser forensics - part iii(120616) #fitalk   web browser forensics - part iii
(120616) #fitalk web browser forensics - part iii
 
Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?
 
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
 
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
(140118) #fitalk   detection of anti-forensics artifacts using ioa fs(140118) #fitalk   detection of anti-forensics artifacts using ioa fs
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
 
(150124) #fitalk advanced $usn jrnl forensics (english)
(150124) #fitalk   advanced $usn jrnl forensics (english)(150124) #fitalk   advanced $usn jrnl forensics (english)
(150124) #fitalk advanced $usn jrnl forensics (english)
 
(150124) #fitalk advanced $usn jrnl forensics (korean)
(150124) #fitalk   advanced $usn jrnl forensics (korean)(150124) #fitalk   advanced $usn jrnl forensics (korean)
(150124) #fitalk advanced $usn jrnl forensics (korean)
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to Servlet
 
코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다
 
Server
ServerServer
Server
 
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
 
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
 
SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!
 
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayerSoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
 
SoftLayer 서비스 설명 5차 - 보안
SoftLayer 서비스 설명 5차 - 보안SoftLayer 서비스 설명 5차 - 보안
SoftLayer 서비스 설명 5차 - 보안
 
서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensics
 

Similaire à Java advancd ed10

SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
Sangmin Lee
 
10장 문자열클래스와파일클래스
10장 문자열클래스와파일클래스10장 문자열클래스와파일클래스
10장 문자열클래스와파일클래스
웅식 전
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
유석 남
 

Similaire à Java advancd ed10 (20)

SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
10장 문자열클래스와파일클래스
10장 문자열클래스와파일클래스10장 문자열클래스와파일클래스
10장 문자열클래스와파일클래스
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
 
Collection framework
Collection frameworkCollection framework
Collection framework
 
Scala
ScalaScala
Scala
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
강의자료4
강의자료4강의자료4
강의자료4
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
 
강의자료3
강의자료3강의자료3
강의자료3
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
JSON with C++ & C#
JSON with C++ & C#JSON with C++ & C#
JSON with C++ & C#
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
 
Java(4/4)
Java(4/4)Java(4/4)
Java(4/4)
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
 

Java advancd ed10

  • 1. March 2015 ED1.0 HR Kwon (hungrok@hanmail.net ) IT 강의자료 Java Advanced
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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() 구현)
  • 6. 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>() ;
  • 7. 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
  • 8. 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
  • 9. 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()
  • 10. 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 packetIn TCP/IP packet read() write() Socket DatagramPacketDatgramSocket MulticastSocket send(packet) receive (packet)
  • 11. 10 Network  HTTP . Socket 구조 위에 HttpURLConnection 객체가 Header 를 발송하고 수신하는 기능을 담당한다 (Socket 객체를 App 에서 직접 만들지는 않고, 내부적으로 만들어진다) . Entity Body 의 data 에 대하여는 App 에서 직접 Handling 한다 Socket InputStream OutputStream OS Socket OS Socket Out TCP/IP packetIn TCP/IP packet read() write() Socket HttpURLConnectionURL . openConnection() 의 결과로 HttpUrlConnection 객체가 반환된다 Request HeaderResponse Header setRequestMethod : GET/PUT/POST 지정 setRequestProperty : Header Parameter 지정 setConnectTimeout setUseCaches setDoOutput setDoInput getResponseCode getHeaderField getContentLength disconnect Entity Body Entity Body
  • 12. 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 처리
  • 13. 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
  • 14. 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
  • 15. 14 GUI  계층구조 . Swing 의 JComponent 는 AWT 의 Container 를 상속한다 . Swing 의 최상위 Container 는 AWT 의 최상위 Container 를 상속한다
  • 16. 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 이다
  • 17. 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
  • 18. 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>
  • 19. 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
  • 20. 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
  • 21. 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()
  • 22. 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() 를 통하여 소스객체를 알 수 있다
  • 23. 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) {} } }
  • 24. 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 } }
  • 25. 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
  • 26. 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 에 포함된다
  • 27. 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: ….. />
  • 28. 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