1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xie-jc-tiny-http-server

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

TinyHttpServer - Легковесный HTTP-сервер

Основные характеристики

  1. Не зависит от каких-либо библиотек или фреймворков помимо стандартной библиотеки Java
  2. Использует неблокирующий ввод-вывод на основе паттерна Reactor для обеспечения многопоточной среды
  3. Предоставляет API для работы с HTTP-сервисами, перехватом запросов, ответами, статическими ресурсами, куками и сессиями
  4. Включает в себя инструменты для парсинга и генерации JSON, а также для логирования
  5. Оптимизирован для повышения производительности HTTP-сервиса за счет использования буферов вне кучи и LRU-кэша для статических ресурсов

Быстрый старт

public static void main(String[] args){
    int port = 80;
    HttpServer server = new HttpServer(port);
    server.serve("/hello", Http.Method.Get, (req, resp) -> {
       resp.write("Hello, TinyHttpServer") 
    });
    server.start();
}

Документация API

HttpServer

  • HttpServer(int port)

    Самый простой конструктор для HttpServer, при этом количество рабочих потоков равно 2 * количеству доступных ядер процессора, плюс 2

  • HttpServer(int port, int threads)

    Требует номер порта и количество рабочих потоков- public HttpServer(int port, int threads, int fileCacheSize, int cachedFileMaxSize);

    В TinyHttpServer встроен LRU-кэш для файлов, который кэширует часто используемые статические ресурсы, чтобы избежать ввода-вывода с диска. Обычно размеры файлов HTML, CSS и JS, необходимых для веб-браузеров, находятся в пределах десятков до сотен килобайт, и хранение их в памяти является приемлемым. fileCacheSize указывает, сколько статических ресурсов должно быть вмещено в кэш. cachedFileMaxSize указывает максимальный размер файла, который будет кэшироваться. Файлы, превышающие этот размер, не будут кэшироваться.

  • void serve(String url, Http.Method method, HttpService service); где Http.Method — это enum, содержащий значения: Http.Method.GET, Http.Method.PUT, Http.Method.POST, Http.Method.DELETE и Http.Method.ANY. Если в методе HttpServer.serve передать Http.Method.ANY, это эквивалентно регистрации для GET и POST методов. Определение HttpService:

        public interface HttpService {
            void serve(HttpRequest req, HttpResponse resp);
        }

    Этот интерфейс используется как функциональный, чтобы люди могли его реализовать.

    Это означает, что метод method можно использовать для доступа к интерфейсу, URL которого задан параметром url, и определения действий, выполняемых для этого HTTP-запроса, в объекте HttpService, а также возврата соответствующего HTTP-ответа.

  • void filter(String urlPattern, Http.Method method, HttpFilter filter); urlPattern означает, что он может быть использован не только как обычный строковый литерал, но и как простое регулярное выражение. filter также представляет собой интерфейс с одним методом, определенный следующим образом:

        public interface HttpFilter {
            boolean filter(HttpRequest req, HttpResponse resp);
        }

    Метод HttpFilter.filter возвращает булево значение, которое указывает, прошел ли запрос фильтрацию.

  • void staticResourceDir(String dir); Путь к директории с статическими ресурсами передается в метод, что позволяет статическим ресурсам в этой директории быть доступными по HTTP.

HttpRequest- HttpSession getSession();

Получить объект HttpSession- setCookie(String key, String value)

Установить Cookie для следующего запроса от клиента

  • setCookie(String key, String value, int seconds)

    Аналогично предыдущему, но с добавлением времени жизни

  • void forward(String url)

    Перенаправить запрос на новый URL

  • String getParam(String paramName)

    Получить параметр HTTP запроса

  • String getHeader(String headerName)

    Получить значение по ключу HTTP заголовка

  • String getCookie(String cookieName)

    Получить значение Cookie

  • String body()

    Получить тело HTTP запроса

HttpResponse

  • void setStatusCode(int code)

    Установить код состояния ответа HTTP

  • void writeText(String content)

    Записать строку данных в тело HTTP запроса, что заменит предыдущее содержимое

  • void writeText(String ...contents)

    Записать несколько строк данных в тело HTTP запроса, что заменит предыдущее содержимое

  • void writeTextAppend(String content)

    Добавить строку данных в конец тела HTTP запроса

  • void writeAsJSON(Object obj)

    Записать объект Java в тело HTTP запроса, что автоматически преобразует его в формат JSON, пожалуйста, убедитесь, что объект имеет конструктор по умолчанию

  • void sendRedirect(String url)

    Перенаправить запрос на новый URL

  • void sendRedirectPermanently(String url)

    Постоянно перенаправить запрос на новый URL

  • void setHeader(String key, String value)

    Установить строку заголовка ответа HTTP, что добавит её в конец

HttpSession

  • Object getAttribute(String key)

  • void setAttribute(String key, Object value)

Примеры```java

public static void main(String[] args) throws IOException { HttpServer server = new HttpServer(80, 1); server.serve("/hello", Http.Method.GET, (req, resp) -> { resp.writeText("Привет", "мир"); }); server.serve("/home", Http.Method.GET, ((req, resp) -> { String name = req.getParam("name"); int id = Integer.parseInt(req.getParam("id")); String client = req.getHeader(HttpRequest.Header.UserAgent); resp.writeText("Это ваш дом, " + name + " id:" + id + " из " + client); })); }

        сервер.начать();
    }

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Миниатюрный и простой HTTP-сервер на Java без каких-либо зависимостей Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xie-jc-tiny-http-server.git
git@api.gitlife.ru:oschina-mirror/xie-jc-tiny-http-server.git
oschina-mirror
xie-jc-tiny-http-server
xie-jc-tiny-http-server
master