Статьи

Pippo — Micro Java Web Framework


Несколько месяцев назад я начал работать над небольшим персональным веб-проектом на 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 (значение по умолчанию).
Откройте интернет-браузер и проверьте маршруты, заявленные в приложении:

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

Полезные ссылки
https://github.com/decebals/pippo
http://www.pippo.ro