Nanohttpd–Java中小巧、易于嵌入的HTTP服务器

2022-02-23 22:25:15

NanoHTTPD是一款轻量级HTTP服务器,设计用于嵌入其他应用程序,根据修改后的BSD许可证发布。

它正在Github上开发,并使用ApacheMaven进行构建;单元测试:

我们';我将使用Maven for build/dep system创建一个自定义HTTP服务器项目。本教程假设您使用的是Unix变体和shell。首先,如果尚未安装,请安装Maven和Java SDK。然后运行:

包裹通讯。实例导入java。伊奥。IOException;导入java。util。地图进口金融机构。伊基。埃洛宁。纳米HTTPD;//注:如果你';重新使用纳米HTTPD>;=3.0.0名称空间不同,//使用下面的://导入组织,而不是上面的导入。纳米HTTPD。纳米httpd;公共类应用程序扩展NanoHTTPD{public App()抛出IOException{super(8080);开始(NanoHTTPD.SOCKET_READ_TIMEOUT,false);System.out.println(";\n运行!将浏览器指向http://localhost:8080/\n";)}public static void main(String[]args){try{new App();}catch(IOException ioe){System.err.println(";无法启动服务器:\n";+ioe)}@覆盖公共响应服务(IHTTPSession session){String msg=";<;html>;body>;<;h1>;Hello server<;/h1>;\n";Map<;String,String>;parms=session.getParms();if(parms.get(";username";)=空){msg+=";<;表单操作=';?';方法=';获取';\n<;p>;您的姓名:<;输入类型=';文本';姓名=';用户名';<;/p>;\n";<;<另外{msg+=";<;p>;你好,";+parms.get(";username";)+"!</p>"; } 返回newFixedLengthResponse(msg+";<;/body>;<;/html>;\n";)}

如果启动正常,请将浏览器指向http://localhost:8080/享受一个网络服务器,它会询问你的名字,并回复问候。

纳米颗粒与Servlet类似,只是它们的外形极为低调。它们为更复杂的服务器应用程序提供了一个易于使用的系统。本文必须用一个例子进行扩展,所以现在来看一下单元测试的用法。https://github.com/NanoHttpd/nanohttpd/blob/master/nanolets/src/test/java/org/nanohttpd/junit/router/AppNanolets.java

我们目前正在从过去几个月集成的许多拉取请求和功能请求中稳定NanoHTTPD。下一个版本很快就会发布,不会再有了#34;预期";在下一个版本之前进行重大更改。如果你想使用最前沿的版本,你可以从Github克隆它,或者从sonatype获得它。org(请参见下面的Maven dependencies/Living on the edge)。

/core–功能齐全的HTTP(s)服务器,由一(1)个Java文件组成,可以为您自己的项目定制/继承。

/示例–关于如何定制纳米HTTPD的简单示例。请参阅HelloServer。java是一款热情欢迎您的杀手级应用程序!

/webserver–独立文件服务器。跑&跑;享受一个流行的应用似乎是通过安卓设备提供文件。

没有固定的配置文件、日志记录、授权等(如果需要,可以自己实现。不过,错误会传递到java.util.logging)

对HEAD、POST和DELETE请求的一些内置支持。不过,您可以轻松实现/定制任何HTTP方法。

持续连接(连接";保持活动";)支持通过单个套接字连接提供多个请求。

运行时扩展支持(服务于特定MIME类型的扩展)——服务于标记格式文件的示例扩展。只需在Web服务器类路径中包含一个扩展JAR就足以加载扩展。

--cors=";http://appOne.company.com, http://appTwo.company.com": 请注意双引号,以便将这两个URL视为单个参数的一部分。

NanoHTTPD是一个基于Maven的项目,部署到central。大多数开发环境都有访问中央存储库的方法。Maven中使用的坐标是:

开发环境的坐标应该与这些坐标相对应。在寻找旧版本时请小心,因为我们已将groupId从com中切换。nanohttpd到org。纳米HTTPD于2015年年中问世。

在gradle中,您可以以相同的方式使用NanoHTTPD,因为gradle访问相同的中央存储库:

只需将名称替换为您想要使用的模块的工件id,gradle就会为您找到它。

在这里,您可以编写自己的org子类。纳米HTTPD。NanoHTTPD用于配置和服务请求。

在这里,您可以编写自己的org子类。纳米HTTPD。NanoWebSocketServer用于配置和服务websocket请求。org中包含了一个小型的标准echo示例。纳米HTTPD。样品。回响调试WebSocketServer。您可以将其作为实现自己的服务的起点。

对于一种更经典的方法,可能只是创建一个HTTP服务器,主要为磁盘上的服务文件提供服务,您可以将该模块与artifactId nanohttpd webserver一起使用。

包含的类组织。纳米HTTPD。SimpleWebServer旨在用作您自己实现的起点,但它也可以按原样使用。按原样启动类将在端口8080上启动HTTP服务器并发布当前目录。

keytool-genkey-keyalg RSA-alias selfsigned-keystore-keystore。jks-storepass password-validity 360-keysize 2048-ext SAN=DNS:localhost,IP:127.0.0.1-validity 9999

这将生成一个名为';密钥库。jks';具有一个名为localhost、IP地址为127.0.0.1的主机的自签名证书。现在你可以使用:

在启动服务器以使NanoHTTPD提供HTTPS连接之前,请确保';密钥库。jks';在你的课堂路径上。