자바 웹스타트는 자바 애플릿을 대체하는 기술이다. 애플릿에는 여러 가지 제한 사항이 있는데 그 중 로컬 컴퓨터에 있는 자원을 접근할 수 없다는 커다란 장애가 있다. 보안에 신경을 쓰다 보니까 그런 제약이 있었던 것으로 알고 있다. 이러한 문제들을 해결할 수 있는 방법이 자바 웹스타트이다.
물론 자바 웹스타로 배포한다해서 로컬 컴퓨터의 자원을 접근할 수 있는 것은 아니다. 하지만 애플릿에서 처리하는 것보다 훨씬 강력하다.
자바 웹스타트 배포파일은 JNLP(Java Network Launching Protocol)인데 배포를 위해서 JNLP 파일을 정의해 줘야 한다. 파일 형식을 XML이다. XML에 관한 전문적인 지식이 없어도 작성하는데 큰 문제는 없을 듯 싶다. 간략하게 JNLP 형식을 살펴 보자:
<?xml version="1.0" encoding="utf-8"?> ----- XML 버젼과 인코딩 방식
<!-- JNLP File for File Demo Application --> ---- 주석(html의 주석 처리 방식과 동일하다)
최상위 노드는 항상 <jnlp 로 시작하고 최하위 노드에서 /jnlp>로 마무리 한다. 보통 노드를 엘리먼트(element)라 하고 노드 안의 spec, codebase, href와 같은 것들을 속성(attribute)라 한다. <jnlp> 엘리먼트에서는 3개의 속성을 이용하고 있는데 spec은 자바웹스타트 버젼을 나타내고 codebase는 jnlp파일이 있는 주소, href는 jnlp파일의 이름이다.
<jnlp spec="1.5+" codebase="http://rightway.chonbuk.ac.kr/webstart" href="filedemo.jnlp">
<information> 엘리먼트는 <jnlp> 엘리먼트의 하위 엘리먼트이고 그 하위에 여러 종류의 엘리먼트들을 포함할 수 있다. 자세한 설명을 생략한다.
<information>
<title>Java WebStart Demo</title>
<vendor>S2C Lab.</vendor>
<homepage href="http://compstat.chonbuk.ac.kr"/>
<description>Java WebStart Demo Application</description>
<description kind="short">A demo of the capabilities of the WebStart.</description>
</information>
<security> 엘리먼트는 로컬 컴퓨터의 자원을 접근 허용을 설정하는 부분이다. 하위 엘리먼트로 <all-permissions/>을 포함하면 모든 권한을 갖게 된다.
<security>
<all-permissions/>
</security>
<resources>엘리먼트는 실제 작성한 파일들을 연결해 주는 부분이다. 모든 자바 파일은 jar 파일로 압축되고 보안 인증이 되어 있어야 한다.
<resources>
<j2se version="1.5+" />
<jar href="FileDemo.jar"/>
<jar href="help_res.jar"/>
<jar href="jh.jar"/>
<jar href="poi.jar"/>
</resources>
<application-desc>엘리먼트는 작성한 애플리케이션의 main 메소드를 포함하고 있는 클래스 이름을 알려주기 위해 필요하다.
<application-desc main-class="FileDemo"/>
</jnlp>
보안인증에 필요한 절차를 살펴보자:
우선 보안키를 생성해야 한다. 생성 방법은 다음과 같다:
c:\>keytool -genkey -keystore rightway -alias right
keytool은 자바 SDK를 설치했을 때 bin 폴더에 있는 보안키 작성 툴(tool)이다. 위의 명령에서 rightway는 키가 저장된 파일의 이름이고 right는 rightway의 별칭이다.
위의 명령문을 실행했을 때 몇 가지 필요한 정보를 입력해야 한다:
keystore 암호를 입력하십시오: rightway
이름과 성을 입력하십시오.
[Unknown]: Kill-Sung,Mun
조직 단위 이름을 입력하십시오.
[Unknown]: S2C Lab.
조직 이름을 입력하십시오.
[Unknown]: S2C Lab.
구/군/시 이름을 입력하십시오?
[Unknown]: JeonJu
시/도 이름을 입력하십시오.
[Unknown]: Chonbuk
이 조직의 두 자리 국가 코드를 입력하십시오.
[Unknown]: 00
CN="Kill-Sung,Mun", OU=S2C Lab., O=S2C Lab., L=JeonJu, ST=Chonbuk, C=00이(가) 맞
습니까?
[아니오]: y
<right>에 대한 키 암호를 입력하십시오.
(keystore 암호와 같은 경우 RETURN을 누르십시오):
제대로 작성되었는지 확인해 보기 위해 다음과 같은 명령문을 이용할 수 있다.
keytool -selfcert -alias right -keystore rightway
keystore 암호를 입력하십시오: rightway
이제 jar 파일을 서명된 jar파일로 만들어 보자:
jar 파일을 만드는 방법에 대해서는 설명하지 않겠다. jar파일 생성에 미숙한 사람들을 sun의 튜토리얼을 참조하기 바란다.
http://java.sun.com/docs/books/tutorial/jar/index.html
서명된 jar 파일을 만들기 위한 명령문은 다음과 같다:
jarsigner -keystore rightway FileDemo.jar right
Enter Passphrase for keystore: rightway
Warning: The signer certificate will expire within six months.
rightway는 위에서 작성한 보안키를 저장하고 있는 파일이름이고 FileDemo.jar를 서명할 jar 파일이다. 마지막으로 right는 rightway에 대한 별칭이다.
모든 jar 파일에 대해 동일한 방법으로 서명해 준다. 이 때 다른 보안키를 서명해 주면 배포시 에러를 발생시키므로 주의하기 바란다.
JNLP 파일은 웹상에서 런칭되기 때문에 웹서버에 등록을 해야 한다. MS의 IIS, Apache, Tomcat 모든 웹서버에 등록이 가능한데 여기서는 Tomcat을 이용해 보겠다. Tomcat의 설치 파일은 다음 사이트에서 구할 수 있다. 가능하면 최신 버젼을 다운 받자.
http://jakarta.apache.org/tomcat/
Tomcat 설치하고 conf 폴더에서 web.xml 파일을 메모장으로 열어 JNLP 파일에 대한 MIME 타입을 설정한다. 나의 경우 Tomcat5.5를 설치했는데 이미 등록되어 있었다. 다른 웹서버의 경우에도 MIME타입을 지정해 줘야 한다. 다음과 같이 지정해 주자:
<mime-mapping>
<extension>jnlp</extension>
<mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>
마지막 남은 일은 JNLP파일을 실행할 수 있는 웹어플리케이션을 만드는 일이다. webapps 폴더에 webstart라는 폴더를 만들자. 그리고 webstart 폴더 안에 WEB-INF라는 폴더를 만들어 준다. webstart 폴더에 JNLP 파일을 비롯하여 필요한 JAR 파일들을 넣어 둔다. 그리고 웹페이지를 하나 만들어 JNLP 파일의 링크를 걸어 준다.
<a href="filedemo.jnlp">Launch WebStart </a>
Tomcat을 다시 구동시키고 웹페이지에 접속한다. 접속할 때 라이브러리를 다운로드 한 후 다음과 같은 대화상자가 나타나는데 '예'를 선택하면 된다.
자바 웹스타트에서는 파일을 처리하기 위해 별도의 API를 제공하고 있다. javax.jnlp라는 패키지에 인터페이스들이 있는 간단하게 사용법을 살펴 보자. 만약 javax.jnlp의 인터페이스를 이용하지 않는다면 파일 처리를 할 수 없을 것이다. javax.jnlp의 인터페이스를 이용하려면 SDK를 설치하면 아래 경로에 jnlp.jar 파일이 존재한다:
[JAVA_HOME]\sample\jnlp\servlet
여기서 [JAVA_HOME]은 자바가 설치되어 있는 폴더다.
import javax.jnlp.*;
.
.
.
FileOpenService fos;
try {
fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
} catch (UnavailableServiceException ex) {
fos = null;
}
if (fos != null) {
try {
// ask user to select a file through this service
FileContents fc = fos.openFileDialog(null, null);
String dataName = fc.getName();
InputFile inputFile= new InputFile();
InputStream iStream = fc.getInputStream();
if(dataName.endsWith("txt")||dataName.endsWith("dat")) {
inputFile.textFile(iStream,textPane);
} else if(dataName.endsWith("xls")) {
inputFile.excelFile(iStream,textPane);
} else {
System.out.println("읽을 수 없는 파일입니다");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
코드에 대한 설명은 생략한다. javax.jnlp 패키지에 대한 API 문서는
http://java.sun.com/products/javawebstart/docs/javadoc/index.html
를 참조하기 바란다.
실제 데모사이트를 한번 접속해 보자.
이렇게 해서 자바 웹스타트에 대한 소개를 마칠까 한다. 주마간산으로 소개를 했다. 자세히 하기에는 너무 분량이 많아서... 자세한 내용은 참고자료를 참조하기 바란다.
참고자료
1. http://java.sun.com/products/javawebstart/
2. http://java.sun.com/products/javawebstart/docs/javadoc/index.html
3. http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html
트랙백 주소 :: http://frok.info/man/trackback/172
-
Subject: 1ae3ec782dbb
Tracked from 1ae3ec782dbb 2008/04/14 21:12 삭제1ae3ec782dbbe6a005d7




댓글을 달아 주세요