Jetty ile standalone (tek başına çalışan java uygulaması) bir rest uygulaması yapılabilir. Bunun için aşağıdaki gibi gerekli bağımlılıklar pom.xml'e eklenir:
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25.1</version>
</dependency>
</dependencies>
Jetty ve Jersey ile ilgili bağımlılıklar eklenmiştir.
Servis kodumuz aşağıdaki gibi olsun
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("msg")
public class MyMessage {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getMessage() {
return "My message\n";
}
@GET
@Path("j")
@Produces(MediaType.APPLICATION_JSON)
public String getMessageJson() {
return "{\"message\":\"My message\"}";
}
@GET
@Path("jo")
@Produces(MediaType.APPLICATION_JSON)
public MsgObj getMessageJsonObject() {
MsgObj msgObj=new MsgObj();
msgObj.setName("World");
msgObj.setTitle("Hello");
return msgObj;
}
}
Üç tane servis metodu tanımlanmıştır ve GET ile mesaj ve nesne döndürmektedirler. Servis hazır olduğunda göre artık uygulamayı yapabiliriz :
import java.util.logging.Level;
import java.util.logging.Logger;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.servlet.ServletContainer;
public class Main {
public static void main(String[] args) {
Server server = new Server(8080);
ServletContextHandler ctx =
new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ctx.setContextPath("/");
server.setHandler(ctx);
ServletHolder serHol = ctx.addServlet(ServletContainer.class, "/rest/*");
serHol.setInitOrder(1);
serHol.setInitParameter("jersey.config.server.provider.packages",
"com.fibiler.services");
try {
server.start();
server.join();
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} finally {
server.destroy();
}
}
}
Uygulama çalıştırıldığında artık 8080 portu dinlenecektir. Tüm servislerin /rest/ şeklinde çağrılması gerekir. com.fibiler.services ile belirtilen servislerin bulunduğu pakettir. Servislerin paketi eklenmesi gerekmektedir. Uygulama çalıştığında ekranda aşağıdaki gibi bir mesaj gözükecektir:
2017-06-21 13:38:22.617:INFO::main: Logging initialized @552ms to org.eclipse.jetty.util.log.StdErrLog
2017-06-21 13:38:22.712:INFO:oejs.Server:main: jetty-9.4.6.v20170531
2017-06-21 13:38:23.421:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@51bf5add{/,null,AVAILABLE}
2017-06-21 13:38:23.656:INFO:oejs.AbstractConnector:main: Started ServerConnector@72ef8d15{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2017-06-21 13:38:23.656:INFO:oejs.Server:main: Started @1593ms
Artık servisleri
http://localhost:8080/rest/msg
http://localhost:8080/rest/msg/j
http://localhost:8080/rest/msg/jo
şeklinde çağırdığınızda cevap alabileceksiniz.
Bu örnek
http://zetcode.com/articles/jerseyembeddedjetty/ sayfasından alınmıştır.