Войти
Написать нам в Viber

Сервер на Java в пару строк

Очень часто возникает задача написать быстро простой сервер для тестирования клиента или развертки простого  веб приложение. В Java достаточно сложно  создать простую инфраструктуру сервера с начального уровня при применении Spring Framework, по сравнению с такими языками как Python или Ruby. Но прогресс не стоит на месте и новые технологии позволяют написать сервер всего в пару строк. В этой статье мы рассмотрим два фреймворка, которые позволяют это сделать, а именно: Spring Boot и Spark Web Framework.
         Хочется  заметить, что Spring Boot по сравнению с Spark Web Framework представляет гораздо больше возможностей, так как основан на Spring Framework, но мы будем рассматривать эти фремворки в контексте быстрого и удобного инструмента для написания простых веб приложений.
 
Spring Boot
         Spring Boot был разработан для упрощения рутинной работы при написания инфраструктуры сервера , базирующуюся на Spring Framework.
         Вы можете использовать Spring Boot для создания автономных Java-приложений в форме большого JAR файла, который может быть просто запущен с помощью команды  java -jar или более традиционных для веб приложений  WAR файлов.
Давайте теперь напишем наш небольшой  hello-word сервер.
Для этого вам понадобиться: любая среда разработки;JDK 1.8 или более новая версия ; Maven 3.0 и выше.
Сначала нужно настроить наши зависимости и плагины в pom.xml файле следующим образом:
 
 
 
 
 
 
 

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

 
Создать главный класс hello/SampleController.java в котором будет находиться весь код нашего сервера:
 
 
 
 

package hello;
 
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
 
@RestController
@EnableAutoConfiguration
public class HelloApplication {
 
    @RequestMapping("/hello ")
    String hello() {
        return "hello world!";
    }
 
    public static void main(String[] args) throws Exception {
        SpringApplication.run(HelloApplication.class, args);
    }
}

 

 
 
@EnableAutoConfiguration сообщает Spring Boot, чтобы он добавил бины, основанные на том, что лежит в classpath и различные настройки окружения.
@RestController говорит что данный класс также является обработчиком запросов от клиента и в ответ ему возращает какой-либо ресурс, в нашем случаии просто строку.
@RequestMapping обозначает, какой метод будет обрабатывать запрос, переданный  на адрес "/hello".
         Как правило, мы добавляем еще @EnableWebMvc для приложения Spring MVC, но Spring Boot добавляет его автоматически, когда он видит spring-webmvc в classpath. Эта аннотация обозначает приложение как веб-приложения и активирует необходимые модули, такие как создание DispatcherServlet.
         Метод main() использует метод Spring Boot SpringApplication.run() для запуска приложения. Вы заметили, что не было ни одной строки XML? А также деплоймент дескриптора web.xml. Это веб-приложение является 100% написанным на Java, и вы не должны иметь дело с настройкой любой инфраструктуры.
Теперь соберите приложение через команду mvn clean package и запуститеjava -jar <name_of_web-application>. Теперь если вы перейдете  по адресу localhost:8080/hello то увидите строчку "hello world!".
Как видите это чрезвычайно легко писать сервер с использованием  Spring Boot.
Spark Web Framework
         Первое что хочется уяснить, что не стоит путать фреймворк с Apache Spark, который является каркасом для реализации распределенной обработки больших данных.
         Фреймворк представляет собой простую и легкую веб-платформу на Java созданная для быстрой разработки. Создание Spark было первоначально вдохновленно веб-фреймворком Sinatra, но цель его создания состоит в том, чтобы не конкурировать с Sinatra, или другими похожими веб-платформами на разных языках. Мотив создания Spark заключается в том, чтобы обеспечить Java альтернативой для разработчиков, которые хотят (или обязаны), разрабатывать свои веб-приложения только на Java. Фреймворк построен на лямбдах которые появились в  Java 8, что позволяет делать типичное приложение Spark менее многословным, чем большинство приложений, написанных на других веб-структурах Java.
И так, чтобы написать и запустить приложение нам понадобиться те же JDK и сборщик Maven, что и для Spring Boot. Наш pom.xml будет выглядит следующим образом:
 

<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.5.3</version>
</dependency>

 
Главный класс:

import static spark.Spark.*;
 
public class HelloWorld {
    public static void main(String[] args) {
        get("/hello", (request, response) -> "hello world!");
    }
}

 
Та даам! мы написали сервер! Запустите приложение и перейдите на адрес localhost:4567/hello и вы увидите всеми известную строчку "hello world!"
 
 
Заключение
         Мы рассмотрели два фреймворка для быстрого создания веб приложения, они показали что и на Java можно создать сервер в пару строк. Spark Web Framework по сравнению с Spring Boot невероятно компактный и если вы уже запустили Spring приложение то, наверное, заметили какое большое количество зависимостей оно подтягивает для своего запуска, тогда как для Spark нужно только 3 зависимости. Мало того Spring еще поднимает в своем контексте невероятное количество бинов (около 200) из которых вы используете только незначительную часть. Так что если вам нужно написать тестовый сервер, который представляет собой просто набор заглушек на какое-то REST API, то лучше использовать Spark. Если же ваше приложение будет бурно развиваться, требовать поддержку взаимодействия с базой данных, обеспечения ролей для пользователей и прочие важные атрибуты современных веб систем, то в этом случае используйте Spring Boot. Данный фреймворк даст вам быстрый старт и возможность легкого расширения.