Если вы действительно хотите сделать REST с Java, я бы предложил вам использовать реализацию JAX-RS (RESTeasy, Джерси ...).
Если ваша основная проблема заключается в зависимости от контейнера сервлета, вы можете использовать JAX-RS RuntimeDelegate , чтобы зарегистрировать ваше приложение в качестве конечной точки JAX-RS.
// Using grizzly as the underlaying server
SelectorThread st = RuntimeDelegate.createEndpoint(new MyApplication(), SelectorThread.class);
st.startEndpoint();
// Wait...
st.stopEndpoint();
Что касается кодирования GZIP
, то у каждого провайдера JAX-RS есть свои подходы.Джерси предоставляет фильтр для прозрачного выполнения кодирования.RESTEasy предоставляет для этого аннотацию .
РЕДАКТИРОВАТЬ
Я провел несколько небольших тестов.Следующие две вещи определенно подойдут вам, если вы используете Maven .
Использование Jersey + SimpleServer :
public static void main( String[] args ) throws Exception {
java.io.Closeable server = null;
try {
// Creates a server and listens on the address below.
// Scans classpath for JAX-RS resources
server = SimpleServerFactory.create("http://localhost:5555");
System.out.println("Press any key to stop the service...");
System.in.read();
} finally {
try {
if (server != null) {
server.close();
}
} finally {
;
}
}
}
с зависимостями maven
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-simple-server</artifactId>
<version>1.10</version>
</dependency>
Или использование Jersey + Grizzly2 :
public static void main(String[] args) throws Exception {
HttpServer server = null;
try {
server = GrizzlyServerFactory.createHttpServer("http://localhost:5555");
System.out.println("Press any key to stop the service...");
System.in.read();
} finally {
try {
if (server != null) {
server.stop();
}
} finally {
;
}
}
}
с зависимостями maven
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-grizzly2</artifactId>
<version>1.10</version>
</dependency>
Честно говоря, я тоже не смог заставить работать образец RuntimeDelegate
.Конечно, есть способ запустить RESTEasy из коробки, но сейчас я не могу вспомнить его.