轻量级的HttpServer
在JDK1.6里面,提供了一个轻量级的HttpServer实现,我们先来看官方的文档怎么说:
Provides a simple high-level Http server API, which can be used to build embedded HTTP servers.
这个HttpServer并非专门的类库,而是在com.sun.net.httpserver包中,提供了简单可控的高层次的Http 服务器端API。利用这个HttpServer,可以构建内置(Embedded)的Server,支持HTTP和HTTPS协议,提供了HTTP1.1的部分实现;对于还没有实现的内容,可以通过扩展API实现。
如果想实现自己的API,必须实现HttpHandler接口,Server会通过回调Handler来处理客户端的请求。HttpServer会将Request和Response包装称HttpExchange类,Server负责执行HttpHandler中的handle回调方法,返回给客户端响应。
上面提到的HttpHandler、HttpExchange都是Server的相关类,我们会仔细看下这几个类。
我有这么一个需求,我启动了个后台应用,在后台进行业务处理;现在我想监控下服务的状态、或者对服务进行写额外的操作,可以把HttpServer启动,作为一个简单的Server使用,至少对于并发性要求不高的监控和后台应用来说是满足要求的。
下面我们看下Server端的代码:
public class TServer { public static void main ( String[] args ) { String serv = "localhost"; InetSocketAddress address = new InetSocketAddress(serv, 9988); try { HttpServer server = HttpServer.create(address, 5); HttpHandler handler = new EchoHandler(); server.createContext("/tc", handler); server.setExecutor(null); server.start(); System.out.println("server started at " + new Date()); } catch (IOException e) { e.printStackTrace(); } } static class EchoHandler implements HttpHandler { public void handle ( HttpExchange httpExchange ) throws IOException { System.out.println(httpExchange.getRequestURI().toString()); String resp = "Hello world!"; httpExchange.sendResponseHeaders(200, resp.length()); OutputStream os = httpExchange.getResponseBody(); os.write(resp.getBytes()); os.flush(); } } }
Server已经启动,可以启动浏览器,输入
http://localhost:9988/tc
可以看到输出结果:Hello world!
下面我们看下HttpHandler的内容,
public abstract interface com.sun.net.httpserver.HttpHandler { public abstract void handle(com.sun.net.httpserver.HttpExchange arg0) throws java.io.IOException; }
这是个接口,自有的Handler实现必须实现这个方法,是Server能够根据请求回调这个Handler实现,返回结果。
下面我们再看下HttpExchange这个类,这个是包装了Request和Response的主要类,是我们接收请求、处理逻辑、返回结果的合体。
HttpExchange提供了几个方法:
getRequestMethod():获得请求的方法,支持GET和POST请求 getRequestHeaders():获得请求的Headers getRequestBody():获得请求的输入流,输入流数据消费完的话,输入流关闭 getResponseHeaders():出去content-length字段外,可以设置任何Response Header sendResponseHeaders(int,long):返回Headers getResponseBody():获得相应的输入流,如果响应完成,输出流必须关掉。
还有几个类需要注意下,如果在工作中用到的话:
Authenticator:对于HTTP的身份认证进行基本的操作。 HttpPrincipal:表明身份认证的身份。 HttpContext:对Server的执行路径进行映射 Filter:对于请求进行处理:可以先处理或者后处理,注册在HttpContext中。
Spring里面有个HttpHandler的实现,大家可以参考下:
org.springframework.remoting.httpinvoker.SimpleHttpInvokerServiceExporter
说到Server,HttpServer确实是很简单;因为简单,所以功能有限。下面我们说下工作中可能用到的Server:
Jetty:提倡把Jetty放到应用中,作为内嵌的服务器,功能足够强大,也能够满足平常的需求;支持Servlet和war包部署,配置启动;最新的文档见这里:http://www.eclipse.org/jetty/documentation/current/
Grizzly,Netty:Grizzly没有用过,Netty曾经分析过:http://isilic.iteye.com/category/254278,准确的说,这两个不应该是Server,是Network Framework。是编写基于NIO的网络通信框架,当然兼有Server的功能,你也可以把它当做Server,不过有点大材小用了。提到Netty,就不得不提到Mina,这几个网络通信框架的功能类似,只是在实现细节上有区别。其实这些NIO框架,熟悉一个就足够了,剩下的就是实现细节和内存使用上了。
最后说下这个信息:
@SuppressWarnings("restriction")
这个是对注解字段的警告抑制,因为我们在类中使用了HttpServer。
HttpServer is not accessible due to restriction on required library rt.jar
这个类的获取是受限的,所以会有编译器警告,使用上面的注解可以去掉这些注解。
因为轻巧,所以强大。这也算是简单就是美的体现吧
相关推荐
轻量级HttpServer.zip
NULL 博文链接:https://jj871231.iteye.com/blog/1290265
轻量级C++实现的httpserver和httpclient,给予mongoose,代码量很小,可以方便嵌入到自己的项目中,为C++项目添加http的功能,抛弃libcurl这种重型库
JDK6的新特性之一:Desktop类和SystemTray类 JDK6的新特性之二:使用JAXB2来实现对象与XML之间...JDK6的新特性之五:轻量级Http Server JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,
可以非常容易的将其嵌入到 WSGI 服务器里。并且支持分布式 Session!
这是一个轻量级编写的 HTTP 服务器,源生支持 websocket,你可以非常容易的搭建一个 Restful API。其中一些请求的转发等参考了 SpringMVC 的设计。
ArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来.zipArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来....
轻量级 Http Server API 插入式注解处理API(Pluggable Annotation Processing API) 用Console开发控制台程序 对脚本语言的支持(如:ruby,groovy,javascript) Common Annotations ——————————————...
一个小巧轻量级http服务器,可以用于局域网文件共享,绿色免安装,还有一个很好的用途就是为路由器刷机提供SFTP、FTP替代。对没有内置SFTP、FTP支持的路由器,你可以用电脑上的miniweb和路由器上的wget传输文件
KestrelHttpServer一个用于ASP.NET Core的跨平台Web服务器
JDK6的新特性之五_轻量级HttpServer JDK6的新特性之七_用Console开发控制台程序 JDK6的新特性之八_嵌入式数据库Derby JDK6的新特性之六_插入式注解处理API JDK6的新特性之九_CommonAnnotations JDK6的新特性...
Java 6 提供了一个轻量级的纯 Java Http 服务器的实现。下面是一个简单的例子: public static void main(String[] args) throws Exception{ HttpServerProvider httpServerProvider = HttpServerProvider....
qtWeb开源,适用于嵌入式轻量级HttpServer
轻量级Java http服务器和Web应用程序框架。 例 基本路线 HttpServer server = HttpServer . bind( 8080 ); server . accept( new Controller () { @Get ( " / " ) public HttpHandler index () { return ok();...
HtZip是一个轻量级的HTTP Server,通过仅解压缩所请求的文件来提供服务器上Zip文件之外的文件。
这是一个基于Qt开发的轻量级HTTP/HTTPS服务器 底层有QTcpSocket、QSslSocket两个版本,分别对应HTTP和HTTPS。 用到的Qt库有: core network concurrent testlib(测试用,运行不需要) OpenSSL(如果需要HTTPS) 不...
轻量级 Java Web 框架 基于 JDK 8 规范 基于 Servlet 3.0 规范 零配置 REST 服务接口 基于 JSON 传输 目前提供 MVC ... 解决方案 ...
sandbox是一个基于django框架开发的轻量级办公平台,主要模块有:权限控制、资产(库存)管理、设备管理、客户信息管理和工单流程管理,其目的在于建立一套规范化、统一化和清晰化的标准服务流程,能够清晰的处理、...
C++网络库POCO的文档。POCO是轻量级的网络库,适用于网络开发,如HTTP等
现在支持多httpserver! 参见“httpserver.lua”。 网络更新 2015-03-25 现在支持cosocket! 什么是cosocket? 'cosocket' 是 lnet httpserver 中 http 处理程序的套接字 API wapper。 它提供了 tcp/udp 块操作,...