Создание Java-сервера с отдыхом - PullRequest
5 голосов
/ 17 декабря 2011

Мне нужно создать сервер отдыха и клиент.

Я наткнулся на этот учебник , в котором используются сокеты. Я хочу иметь возможность использовать вызовы REST, возможно, HTTP, потому что клиенты на самом деле будут на разных языках.

Вместо использования Socket API от java.net.* что я должен использовать? если я использую Socket API, могу ли я использовать c ++ и php для связи с этим сервером? или я должен пойти с REST?

Любые направления приветствуются.

Ответы [ 8 ]

7 голосов
/ 17 декабря 2011

Есть много вещей, которые вы можете использовать для создания служб отдыха, а затем они могут быть использованы практически всем. Особенно удивительно, что вы можете использовать их в своем веб-браузере, просто потому, что мы все с ними знакомы.

Когда мне нужно «быстрое и грязное» решение для отдыха, я использую Restlet - я не буду утверждать, что это единственное решение, но это самое простое, с которым я когда-либо работал. Я буквально сказал на встрече: «Я мог бы поднять XYZ через 10 минут». Кто-то еще на совещании позвал меня на это, и, конечно же, используя Restlet, я смог получить работающий REST-сервер, работающий с (очень простыми) функциями, которые, как я сказал, я получу на совещании. Это было довольно гладко.

Вот сервер barebones, у которого есть один метод, возвращающий текущее время. Запуск сервера и нажатие 127.0.0.1:12345/sample/time вернет текущее время.

import org.restlet.Application;
import org.restlet.Component;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.data.Protocol;
import org.restlet.routing.Router;

/**
 * This Application creates an HTTP server with a singple service
 * that tells you the current time.
 * @author corsiKa
 */
public class ServerMain extends Application {

    /**
     * The main method. If you don't know what a main method does, you 
     * probably are not advanced enough for the rest of this tutorial.
     * @param args Command line args, completely ignored.
     * @throws Exception when something goes wrong. Yes I'm being lazy here.
     */
    public static void main(String...args) throws Exception {
        // create the interface to the outside world
        final Component component = new Component();
        // tell the interface to listen to http:12345
        component.getServers().add(Protocol.HTTP, 12345);
        // create the application, giving it the component's context
        // technically, its child context, which is a protected version of its context
        ServerMain server = new ServerMain(component.getContext().createChildContext());
        // attach the application to the interface
        component.getDefaultHost().attach(server);
        // go to town
        component.start();

    }

    // just your everyday chaining constructor
    public ServerMain(Context context) {
        super(context);
    }

    /** add hooks to your services - this will get called by the component when
     * it attaches the application to the component (I think... or somewhere in there
     * it magically gets called... or something...)
     */
    public Restlet createRoot() {
        // create a router to route the incoming queries
        Router router = new Router(getContext().createChildContext());
        // attach your resource here
        router.attach("/sample/time", CurrentTimeResource.class);
        // return the router.
        return router;
    }

}

А вот «текущий ресурс времени», который он использует:

import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;

/**
 * A resource that responds to a get request and returns a StringRepresentaiton
 * of the current time in milliseconds from Epoch
 * @author corsiKa
 */
public class CurrentTimeResource extends ServerResource {

    @Get // add the get annotation so it knows this is for gets
    // method is pretty self explanatory
    public Representation getTime() {
        long now = System.currentTimeMillis(); 
        String nowstr = String.valueOf(now); 
        Representation result = new StringRepresentation(nowstr);
        return result;
    }
}
2 голосов
/ 17 декабря 2011

Обычно вы не создаете сервер.Вы создаете веб-приложение и развертываете его на сервере или в контейнере сервлетов.Некоторые контейнеры сервлетов встраиваются в ваше веб-приложение, например, Jetty.Контейнеры для сервлетов без популяции - Tomcat, Glassfish, Jetty и т. Д.

Для Restlet это не контейнер сервлетов.Это фреймворк, позволяющий создавать приложения wep с стилями RESTful.Так что это не следует путать.

Если вы решите использовать контейнер сервлета, то проблема в том, как вы можете создать веб-приложение со стилями RESTful.ОТДЫХ - это не технология, а принцип дизайна.Это концепция того, как вы должны создать интерфейс.

Дизайн REST не имеет состояния, поэтому вам не нужно сохранять состояние транзакции.Вся информация из запроса должна быть достаточной для составления запроса на клиент.

Существует несколько фреймворков сервлетов, которые позволяют легко реализовывать стили REST.Некоторые из них очень сложные, например Spring Framework.

2 голосов
/ 17 декабря 2011

JAX-RS - это API для REST в Java.Существует множество реализаций, но основными из них являются Jersey (эталонная реализация), Apache CXF и Restlet.

1 голос
/ 17 декабря 2011

Скачать JBoss 7. Проблема решена.

Вот спокойный сервис:

@Path("/myservice")
public class MyService {

    @GET
    @Produces(MediaTypes.TEXT_PLAIN)
    public String echoMessage(@QueryParam("msg") String msg) {
        return "Hello " + msg;
    }
}

Создать WAR.Развертывание.Откройте браузер и зайдите http://myserver/myapp/myservice?msg=World. Готово!

0 голосов
/ 12 марта 2017

Также вы можете увидеть мой очень простой пример реализации сервера REST.

0 голосов
/ 06 января 2012

Я использую JBoss 6 с RestEasy .Я создал учебник, расположенный здесь .Я надеюсь, что это поможет вам.

0 голосов
/ 17 декабря 2011

Это самый лучший.Spring MVC, который имеет много возможностей REST сам по себе.Это займет всего один файл JAR для включения.И вы все готовы использовать все его возможности.Даже такой простой, как описанный ниже парень объяснил в JBOSS, а также гораздо большую гибкость.

http://java.dzone.com/articles/spring-30-rest-example

0 голосов
/ 17 декабря 2011

Я бы сказал, пойти с сервисом RESTful на основе HTTP. Это быстро становится стандартом де-факто. Проверьте мой ответ на этот аналогичный вопрос для плюсов и минусов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...