`

轻量级的HttpServer

 
阅读更多

轻量级的HttpServer

JDK1.6里面,提供了一个轻量级的HttpServer实现,我们先来看官方的文档怎么说:

Provides a simple high-level Http server API, which can be used to build embedded HTTP servers.

 

官方参考文档见这里: http://docs.oracle.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html

 

这个HttpServer并非专门的类库,而是在com.sun.net.httpserver包中,提供了简单可控的高层次的Http 服务器端API。利用这个HttpServer,可以构建内置(Embedded)Server,支持HTTPHTTPS协议,提供了HTTP1.1的部分实现;对于还没有实现的内容,可以通过扩展API实现。

如果想实现自己的API,必须实现HttpHandler接口,Server会通过回调Handler来处理客户端的请求。HttpServer会将RequestResponse包装称HttpExchange类,Server负责执行HttpHandler中的handle回调方法,返回给客户端响应。

上面提到的HttpHandlerHttpExchange都是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这个类,这个是包装了RequestResponse的主要类,是我们接收请求、处理逻辑、返回结果的合体。

 

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

 

说到ServerHttpServer确实是很简单;因为简单,所以功能有限。下面我们说下工作中可能用到的Server

Jetty:提倡把Jetty放到应用中,作为内嵌的服务器,功能足够强大,也能够满足平常的需求;支持Servletwar包部署,配置启动;最新的文档见这里:http://www.eclipse.org/jetty/documentation/current/

 

Grizzly,NettyGrizzly没有用过,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

    《轻量级HttpServer——构建高效微型Web服务》 在当今互联网时代,HTTP服务器作为Web应用的核心组件,扮演着至关重要的角色。轻量级HttpServer,正如其名,是一种资源占用少、启动快速、可扩展性强的服务器软件,...

    java轻量级httpserver

    NULL 博文链接:https://jj871231.iteye.com/blog/1290265

    轻量级C++实现的httpserver和httpclient

    本项目聚焦于轻量级的C++实现的HTTP服务器(httpserver)和HTTP客户端(httpclient),利用mongoose库作为基础,为开发者提供了一种简单且高效的方法来添加HTTP功能,而无需依赖如libcurl这样的大型库。 HTTP(超...

    轻量级消息推送client&server

    本文将基于“轻量级消息推送client&server”这一主题,深入探讨如何构建一个简单而有效的消息推送系统,主要关注Android平台以及Java后端。 标题:“轻量级消息推送client&server” 描述中提到,开发者在尝试使用...

    Java Web轻量级开发全体验11代码

    在轻量级开发中,Servlet可以作为控制器处理HTTP请求,并调用业务逻辑。 2. **JSP(JavaServer Pages)与JSTL(JavaServer Pages Standard Tag Library)**:JSP用于创建视图层,将HTML模板与Java代码结合,而JSTL...

    JDK1.6新特性与实战例子

    JDK6的新特性之一:Desktop类和SystemTray类 JDK6的新特性之二:使用JAXB2来实现对象与XML之间...JDK6的新特性之五:轻量级Http Server JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,

    轻量级的 HTTP Server,支持线程和协程模式

    可以非常容易的将其嵌入到 WSGI 服务器里。并且支持分布式 Session!

    Python 超轻量级的 HTTP Server实例代码

    这是一个轻量级编写的 HTTP 服务器,源生支持 websocket,你可以非常容易的搭建一个 Restful API。其中一些请求的转发等参考了 SpringMVC 的设计。

    轻量级Java EE企业应用实战 第3版 纯 源代码

    《轻量级Java EE企业应用实战 第3版》是一本深入浅出地讲解如何构建高效、灵活的企业级应用的书籍。源代码作为辅助学习的重要部分,可以帮助读者更好地理解和实践书中介绍的技术和概念。在这个压缩包中,我们主要...

    轻量级j2ee企业应用实战

    《轻量级J2EE企业应用实战》这本书深入浅出地介绍了如何在企业环境中使用轻量级Java EE技术栈来构建高效、可扩展的应用程序。轻量级框架因其低开销、快速开发和易于维护的特点,已经成为现代企业级开发的重要选择。...

    ArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来

    ArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来.zipArchLinux下轻量级c++服务器,根据Tinywebserver和《Linux高性能服务器编程》中的HTTP服务器升级而来....

    miniweb一个小巧轻量级http服务器

    一个小巧轻量级http服务器,可以用于局域网文件共享,绿色免安装,还有一个很好的用途就是为路由器刷机提供SFTP、FTP替代。对没有内置SFTP、FTP支持的路由器,你可以用电脑上的miniweb和路由器上的wget传输文件

    轻量级javaEE企业应用实战(第三版)源代码

    《轻量级Java EE企业应用实战(第三版)》是一本深入浅出的教程,旨在帮助读者掌握在企业环境中使用Java EE进行轻量级开发的技术和实践。这本书涵盖了从基础到进阶的多个主题,包括Java语言核心、Servlet、JSP、JDBC...

    JDK 6.2.3文文档.rar

    轻量级 Http Server API 插入式注解处理API(Pluggable Annotation Processing API) 用Console开发控制台程序 对脚本语言的支持(如:ruby,groovy,javascript) Common Annotations ——————————————...

    JAVA里使用Jetty作为轻量级嵌入式的Web容器

    Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...

    轻量级JavaEE企业级应用实战全部代码

    【标题】轻量级JavaEE企业级应用实战全部代码 在JavaEE开发领域,轻量级框架因其高效、灵活的特点,被广泛应用于各种企业级项目中。本资源提供了全面的实战代码,帮助开发者深入理解并掌握轻量级JavaEE技术栈的精髓...

    java_web轻量级开发全体验

    《Java_Web轻量级开发全体验》这本书主要聚焦于Java Web开发的轻量级框架和技术,旨在帮助开发者实现高效、灵活的Web应用构建。在Java Web开发领域,轻量级框架以其简洁、快速和可扩展性受到广泛关注,是现代Web开发...

    JDK+6.0+ZH+API.chm.zip

    JDK6的新特性之五_轻量级HttpServer JDK6的新特性之七_用Console开发控制台程序 JDK6的新特性之八_嵌入式数据库Derby JDK6的新特性之六_插入式注解处理API JDK6的新特性之九_CommonAnnotations JDK6的新特性...

    轻量级HTTP客户端API框架,让Java发送HTTP HTTPS请求不再难.rar

    Java 6 提供了一个轻量级的纯 Java Http 服务器的实现。下面是一个简单的例子: public static void main(String[] args) throws Exception{  HttpServerProvider httpServerProvider = HttpServerProvider....

    轻量级Java EE 企业应用实战(第三版)

    《轻量级Java EE企业应用实战(第三版)》是一本深入浅出的教程,主要针对Java EE技术在实际企业应用中的轻量化解决方案。这本书的第十章内容虽然被压缩包包含,但整体书籍覆盖的范围可能更为广泛。下面将根据章节...

Global site tag (gtag.js) - Google Analytics