Очень часто возникает задача написать быстро простой сервер для тестирования клиента или развертки простого веб приложение. В 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. Данный фреймворк даст вам быстрый старт и возможность легкого расширения.