JHttp
[中文文档] [English README]
Автор: xiaozhuai
Email: 798047000@qq.com
JHttp — это небольшая реализация HTTP-сервера.
Он может анализировать GET-запросы и формы POST (поддерживается только x-www-form-urlencoded), а также предоставляет простой маршрутизатор.
Не используйте его в проектах, требующих высокой эффективности, так как он основан на пуле потоков и не поддерживает событийно-управляемый подход (аналогично Apache).
Но вы можете использовать его в приложении для Android.
ВНИМАНИЕ
Для порта < 1024 требуются права суперпользователя.
Если вы используете его на Android, вы не можете запускать сервер в потоке пользовательского интерфейса.
См. Main.java
public class Main {
static HttpServer server;
static final int PORT = 8080;
public static void main(String[] args) {
HttpLog.setLogLevel(HttpLog.LOG_LEVEL_DEBUG); //LOG_LEVEL_INFO по умолчанию
// когда происходит 404, рекомендуется использовать эту функцию для определения пользовательской страницы ошибки
HttpConfig.addCustomPageAction(404, (request, response) -> response.append("404 Not Found, Powered by JHttp"));
try {
server = new HttpServer(PORT);
// пример маршрута, анонимный внутренний класс или лямбда (на Java 8)
server.addRouter("/", new IHttpRouter() {
@Override
public void onRoute(HttpRequest request, HttpResponse response) {
response.append("hello");
}
});
// пример регулярного маршрута
server.addRouterRegex("/article/(\\w+)", (request, response) -> {
String action = request.getPathinfo().group(1); // (\\w+) возможно добавить, удалить, прочитать и т. д.
response.append(action+" an article");
});
// пример GET-запроса
server.addRouter("/user", (request, response) -> {
String user = request.get("user", "");
response.append("привет, " + user);
});
// пример файла ответа
server.addRouter("/file", (request, response) -> {
try {
response.contentType("text/plain");
response.file("/Users/xiaozhuai/Desktop/test.txt");
} catch (IOException e) {
e.printStackTrace();
}
});
//пример контроллера, помеченное знаком «?» действие будет именем метода действия
server.addController("/comment/(?<action>\\w+)", ExampleCommentController.class);
server.serv();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Для router
или regexRouter
помните, что нельзя использовать переменные-члены для передачи параметров функции, это вызовет конкуренцию между несколькими потоками.
Конечно, если вы используете Java 8, лямбды — хорошая идея. С лямбдами вам не нужно об этом беспокоиться.
Что касается controller
, каждый раз, когда маршрутизатор обращается к контроллеру, создаётся новый экземпляр контроллера, поэтому вы можете делать всё, что угодно, включая использование переменных-членов для передачи параметров функций.
Спасибо за работу этим замечательным людям. : )
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )