Ответ 1
Если вы действительно хотите сделать REST с Java, я предлагаю вам использовать реализацию JAX-RS (RESTeasy, Jersey...).
Если ваша основная проблема связана с зависимостью от контейнера сервлета, вы можете использовать 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.
Использование Джерси + 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 из коробки, но я не могу вспомнить его в данный момент.