작성자 : 김성박 ( 삼성멀티캠퍼스전임강사 ) e-mail : urstory@nownuri.net homepage : http:// 본문서의배포처 : http://, http://www.javastudy.co.kr 작성일 : 2001년 10월 17일수요일. - 해당문서는김성박 (urstory@nownuri.net) 의동의없이수정, 복사, 삭제등을할수없으며, 다른사이트로김성박의동의없이배포할수없습니다. - 해당문서에서잘못된곳이나수정할곳을발견한분은 urstory@nownuri.net 으로메일보내주신다면감사하겠습니다. - 웹의동작방식에대하여잘알고있어야합니다. 해당문서는 Jakarta-Tomcat에서 Servlet 에대한내용을알아야이해할수있습니다. JAVA프로그램을작성해본분들이라면, JAVA프로그램을어떻게배포를해야할까? 하고많이망설였을것입니다. 배포의어려움때문에많은사람들이 applet 을많이이용합니다. 하지만 Applet 을이용하면보안상의문제로해결하기어려운일들을많이만나게됩니다. 그렇다고해서 Application으로작성한다면, 배포가어렵습니다. 많은컴퓨터사용자들이프로그램을다운로드받고설치하는것을어려워하기때문입니다. 하지만 JAVA WEB START를이용한다면, 이런불편한점은자동으로해결됩니다. 경매, email발송, 주식, 관리프로그램등에대한프로그램을웹상에서클릭한번으로자동으로설치하고실행할수있도록해주는것이 JAVA WEB START가해주는일입니다. 아래는 SUN 에서말하는 JAVA WEB START 의장점입니다. * 워드프로세서및스프레드시트와같은기존응용프로그램과호환되는대화형사용자인터페이스를사용합니다. * 대역폭요구수준이낮습니다. 클릭할때마다응용프로그램이반드시웹서버에연결될필요가없으며이미다운로드한정보를캐시할수있습니다. 따라서연결이느려도더나은대화형기능을제공할수있습니다. 1
* 오프라인사용을지원합니다. 즉, 쉽게에플리케이션을설치, 실행할수있다는것입니다. 다만, 단점이있다면 JAVA WEB START를사용하기위하여는 JAVA WEB START 응용프로그램을한번은설치해야한다는것입니다. 하지만, 이렇게한번설치하고나서부터는손쉽게자바응용프로그램을이용할수있습니다. 하지만, 사용자는웹상에서프로그램의목록을이미본상태이므로, 초기비용만약간감수한다면, 그다음부터는손쉽게프로그램을이용할수있습니다. 그이유는한번다운로드한프로그램은로컬상에서계속사용할수있기때문입니다. JAVA WEB START 에대한더욱자세한내용은아래에서볼수있습니다. http://java.sun.com/products/javawebstart/ JAVA WEB START 를이용한데모는아래의사이트에서볼수있습니다. http://java.sun.com/products/javawebstart/demos.html JAVA WEB START 응용프로그램은아래에서다운로드받습니다. http://java.sun.com/products/javawebstart/download-windows.html 먼저 JAVA WEB START 데모를이용하기위하여는다운로드페이지에서 JAVA WEB START를다운로드받아서설치하시기바랍니다. 설치프로그램은실행한후에 next만계속누르면될정도로쉽습니다. 설치가끝났다면데모사이트 ( 그림 1) 에서노트패드프로그램을실행합니다. 2
그림 1 노트패드를실행하면그림2) 와같이 class 를다운로드받는창이뜹니다. 문제가없다면그림 3) 과같이노트패드가실행되는것을알수있습니다. 그림 2 3
그림 3 데모를종료한후에는윈도우시작 프로그램 JAVA WEB START 폴더에있는 JAVA WEB START를실행하면그림 4) 와같이로고가나온후그림5) 와같이지금까지실행한프로그램목록이있는것을알수있습니다. 해당프로그램들은 offline 상에서도실행할수있습니다. 4
그림 4 그림 5 5
JAVA WEB START를이용하면프로그램의설치와실행이무척쉽다는것을알수있을것입니다. 이번에는실제로배포하기위하여어떻게하여야할것인지순서대로실행해보도록하겠습니다. JAVA WEB START 를이용한프로그램의배포 1. JAVA WEB START를이용하여프로그램을배포하기위하여는웹서버가필요합니다. 필자는 Jakarta-tomcat 을이용하였습니다. 지금부터따라할예제들의소스는다음과같은디렉토리에존재합니다. c: jtomcat webapps test 디렉토리에는 HelloWorld.jar, HelloWorld.java, helloworld.html 이위치합니다. c: jtomcat webapps test WEB-INF classes 디렉토리에는 HelloWorld.class ( 서블릿 ) 이존재합니다. 2. JAVA WEB START를이용하여배포할프로그램을작성합니다. 여기에서는간단하게프레임만출력하는프로그램인 HelloWorld.java 를작성하였습니다. HelloWorld.java 시작 ------------------------------------------------ import java.awt.*; public class HelloWorld extends Frame{ public HelloWorld(String s){ super(s); } public static void main(string args[]){ HelloWorld hw = new HelloWorld("hello world"); hw.setsize(500,500); hw.setvisible(true); } } HelloWorld.java 끝 -------------------------------------------------- 3. HelloWorld 프로그램을컴파일한후아래와같이 jar 프로그램을이용하여압축합 6
니다. jar cvf HelloWorld.jar HelloWorld.class 4. JAVA WEB START에위하여프로그램을배포하기위하여는 mime 형식이 application/x-java-jnlp-file 인 jnlp 라고불리우는 xml 파일을작성해야합니다. nlp 의예는예제 HelloWorld.jnlp 와같습니다. HelloWorld.jnlp 시작 ------------------------------------------------ <?xml version="1.0" encoding="utf-8"?> <jnlp spec="0.2 1.0" codebase="http://70.12.108.93:8080/test"> <information> <title>helloworld</title> <vendor>sun Microsystems, Inc.</vendor> <homepage href="./helloworld.html"/> <description>hello World Demo</description> <description kind="short">java Webstart demo</description> <icon href="images/code.gif"/> <offline-allowed/> </information> <resources> <j2se version="1.3+"/> <jar href="helloworld.jar" main="true" download="eager"/> </resources> <application-desc main-class="helloworld"/> </jnlp> HelloWorld.jnlp 끝 -------------------------------------------------- 각각의줄을보면 codebase는 HelloWorld.jar 파일이위치하고있는웹상의 URL을말합니다. information 은 HelloWorld class 에대한설명입니다. 중요한것은 resources 부분으로 j2se 의버젼과실제구동할 jar 파일과 main-class 를지정하여줍니다. 7
이렇게 jnlp 파일을작성해주어야합니다. 하지만, 웹상에서읽어들이는 jnlp 파일은 mime type 이 text/plain 입니다. 우리는해당 jnlp 파일의 mime 형식을 application/xjava-jnlp-file 로지정해야합니다. 5. jnlp 의 mime 형식을 application/x-java-jnlp-file 로지정하기위하여서블릿을작성합니다. text형식일경우 mime 형식을만족해주지못하기때문에 servlet 을이용하여강제적으로 mime type을지정해줍니다. ( 서블릿이아니라웹서버의설정으로처리할수도있습니다. ) HelloWorld.java 서블릿은 jnlp 파일을서블릿으로출력하는예제입니다. 위에서프레임을출력하는 HelloWorld.java 와이름만같습니다. HelloWorld.java 시작 ------------------------------------------------- import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; /** * jnlp file support * * @author kim songpark */ public class HelloWorld extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("application/x-java-jnlp-file"); ServletOutputStream out = res.getoutputstream(); out.println("<?xml version= "1.0 " encoding= "utf-8 "?>"); out.println("<jnlp spec= "0.2 1.0 " codebase= "http://70.12.108.93:8080/test ">"); out.println(" <information>"); 8
out.println(" <title>helloworld</title>"); out.println(" <vendor>sun Microsystems, Inc.</vendor>"); out.println(" <homepage href= "../helloworld.html "/>"); out.println(" <description>hello World Demo</description>"); out.println(" <description kind= "short ">Java Webstart demo</description>"); out.println(" <icon href= "/images/code.gif "/>"); out.println(" <offline-allowed/>"); out.println(" </information>"); out.println(" <resources>"); out.println(" <j2se version= "1.3+ "/>"); out.println(" <jar href= "HelloWorld.jar " main= "true " download= "eager "/>"); out.println(" </resources>"); out.println(" <application-desc main-class= "HelloWorld "/>"); out.println("</jnlp>"); } } HelloWorld.java 끝 ---------------------------------------------------- 6. 이렇게서블릿까지작성하였다면배포를하는 html 문서를만듭니다. 이때배포문서에는 JAVA WEB START 프로그램의다운로드등과함께멋지게디자인하면좋겠지요. 아래는배포하는 helloworld.html 입니다. helloworld.html 시작 ------------------------------------------------- 이예제는 Hello World 를출력하는에플리케이션에대한 java webstart의예제입니다.<br><br> <a href=/test/servlet/helloworld> 헬로우월드실행 </a> helloworld.html 끝 ---------------------------------------------------- 7. 6번까지실행하였다면모든준비는끝난것입니다. 실제브라우져로그림6) 과같이 helloworld.html을 open합니다. 헬로우월드실행 이라는링크 ( 서블릿 ) 을클릭하면 JAVA WEB START 로고가나온후에썰렁하지만프레임만있는윈도우가실행될것입니다. 여기까지가 JAVA WEB START의간단한이용방법입니다. 프레임에 9
는아무런이벤트를지정하지않았기때문에종료가되지않습니다. 강제종료하십시요. 그림 6 10
그림 7 JAVA WEB START 와보안 JAVA WEB START를이용하면서 Application이어떤보안제약없이사용하기위하여는 jar 파일에인증을하는방법을알고있어야합니다. 보안제약없이사용하는방법에대하여순서대로알아보도록합시다. 1. 먼저 jnlp 파일에는아래의내용을추가합니다. <security> <all-permissions/> </security> 위의내용이추가된 HelloWorld.java ( 서블릿 ) 은아래와같습니다. HelloWorld.java 시작 ----------------------------------------------- import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; 11
import javax.servlet.http.*; /** * jnlp file support * * @author kim songpark */ public class HelloWorld extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("application/x-java-jnlp-file"); ServletOutputStream out = res.getoutputstream(); out.println("<?xml version= "1.0 " encoding= "utf-8 "?>"); out.println("<jnlp spec= "0.2 1.0 " codebase= "http://70.12.108.93:8080/test ">"); out.println(" <information>"); out.println(" <title>helloworld</title>"); out.println(" <vendor>sun Microsystems, Inc.</vendor>"); out.println(" <homepage href= "../helloworld.html "/>"); out.println(" <description>hello World Demo</description>"); out.println(" <description kind= "short ">Java Webstart demo</description>"); out.println(" <icon href= "/images/code.gif "/>"); out.println(" <offline-allowed/>"); out.println(" </information>"); out.println(" <security> ); out.println(" <all-permissions/> ); out.println(" </security> ); out.println(" <resources>"); out.println(" <j2se version= "1.3+ "/>"); out.println(" <jar href= "HelloWorld.jar " main= "true " download= "eager "/>"); out.println(" </resources>"); out.println(" <application-desc main-class= "HelloWorld "/>"); 12
out.println("</jnlp>"); } } HelloWorld.java 끝 ------------------------------------------------- 2. jar 파일을인증합니다. 2-1) key 를생성합니다. 도스창을열고 jar파일이있는디렉토리에서아래와같이실행하십시요. 질문이나오면차분히여러분의정보를작성하여주시기바랍니다. keytool -genkey -keyalg rsa -alias tstkey Enter keystore password: ******* // 암호를 6자이상적습니다. What is your first and last name? [Unknown]: Your Name What is the name of your organizational unit? [Unknown]: YourUnit What is the name of your organization? [Unknown]: YourOrg What is the name of your City or Locality? [Unknown]: YourCity What is the name of your State or Province? [Unknown]: YS What is the two-letter country code for this unit? [Unknown]: KR Is CN=Your Name, OU=YourUnit, O=YourOrg, L=YourCity, ST=YS, C=US correct? [no]: yes Enter key password for tstkey (RETURN if same as keystore password): (press [enter]) 2-2) export key를생성합니다. key 이름은 tstcert.crt 입니다. 암호를물어보면아까작성한암호를입력합니다. keytool -export -alias tstkey -file tstcert.crt 13
Enter keystore password: ******* Certificate stored in file tstcert.crt 2-3) jar 파일에 sign 합니다. 도스창에서아래와같이입력합니다. jarsigner HelloWorld.jar tstkey 2-4) jar 파일을 verify 합니다. 도스창에서아래와같이입력합니다. jarsigner -verify -verbose -certs HelloWorld.jar 2-5) 이렇게인증된 jar 파일을 JAVA WEB START로실행하면그림 8) 과같이인증확인창이뜹니다. 인증창이뜨면 YES 를선택한후계속하여프로그램을사용합니다. 그림 8 14
JAVA WEB START 프로그램에서이미지사용하기 JAVA WEB START에서이미지를사용하기위하여는아래와같이 ClassLoader를이용하여작업을해야합니다. ClassLoader cl = this.getclass().getclassloader(); Icon cuticon = new ImageIcon(cl.getResource("yourimage.gif")); 글을마치며. 이렇게 JAVA WEB START에대하여알아보았습니다. 여러분이만들어놓은 Application을쉽게배포할수있다는것이즐겁지않습니까? 글을읽고도움이되었다면 http:// 자유게시판에글하나남겨주는것도좋을것같지요? 좋은하루되십시요. 김성박. 15