Несколько месяцев назад я начал работать над небольшим персональным веб-проектом на Java. Я хотел использовать мое приложение на микрокомпьютере (Raspberry PI). Существует много (может быть, слишком много) мощных веб-фреймворков Java, но я не смог найти фреймворк Java-микро, чтобы удовлетворить меня (с небольшим размером, прост в изучении и использовании).
После периода исследований и изучения других микро-фреймворков (java и non java — javascript, python) я создал Pippo . Поучительно освежить свои знания с помощью концепций HTTP / HTTPS и быть передовым (Servlet 3.x) ? Также эта структура играет образовательную роль для моих младших коллег.
Попытка создать веб-фреймворк с открытым исходным кодом micro java, который также прост в освоении, как и его использование, была первой вещью, которая была принята во внимание, когда Pippo начал свое путешествие.
С самого начала я хотел, чтобы это было понятно и взломано. Это означает, что вы должны читать очень мало (некоторые примеры кода), чтобы создать что-то полезное, и вы можете добавить свой вклад в каркас за короткое время. Вы занятой разработчик, вы хотите выполнить задачу не читать книги.
Я за прозрачность. Я не хочу скрывать природу HTTP-протокола «запрос-ответ» и добавлять ненужные слои, которые усложняют ситуацию. Мы играем с такими концепциями, как: приложение , запрос , ответ , маршрут , маршрутизатор , RouteHandler , RouteContext , RouteDispatcher .
Pippo может использоваться в малых и средних приложениях, а также в приложениях, основанных на архитектуре микросервисов.
Я верю в простоту, и я попытался разработать эту структуру с этими словами в моей голове.
Ядро маленькое (около 100 тыс. , С одной крошечной зависимостью slf4j-api), и мы намереваемся сделать его как можно более маленьким / простым и добавить новые функциональные возможности в модули pippo и сторонние репозитории / модули. Тем не менее, он поставляется со многими функциями и позволяет добавлять новые функции.
Фреймворк поставляется с множеством полезных модулей ( Spring , Guice , Metrics , Session cookie, Controller , движки типов контента — Json, Xml , Yaml , Text ) и многими демонстрационными приложениями.
Вы не обязаны использовать определенный шаблонизатор или встроенный веб-сервер. Кроме того, у вас есть несколько готовых опций (см.
Разделы « Шаблоны» и «
Сервер» на сайте документации).
Я думаю, что Pippo отлично справляется со смешиванием серверных страниц с RESTful API. У нас есть демо, которое показывает вам демонстрацию интеграции Pippo AngularJS .
Достаточно с введением. Пришло время «покажи мне код».
Ниже приведен классический «Hello World» в Pippo с использованием встроенного веб-сервера:
public class HelloWorld { public static void main(String[] args) { Pippo pippo = new Pippo(); pippo.getApplication().GET("/", (routeContext) -> routeContext.send("Hello World!")); pippo.start(); } }
Вы можете запустить HelloWorld из вашей IDE (или командной строки) как обычное (настольное) приложение.
Порт по умолчанию для встроенного веб-сервера — 8338, поэтому откройте интернет-браузер и введите
http: // localhost: 8338, чтобы увидеть результат.
Я покажу вам более сложный пример. Мы разбили наше приложение на две части для лучшей читаемости.
Сначала мы должны создать BasicApplication (расширяет приложение) и добавить несколько маршрутов:
public class BasicApplication extends Application { @Override protected void onInit() { // send 'Hello World' as response GET("/", (routeContext) -> routeContext.send("Hello World")); // send a file as response GET("/file", (routeContext) -> routeContext.send(new File("pom.xml")); // send a json as response GET("/json", (routeContext) -> { Contact contact = createContact(); routeContext.json().send(contact); }); // send xml as response GET("/xml", (routeContext) -> { Contact contact = createContact(); routeContext.xml().send(contact); }); // send an object and negotiate the Response content-type, default to XML GET("/negotiate", (routeContext) -> { routeContext.xml().negotiateContentType().send(contact); }); // send a template as response GET("/template", (routeContext) -> { routeContext.setLocal("greeting", "Hello"); routeContext.render("hello"); }); } private Contact createContact() { return new Contact() .setId(12345) .setName("John") .setPhone("0733434435") .setAddress("Sunflower Street, No. 6"); } }
где
Контакт является простым POJO:
public class Contact { private int id; private String name; private String phone; private String address; // getters and setters }
Последний шаг — запустить Pippo с вашим приложением в качестве параметра:
public class BasicDemo { public static void main(String[] args) { Pippo pippo = new Pippo(new BasicApplication()); pippo.start(); } }
Pippo запускает встроенный веб-сервер (находится в вашем classpath) и делает приложение доступным через порт 8338 (значение по умолчанию). Откройте интернет-браузер и проверьте маршруты, заявленные в приложении:
- HTTP: // локальный: 8338
- HTTP: // локальный: 8338 / файл
- HTTP: // локальный: 8338 / JSON
- HTTP: // локальный: 8338 / XML
- HTTP: // локальный: 8338 / переговоры
- HTTP: // локальный: 8338 / шаблон
О Пиппо можно сказать намного больше, но эта статья предназначена только для первого контакта.
Если вы чувствуете, что я пробудил ваше любопытство, и вы хотели бы узнать об этом больше, то эти несколько строк достигли своей цели.
Полезные ссылки
https://github.com/decebals/pippo
http://www.pippo.ro