Jetty+Jerseyを動かしてみる


忘れないうちにメモ

## 参考にしたサイト

* [Jersey + Jetty + Gradle でWebアプリケーション作るための勉強してた](http://d.hatena.ne.jp/ryousanngata/20140907/1410107521)
* [MavenのProxy設定](http://www.limy.org/program/java/maven/first.html)

## Requirement

* [NetBeans] \(8.0.1\) を使います
* Mac OS 10.10 で試してます

## JettyをDownload, 起動

[Jetty]の[ダウンロードサイト](http://download.eclipse.org/jetty/)から、最新のリリース "9.2.5.v20141112" (zip) をダウンロードしたら、どこでもいいので解凍する

Terminalから以下のコマンドでJetty起動

```sh
$ cd (解凍した場所)/jetty-distribution-9.2.5.v20141112
$ java -jar start.jar
```

## NetBeansでサンプルプロジェクトを書いてみる

[NetBeans]を起動して、新しいプロジェクトを作ります。

```
File -> New Project...
```

"Maven" category の "Web Application" project を選択

```
Category: "Maven"
Projects: "Web Application"
```

"Projects"ビューで、"com.mycompany.jettyjersey" packageを右クリックして、以下2つのクラスを新規作成する

```java:HelloService.java
package com.mycompany.jettyjersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;


@Path("/hello")
public class HelloService {

    @GET
    public String hello() {
        return "Hello !!";
    }
}
```

```java:Launcher.java
package com.mycompany.jettyjersey;

import java.net.URL;
import java.security.ProtectionDomain;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;


public class Launcher {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        WebAppContext context = new WebAppContext();
        context.setContextPath("/");
        
        ProtectionDomain protectionDomain = Launcher.class.getProtectionDomain();
        URL location = protectionDomain.getCodeSource().getLocation();
        context.setWar(location.toExternalForm());
        
        server.setHandler(context);
        server.start();
        
        try {
            server.start();
            System.err.println("Press ENTER to exit.");
            System.in.read();
            server.stop();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
```

[Jetty]や[Jersey]の.jarが足りなくて、Compile errorが出てるので、 プロジェクトビューの "Project Files/pom.xml" を開き、 &lt;dependencies&gt;...&lt;/dependencies&gt; に以下の記述を追加する

```xml:pox.xmlの&lt;dependencies&gt;の中に追加
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.13</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.13</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.2.5.v20141112</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>9.2.5.v20141112</version>
</dependency>
```

web.xmlを新規作成する

```
File -> New File... -> Web -> Standard Deployment Descriptor
```

```xml:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 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"
         version="2.5">
    <servlet>
        <servlet-name>JettyJerseyApp</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.mycompany.jettyjersey</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.scanning.recursive</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>JettyJerseyApp</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
```

## ビルド

[NetBeans]メニューから

```
Run -> Clean and Build Project
```

Consoleに "SUCCESS" と出て、"JettyJersey/target/JettyJersey-1.0-SNAPSHOT.war" が出来たら成功

## デプロイ (手動)

今回は手動でデプロイする

"JettyJersey/target/JettyJersey-1.0-SNAPSHOT.war" を 
"(解凍した場所)/jetty-distribution-9.2.5.v20141112/webapps" にコピペ

> コピペするだけで、Jettyが勝手にデプロイしてくれます

## アクセスしてみる

http://localhost:8080/JettyJersey-1.0-SNAPSHOT/hello

"Hello !!" と表示されます



[NetBeans]:https://ja.NetBeans.org/
[Jetty]:http://eclipse.org/jetty/
[Jersey]:https://jersey.java.net/