http://weblogs.java.net/blog/bleonard/archive/2007/07/an_introduction_1.html <div class="warning"> 이 문서는 NetBeans 6.0을 사용한 방법입니다.

eclipse를 이용하는 방법을 보고자 할때는 An Introduction to Building RESTful Web Services in Java Using Eclipse를 참조하십시오. </div>

NetBean 6.0을 사용하여 자바로 RESTful 웹서비스 빌드하기#

REST 기반의 웹서비스는 SOAP기반의 웹서비스보다 좀더 간단하다. 그렇지 않은가.? 그런데 자바로 REST 기반의 웹서비스를 생성하는 것은 왜 어려운가.? 툴을 사용하여 REST기반의 웹서비스는 쉽지 않지만 SOAP기반의 웹서비스는 수초안에 만들수는 있다. 이 글이 도움이 될것이다.

JSR 311: JAX-RS: The Java API for RESTful Web Services 는 이렇게 RESTful 기반의 웹서비스를 만드는 절차를 단순화하기 위해 만들어졌다. Marc Hadley 와 함께 공동리더인 Paul Sandozpresentation으로 JAX-RS를 소개했다. 서블릿 API와 제안된 JAX-RS 어노테이션을 사용하여 작업하는 것을 비교했다.

Sun Web Developer Pack튜토리얼과 함께 JAX-RS의 구현체를 포함한다. 튜토리얼은 표준적인 hello 애플리케이션을 설명하는 것으로 시작하지만 직접 빌드하는 방법보다는 애플리케이션 복사본으로 작업하는 방법을 보여준다.

셋팅하기#

  • NetBean 6.0을 다운로드하고 설치하기. GlassFish를 설치하지 않았다면, GlassFish가 포함되어 있는 표준및 전체 배포판을 설치하도록 한다.
  • SWDP를 다운로드하고 GlassFish에 설치하기.

<div class="information"> [#1]기본적으로 NetBeans 6.0 M10을 설치하면 glassfish 가 C:\Program Files\glassfish-v2-b53에 설치가 되고 SWDP 또한 디폴트로 설치할때 C:\Sun\swdp 에 설치가 된다. GlassFish와 SWDP를 통합하기 위해서는 C:\Sun\swdp\bin 로 이동해서 다음과 같은 명령을 실행해야 한다.

set glassfish=C:/Program Files/glassfish-v2-b53
ant -f setup-glassfish.xml -Dsjsas.home=%glassfish% -Ddomain.path=%glassfish%/domains/domain1

다른 was와의 통합을 위해서는 여기를 참조하길 바란다. </div>

hello 애플리케이션 만들기#

1. NetBeans 6.0을 시작하기 hello라는 새로운 웹 애플리케이션을 생성한다.
2. SWDP가 설치되었는지 확인하기 위해 Libraries노드아래 GlassFish를 열어보라. 경우에 따라 GlassFish가 아닌 Sun Java System Application Server 9로 등록이 되어 있을수도 있다. 그러면 restbeans-api.jar 와 restbeans-impl.jar, 그리고 wsdl2java.jar를 보게 될것이다.

1.png

rest 라이브러리가 보이지 않는다면, NetBeans에 GlassFish 를 제거하고 다시 추가하라. 하지만 사전에 SWDP와 GlassFish통합 절차[1]를 거쳐야 한다.

3. hello 라는 새로운 자바 클래스를 생성하라. rest를 사용한다면 Hello는 URI에 의해 구분되는 "resource class(자원 클래스)"가 될것이다.

4. 자원을 URI에 결합시키기 위해 다음처럼 UriTemplate 어노테이션을 사용한다. @UriTemplate(value = "/hello") 와 같은 형식으로 표시해도 된다.

@UriTemplate("/hello")
public class Hello {

5. 그리고 나서 요청을 다루기 위한 메소드를 정의한다.

public String sayHello() {
    return new String("Hello there.");
}

6. HTTP 요청 타입을 표시하기 위해 HttpMethod 어노테이션을 사용한다. 여기서 사용되는 HTTP 요청 타입은 GET, POST, PUT 또는 DELETE가 있다.

@HttpMethod("GET")
public String sayHello() {
    return new String("Hello there.");
}

7. 마지막으로, 클라이언트에 반환되는 타입이 무엇인지 지정하기 위해 ProduceMime 어노테이션을 사용하라.

@HttpMethod("GET")
@ProduceMime("text/plain")
public String sayHello() {
    return new String("Hello there.");
}

여기서 사용되는 어노테이션 관련 클래스는 restbeans-api.jar에 포함되어 있고 패키지명은 com.sun.ws.rest.api 아래에 있다.

hello 애플리케이션 빌드하기#

애플리케이션을 디플로이하기 전에 자원 클래스를 로드할 클래스를 생성할 필요가 있다. JAX-RS는 이 클래스를 생성할 어노테이션 처리자를 가진다. 그리고 NetBeans 6.0은 어노테이션 처리자를 호출할 필요가 있는 Ant 태스크를 가진다. build-impl.xml에서 그 Ant태스크를 찾을수 있을것이다. 오직 하나의 문제점은 REST지원을 사용할때만 이러한 태스크들이 작동한다는 것이다.

2.png

실제 내용은 다음과 같다.

    <target if="rest.support.on" name="-init-rest">
        <taskdef classname="com.sun.ws.rest.tools.ant.RestBeansProcessorTask" name="restapt">
            <classpath>
                <path path="${j2ee.platform.classpath}"/>
            </classpath>
        </taskdef>
    </target>
    <target depends="-init-rest" if="rest.support.on" name="-rest-post-compile">
        <mkdir dir="${build.generated.dir}/rest-gen"/>
        <restapt destdir="${build.generated.dir}/rest-gen" fork="true" nocompile="true" 
        sourcePath="${src.dir}" sourcedestdir="${build.generated.dir}/rest-gen" xEndorsed="true">
            <classpath>
                <path path="${javac.classpath}"/>
                <path path="${libs.jaxws20.classpath}"/>
                <path path="${j2ee.platform.classpath}"/>
                <pathelement location="${build.web.dir}/WEB-INF/classes"/>
            </classpath>
            <source dir="${src.dir}">
                <include name="**/*.java"/>
            </source>
        </restapt>
        <webproject2:javac destdir="${build.classes.dir.real}" srcdir="${build.generated.dir}/rest-gen"/>
        <copy todir="${build.classes.dir.real}">
            <fileset dir="${build.generated.dir}/rest-gen" includes="**/*.wadl"/>
        </copy>
    </target>

그리고 NetBeans 6.0은 프로젝트 프라퍼티를 통해 REST 지원을 사용하도록 하는 옵션을 포함하지 않는다. 그래서 우리는 수동으로 이 옵션을 사용해야 한다.

1. private.properties 를 열기 위해 Alt+Shift+O 를 실행하고 다음을 추가하라.

rest.support.on=true

2. 프로젝트를 빌드하기 위해 F11를 누르고 RESTBeansResources 클래스를 생성한다. File 탭 아래 build/generated/rest-gen/restbeans 폴더에서 찾을수 있을것이다.

3.png

런타임 퍼즐을 위한 하나 이상의 조각이 있고 그것들은 모두 JAX-RS 런타임인 com.sun.ws.rest.impl.container.servlet.ServletAdaptor가 제공하는 서블릿이다. 위 WEB-INF디렉토리를 보면 서블릿을 로드하는 web.xml파일을 보게 될것이다.

  <servlet>
    <servlet-name>RESTBeans Application</servlet-name>
    <servlet-class>
        com.sun.ws.rest.impl.container.servlet.ServletAdaptor
    </servlet-class>
    <init-param>
      <param-name>resourcebean</param-name>
      <param-value>restbeans.RESTBeansResources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>RESTBeans Application</servlet-name>
    <url-pattern>/restbean/*</url-pattern>
  </servlet-mapping>

어쨌든, web.xml파일의 내용을 배포가 가능하도록 만들지는 않을것이다.

  1. 프로젝트 탭을 교체하기 위해 Ctrl+1 을 눌러라.
  2. 설정파일에서 web.xml 을 열고 XML 뷰로 교체하고 web-app 태그뒤에 위 코드를 추가하라. 그러면 아마도 다음과 같은 파일 내용을 가질 것이다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>RESTBeans Application</servlet-name>
        <servlet-class>
            com.sun.ws.rest.impl.container.servlet.ServletAdaptor
        </servlet-class>
        <init-param>
            <param-name>resourcebean</param-name>
            <param-value>restbeans.RESTBeansResources</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>RESTBeans Application</servlet-name>
        <url-pattern>/restbean/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

애플리케이션 실행하기#

  1. 프로젝트 프라퍼티를 열고 Run 카테고리를 선택하라. 상대 URL을 /restbean/hello로 셋팅하라.
  2. 애플리케이션을 실행하기 위해 F6을 눌러라.

4.png

작동하는 방법#

작동하는 방법에 대해서는 아래의 참고자료에서 상세히 설명된다. RESTful Web Services tutorialGetting Started With RESTful Web Services Development가 특히 더 도움이 된다고 생각한다. 어쨌든 요약해보면 애플리케이션의 흐름이 다음처럼 작동한다고 볼 수 있다.

ServletAdapter => RESTBeansResources => Hello

ServletAdapter 는 JAX-RS 런타임이 제공하고 생성된 RESTBeansResources 클래스를 로드한다. 그리고 애플리케이션 Hello의 REST 자원을 순서대로 제공한다. URL인 /hello/restbean/hello는 다음처럼 분리해서 볼 수 있다.

/hello - sun-web.xml에 설정된 컨텍스트 root
/restbean - web.xml에 설정된 ServletAdapter 에 대한 매핑
/hello - Hello 자원 자체에 @UriTemplate 어노테이션을 사용하여 설정된 Hello 자원에 대한 매핑

작업중인 애플리케이션#

의심할 여지 없이, 애플리케이션은 매우 간단하지만 이 글을 작성하는 시점에 NetBeans 6.0에서 JAX-RS와 작동한다. tutorial에서 제공하는 다른 것들과도 작동하도록 계속 작업될수 있다.

참고자료#

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
1.png 9.1 kB 1 21-Jul-2007 09:51 DongGukLee
png
2.png 34.9 kB 1 21-Jul-2007 09:51 DongGukLee
png
3.png 8.0 kB 1 21-Jul-2007 09:51 DongGukLee
png
4.png 14.1 kB 1 21-Jul-2007 09:51 DongGukLee
« This page (revision-14) was last changed on 22-Jul-2007 14:14 by DongGukLee