Java Simple Server
2 поста
2 поста
1) Иди к психологу. Иначе это будет очень большой проблемой;
2) Будь умным, имей большой кругозор (читай как можно больше книг). Это даст тебе возможность контролировать себя и УНИЖАТЬ ЛЮДЕЙ БЕЗ РУКОПРИКЛАДСТВА)) Так гораздо приятнее. Смешать с говном, но не как быдло, а красиво. В идеале без оскорблений;
3) В полиции тверди, что тебя унижали много лет, а руководство школы (директор, завуч), классный руководитель и учителя игнорировали данный факт.
4) Найди себе хобби
Удачи.
Обновление плагина до версии 1.2
Добавил сравнение методов API.
Серым помечены методы, которые есть в обоих версиях API. Зеленым помечены методы, которые есть в этой версии API и нет в другой, а красным - наоборот. Зеленые и серые методы кликабельны. При нажатии открывается подробное описание метода в соответствующей версии API.
Лойс, пи****ка, досвидония (© Doctor DIY)
Банальный пример, почему так.
Программист - специальность техничнее некуда.
но если в 6 классе завалил пение и рисование, а в 9-м литературу, историю и обществознание - хер тебе, а не технарь
Спрашиваешь про абстракцию в программировании, а тебе в ответ молчат. Спрашиваешь, что вообще значит слово "абстракция", а в ответ - тишина. И вот сижу я в такие моменты и понимаю, что это слово, его значение и визуальные примеры, дети изучают на уроках ИЗО...
Вот честно. Технари, завалившие пение, ИЗО, лит-ру и т.д. - нахрен не нужны. Они слишком скудоумны, не способны на нестандартные решения, несамостоятельны и наивны. Такие технари, как в прочем и гуманитарии без знания техническхи предметов - нахрен не нужны.
Минусы
Ну вот прям в виде скрина?
Особенно для постов в горячем?
Прям даже иногда обновлять картинку в посте?
Ты садишься и делаешь свой.
По крайней мере мне так было проще.
А началось все с того, что документация для RPC API Bitcoin Core на официальном сайте отображается кривовато.
Тут мы видим псевдо json и описание полей. Длинное описание переходит на новую строку и ломает удобочитаемость и понимание вложений в объектах json... "Ну "штош". Давайте поправим, а заодно запихнем это дело в студию" - подумал я и приступил.
Ожидал, что с ходу ничего не выйдет, но нет. Сложность написания плагина зависит от целей. Для работы плагина прям в редакторе, а уж тем более с языковой разметкой - придется вникнуть в дебри SDK JB)
Мне же вполне хватило Tool Window, которое по факту представляет из себя приложение на Java Swing. Окно - это уже готовый JFrame, который вызывается студией (только в plugin.xml надо указать, какой класс дергать). В остальном можно писать обычное swing приложение. В наличии у SDK есть унаследованные элементы интерфейса с более простым конструктором. Например вместо JLabel можно использовать JBLabel. Для поддержки темной и светлой темы вообще ничего не надо. Делаем все для одной из тем, а остальное студия преобразит сама. Публикация в JB Market тоже проста до безобразия)
В прочем это пост о плагине BitcoinDocs, так что к нему и вернемся.
Чего-то подобного я не нашел.
Что делает плагин. Шастает на сайт https://bitcoincore.org/en/doc/, и парсит его с помощью Jsoup. Вытаскивает все версии для доков. Вытаскивает все API для конкретной версии. Вытаскивает все методы для конкретного API. Дергает доку и парсит ее, исправляя вид и повышая читабельность.
Проще посмотреть видео.
Знаю, знаю. Ничего особенного.
Ничего особенного ни в исходниках под лицензией MIT, ни в самом плагине, доступном в маркете JB (а значит доступна установка прямо из студии) и так же под лицензией MIT.
В будущем хочу добавить сравнение методов в двух версиях (на выбор юзера) доков, ибо они могут удаляться и появляться.
P.S.
Все. Похвастался. Ставим плюс и листаем дальше) Всем спасибо.
В добрый дальний🌈
Продолжим собирать критику.
Погнали)
После прочтения комментариев к прошлому посту (особенно от @Deadwire, @MJcom и @user5097930) внес ряд изменений в библиотеку.
Коротко:
Аннотации. Да они появились (аж целых две)
Логирование. Пока не везде, но уже имеется.
Автостартер сервера.
Есть два варианта запуска библиотеки:
С аннотациями
Без аннотаций
С аннотациями
Без наследования
С наследованием
Итого надо запомнить, что:
Метод или класс, который запускает сервер, должен быть аннотирован @InitWebServer.
@InitWebServer принимает два параметра: port и threads. По умолчанию port равен 8080, а threads равен 1.
Метод, который реализует логику конечной точки, должен быть аннотирован @Endpoint.
@Endpoint принимает четыре параметра: path, httpMethod, statusCode и filterContentLength. По умолчанию httpMethod равен HttpMethod.GET, statusCode равен 200, а filterContentLength равен -1.
Без аннотаций
Запуск без аннотаций больше похож на старый подход (тем не менее старая реализация помечена как устаревшая в первую очередь из-за изменений в классе Server. Теперь используется класс ServerNext).
Ничего умнее для названия класса ServerNext в голову не пришло.
Кто хочет - может кинуть в меня тапком. Для этого даже есть канал в дискорде))
Кидать в ZooMMaX`а
Главное помни - эта либа не подойдёт для разработки сложной бизнес логики.
©Я
Возможно кому-то, кроме меня, пригодится такая реализация java сервера. Это opensource библиотека, распространяемая по лицензии Apache (возможно стоит сменить лицензию?), которая была создана в тот момент, когда стало понятно, что я раз за разом использую один и тот же код. Базируется эта либа на com.sun.net.httpserver и доступна в Maven Central.
Запустим сервер!
Довольно просто и быстро. Сервер запускается на указанном порту и создает thread executor с пулом потоков равным количеству потоков процессора. При запуске вешает родительский поток в ожидание на две секунды. В stdout плюнет вот такое:
Теперь можно проверить работает ли сервер. Делается предельно просто. Открыть браузер и стукнуть по адресу http://localhost:8080/alife. В ответ придет текст life. (Думаю всем понятно, что GET запрос можно не только браузером сделать).
Добавим endpoint!
Main.java
После запуска, в stdout плюнет
Это был пример создания конечной точки с методом GET. С методом POST создается схожим образом.
Для всего остального есть мастеркард HttpHandler. Почему так? Ну мне другое пока не особо нужно, вот и не добавил. По той же причине ответы принимают String (я в основном с json работаю).
Короче кому надо - юзайте на здоровье. Кто хочет помочь - прошу на GitHub проекта. Есть пожелания - пишите тут или в issue на гите.
P.S.
Попытка попасть на habr