APPLET 이란???
APPLET 이란 ?
▷ Applet은 HTML 페이지에 내장되어 Web Browser의해 download되고 수행된다.
Applet의 수행은 application의 수행과 분명히 구분된다.
Application은 main()문 부터 수행이 되지만, applet은 수행의 시작을 비롯한 life cycle이 좀 더 복잡하다.
Applet Security Restrictions(애플릿의 보안)
▷ applet은 다른 곳에 떨어져 있는 사이트에서 load되어 local에서 실행되도록 설계되었기 때문에 보안이 중요하다.
만약 내 컴퓨터에 중요한 정보가 있었다면 그것을 몰래 가져갈 수도 있을 것이다.
▷ Web browser Security Manager는 applet이 접근 규칙을 위반할 경우 SecurityException이 발생한다.
▷ 대부분의 applet에 적용되는 보안은 browser 수준에서 이루어지는데, 아래와 같은 작업을 제한하고 있다.
-Local system상의 다른 프로그램의 수행.
-File I/O
-Native method 호출
-Applet이 다운로드된 host이외의 host에 대한 소켓(socket)연결
JDK1.2에서는 URL단위로 보안을 설정할 수 있고, 보안 정책을 따로 둘 수가 있다.
Writing an Applet
Applet은 다음과 같은 형식으로 class가 만들어진다.
예) import java.applet.*;
public class HelloWorld extends Applet {
Applet은 반드시 public class로 되어야 하며, file의 이름이 class의 이름과 같아야 한다.
(html 파일이름은 달라도 된다.)
Applet Class Hierarchy
Applet class는 Panel class의 subclass이다. 때문에 applet은 flowlayout을 기본 layout으로 한다.
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--java.awt.Panel
|
+--java.applet.Applet
주요 Applet Methods
public class Simple extends java.applet.Applet {
. . .
public void init()
{ . . . }/* 애플릿이 로드되거나 재로드될 때 처음으로 수행되는 코드 */
public void start()
{ . . . }/* 애플릿이 로드되거나 사용자가 재방문했을 때 수행되는 코드 */
public void stop()
{ . . . }/* 애플릿이 있는 페이지를 떠나거나 브라우저를 중지했을 때 수행되는 코드 */
public void destroy()
{ . . . }/* 로드를 취소하였을 때(cleanup) 수행되는 코드 */
}
▷ init() - 한번만 호출된다. 애플릿이 처음 생성되고 브라우저에 load될 때 호출되는 메소드이다. 이 메소드는 애플릿에 필요한 초기화를 제공한다. 이 메소드는 생성자와 비슷하게 동작하여 자바가 애플릿을 처음 로드할때에 자동적으로 시스템에 의해 호출된다. 보통 PARAM 값을 처리하고 사용자 인터페이스를 추가한다.
▷ start() - init() 이후에 애플릿이 동작하기 시작할 때 구동되는 메소드이다. init() 메소드가 호출된 후에 자동적으로 호출된다. 그리고 사용자가 다른 페이지로부터 이 애플릿을 포함한 페이지로다시 돌아올 때마다 호출된다. 이것은 start 메소드가 init 메소드와는 달리 반복적으로 호출된다는 것을 의미한다. 그러므로 단 한번만 실행되어야 할 코드는 init 메소드에 넣어야 한다.
▷ stop() - 애플릿이 동작을 멈출 때 구동된다. 다른 URL로 접속된 경우에 호출된다. 즉, 이 메소드는 사용자가 애플릿이 있는 현재의 페이지를 나오면 자동적으로 실행된다. 그러므로, 동일한 애플릿에 대해 반복적으로 호출된다. 그 목적은 사용자가 애플릿에 관심을 두지 않을 때 시스템 속도를 저하시키는 시간 소모적인 활동을 하지 않도록 하는 기회를 제공하는 것이다.
▷ destroy() - 브라우저가 정상적으로 종료될 때에 이 메소드를 호출하도록 되어 있다. 애플릿은 HTML 파일 내부에 있도록 되어 있으므로, 이 메소드는 브라우저가 종료될때에 자동적으로 일어난다. destroy 메소드에 집어넣어야 할 것은 사용자가 소비한 윈도우 핸들러와 같은 비 메모리 의존 자원을 회수하는 코드이다. 물론, 만일 애플릿이 여전히 활동하고 있다면, 자바는 destroy 메소드를 호출하기 전에 stop 메소드를 호출한다.
Applet Display
▷ Applet은 그래픽하게 나타난다. System.out.println()은 사용할 수 없다. 대신 paint() method를 사용하여 applet's panel에 원하는 것을 그릴 수 있다. paint() method는 browser에 의해서 applet의 display가 새로고쳐질 필요가 있을 때마다 호출되어야 한다.(repaint())
Applet Painting
▷ Applet에서 painting을 하기위해서 호출되어지는 method이다. 그리고, 아래와 같은 Cycle에서 의해서 applet이 보여진다.
▶ paint(Graphics g)
▶ repaint()
▶ update(Graphics g)
Applet Attribute
▷ Appelt attribute의 예
<applet
[archive=archiveList]
code = appletfile.class
width=pixels height=pixels
[codebase=codebaseURL]
[alt=alternateText]
[name=appletInstanceName]
[align=alignment]
[vspace=pixels]
[hspace=pixels] >
[<param name =appletAttribute1 value=value>]
[<param name =appletAttribute2 value=value>]
[alternateHTML]
</applet>
▷ 위치에 관련된 applet attribute
▶ width , height - 이 속성은 반드시 해야 하며, applet의 폭과 높이를 픽셀 단위로 준다. appletviewer의 경우, 이것은 applet의 초기크기이다.
▶ align - 이 속성은 applet의 정렬방식을 지정한다. 기본적으로 두가지가 있다.
애플릿이 블록(block)인 경우 텍스트는 applet 주위에, 애플릿이 인라인(inline)인 경우에는 확대된 텍스트 문자인 것처럼 보이게된다.
▷ 코딩을 위한 applet attribute
▶ CODE - 이 태그에는 클래스 파일의 이름을 쓴다. 이 이름은 현재 HTML이 있는 곳으로부터 상대적인 값으로 취해진다.
이것은 local 디렉토리이거나 네트웍 URL이 될 수 있고 절대 경로 이름도 사용될 수 있다. 즉 C:/a.html
▶ CODEBASE - 이 속성은 선택적으로 사용할 수 있다. 현재 HTML문서가 위치한 디렉토리의 아래의 CODEBASE의 tag값에서 클래스 파일을 찾을 수 있음을 브라우저에 알린다. 예를 들어 아래의 코드는 MyWork/java/samples/HelloWorld.class의 바이트 코드를 읽어온다.
<applet code=HelloWorld codebase=MyWork/java/samples width=100 height=100>
▶ Archive
- 자바 1.1에서는 여러 파일을 압축하여 한번에 다운로드할 수 있도록 jar(Java ARchive)를 지원하는데 브라우저가 서버로부터 다운로드해야 할 jar 파일이 있을 때 사용한다.
archive = "mysamples.jar, morefiles.jar"
- JAR를 사용하면 파일(바이트코드)의 다운로드 속도를 상당히 개선할 수 있으며 파일의 관리도 매우 편리하게 된다. 이러한 기술은 HTTP의 요구가 많은 소용량의 파일을 포함하는 JAR 파일을 로드함이 필요함에도 불구하고 로드 프로세서의 속도를 현저하게 증가시킨다.
(100개의 파일인 경우 100번 연결을 줄일수 있다)
- Swing.jar or SwingAll.jar 파일은 1Mbyte 정도로 다운로드하기 힘들지만, 한번만 다운을 받으면 된다.
▷ PARAM 태그 - HTML 페이지로부터 애플릿에게 파라미터를 전달하는데 사용된다.
<param name=X value=ABC>
▶ value의 값은 String이어야 한다.
▶ 파라미터 값을 읽을 때에는 getParameter() 메소드를 사용한다.
String getParameter(String a)
▶ 위에서 name은 대소문자를 구분하지 않으나 (즉 섞어서 사용해도 되나) getParameter()이 리턴한 String 값은 대소문자를 구분하며 param 태그의 value에 지정된 값이 그대로 나타난다.
▶ 참고로 String 값은 해당 정수로 바꾸려면 parseInt()를 사용한다. 예를들어 파라미터 name이 AGE인 경우 이를 받아 정수값으로 변환하려면 다음과 같이 한다.
int age = 0;
age = Interger.parseInt(getParameter("AGE"));
▶ getParameter() 호출시 해당 파라미터가 HTML 페이지 내에 없으면 null-pointer exception이 발생한다.
▶ 주의: <param> 태그는 반드시 <applet>와 </applet> 사이에 와야 한다.
Applet에서의 추가 메쏘드
▷ 자바에서 애플릿 프로그램을 작성하기 위해서는 반드시 Applet 클래스로부터 계승된 클래스를 사용하여야 하는데 Applet 클래스는 java.applet 패키지에 속해 있다. Applet클래스의 주요 메소드는 다음과 같다.
URL getCodeBase();/* 코드 URL을 얻는다 */
URL getDocumentBase();/* 도큐멘트 URL을 얻는다 */
Image getImage(URL);/* URL로부터 이미지를 얻는다 */
Image getImage(URL, String); /* URL로부터 name에 해당하는 이미지를 얻는다 */
void play(URL);/* 해당 URL의 오디오 파일을 연주한다 */
void showDocument(URL);/* URL의 도큐멘트를 보여준다 */
▷ getDocumentBase() - 현재 나타나고 있는 페이지의 HTML 문서가 있는 디렉토리를 URL 타입으로 리턴한다.
▷ getCodeBase() - 애플릿 코드를 가져온 곳의 디렉토리를 URL 타입으로 리턴한다.
▷ getImage(URL base, String target) - URL 위치에 있는 target이름의 image를 가져 온다.
▷ getAudioClip(URL base, String target) - URL 위치에 있는 target 이름의 AudioClip을 가져온다.