Несколько месяцев назад я начал работать над небольшим персональным веб-проектом на 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