轻量级的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——构建高效微型Web服务》 在当今互联网时代,HTTP服务器作为Web应用的核心组件,扮演着至关重要的角色。轻量级HttpServer,正如其名,是一种资源占用少、启动快速、可扩展性强的服务器软件,...
NULL 博文链接:https://jj871231.iteye.com/blog/1290265
本项目聚焦于轻量级的C++实现的HTTP服务器(httpserver)和HTTP客户端(httpclient),利用mongoose库作为基础,为开发者提供了一种简单且高效的方法来添加HTTP功能,而无需依赖如libcurl这样的大型库。 HTTP(超...
本文将基于“轻量级消息推送client&server”这一主题,深入探讨如何构建一个简单而有效的消息推送系统,主要关注Android平台以及Java后端。 标题:“轻量级消息推送client&server” 描述中提到,开发者在尝试使用...
在轻量级开发中,Servlet可以作为控制器处理HTTP请求,并调用业务逻辑。 2. **JSP(JavaServer Pages)与JSTL(JavaServer Pages Standard Tag Library)**:JSP用于创建视图层,将HTML模板与Java代码结合,而JSTL...
JDK6的新特性之一:Desktop类和SystemTray类 JDK6的新特性之二:使用JAXB2来实现对象与XML之间...JDK6的新特性之五:轻量级Http Server JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,
可以非常容易的将其嵌入到 WSGI 服务器里。并且支持分布式 Session!
这是一个轻量级编写的 HTTP 服务器,源生支持 websocket,你可以非常容易的搭建一个 Restful API。其中一些请求的转发等参考了 SpringMVC 的设计。
《轻量级Java EE企业应用实战 第3版》是一本深入浅出地讲解如何构建高效、灵活的企业级应用的书籍。源代码作为辅助学习的重要部分,可以帮助读者更好地理解和实践书中介绍的技术和概念。在这个压缩包中,我们主要...
《轻量级J2EE企业应用实战》这本书深入浅出地介绍了如何在企业环境中使用轻量级Java EE技术栈来构建高效、可扩展的应用程序。轻量级框架因其低开销、快速开发和易于维护的特点,已经成为现代企业级开发的重要选择。...
ArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来.zipArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来....
一个小巧轻量级http服务器,可以用于局域网文件共享,绿色免安装,还有一个很好的用途就是为路由器刷机提供SFTP、FTP替代。对没有内置SFTP、FTP支持的路由器,你可以用电脑上的miniweb和路由器上的wget传输文件
《轻量级Java EE企业应用实战(第三版)》是一本深入浅出的教程,旨在帮助读者掌握在企业环境中使用Java EE进行轻量级开发的技术和实践。这本书涵盖了从基础到进阶的多个主题,包括Java语言核心、Servlet、JSP、JDBC...
轻量级 Http Server API 插入式注解处理API(Pluggable Annotation Processing API) 用Console开发控制台程序 对脚本语言的支持(如:ruby,groovy,javascript) Common Annotations ——————————————...
Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...
【标题】轻量级JavaEE企业级应用实战全部代码 在JavaEE开发领域,轻量级框架因其高效、灵活的特点,被广泛应用于各种企业级项目中。本资源提供了全面的实战代码,帮助开发者深入理解并掌握轻量级JavaEE技术栈的精髓...
《Java_Web轻量级开发全体验》这本书主要聚焦于Java Web开发的轻量级框架和技术,旨在帮助开发者实现高效、灵活的Web应用构建。在Java Web开发领域,轻量级框架以其简洁、快速和可扩展性受到广泛关注,是现代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....
《轻量级Java EE企业应用实战(第三版)》是一本深入浅出的教程,主要针对Java EE技术在实际企业应用中的轻量化解决方案。这本书的第十章内容虽然被压缩包包含,但整体书籍覆盖的范围可能更为广泛。下面将根据章节...