实现Http Serve

一、使用SUN公司在JDK6中提供的新包com.sun.net.httpserver



  JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现,程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求,在这里,我们把一个Http请求和它的响应称为一个交换,包装成HttpExchange类,HttpServer负责将HttpExchange传给HttpHandler实现类的回调方法. 

实现Http Server



  实现Http Server比较简单,我就不我做解释,只要看下面的代码就能明白。 

实现Https Server



  HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,SSL 使用证书来进行验证。对于需要使用 SSL 来保证通信安全的客户端和服务器,都必须创建证书。JSSE 使用的证书要用与 J2SE 一起发布的 Java keytool 来创建。用下列命令来为 HTTP 服务器创建一个 RSA 证书。 

prompt> keytool -genkey -keystore serverkeys -keyalg rsa -alias qusay 

这个命令会产生一个由别名 qusay 引用的证书,并将其保存在一个名为 serverkeys 的文件中。产生证书的时候,这个工具会提示我们输入一些信息。 



下面代码演示了怎样创建自己的Http Server 和Https Server:

Java代码  收藏代码
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.net.InetSocketAddress;
  5. import com.sun.net.httpserver.HttpExchange;
  6. import com.sun.net.httpserver.HttpHandler;
  7. import com.sun.net.httpserver.HttpServer;
  8. public class MyHTTPServer {
  9.   public static void main(String[] args)
  10.   {
  11.     try {
  12.       //实现HTTP SERVER
  13.       HttpServer hs = HttpServer.create(new InetSocketAddress(8888),0);// 设置HttpServer的端口为80
  14.       hs.createContext("/hujun"new MyHandler());// 用MyHandler类内处理到/的请求
  15.       hs.setExecutor(null); // creates a default executor
  16.       hs.start();
  17.       //实现HTTPS SERVER
  18.       HttpsServer hss = HttpsServer.create(new InetSocketAddress(443),0);  //设置HTTPS端口这443
  19.       KeyStore ks = KeyStore.getInstance("JKS");   //建立证书库
  20.       ks.load(new FileInputStream("证书名" ), "密码");  //载入证书
  21.       KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");  //建立一个密钥管理工厂
  22.       kmf.init(ks, "密码");  //初始工厂
  23.       SSLContext sslContext = SSLContext.getInstance("SSLv3");  //建立证书实体
  24.       sslContext.init(kmf.getKeyManagers(), nullnull);   //初始化证书
  25.       HttpsConfigurator conf = new HttpsConfigurator(sslContext);  //在https配置
  26.       hss.setHttpsConfigurator(conf);   //在https server载入配置
  27.       hss.setExecutor(null); // creates a default executor
  28.       hss.createContext("/"new MyHandler());// 用MyHandler类内处理到/的请求
  29.       hss.start();
  30.     } catch (Exception e){
  31.       e.printStackTrace();
  32.     }
  33.   }
  34. }
  35. class MyHandler implements HttpHandler {
  36.   public void handle(HttpExchange t) throws IOException {
  37.     InputStream is = t.getRequestBody();
  38.     String response = "<font color='#ff0000'>come on baby</font>";
  39.     t.sendResponseHeaders(200, response.length());
  40.     OutputStream os = t.getResponseBody();
  41.     os.write(response.getBytes());
  42.     os.close();
  43.   }
  44. }

二、使用Jetty



  Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。



  需要最少的包: 

  commons-logging.jar 

  javax.servlet.jar 

  org.mortbay.jetty.jar 

  org.mortbay.jmx.jar 



下面直接看代码,以嵌入模式启动Jetty,目前貌似不支持HTTPS

Java代码  收藏代码
  1. import org.mortbay.http.HttpContext;
  2. import org.mortbay.http.HttpServer;
  3. import org.mortbay.http.SocketListener;
  4. import org.mortbay.http.handler.ResourceHandler;
  5. public class JettySample {
  6.   public static void main(String[] args) throws Exception
  7.   {
  8.     //创建Jetty HttpServer对象
  9.     HttpServer server = new HttpServer();
  10.     //在端口8080上给HttpServer对象绑上一个listener,使之能够接收HTTP请求
  11.     SocketListener listener = new SocketListener();
  12.     listener.setPort(8080);
  13.     server.addListener(listener);
  14.     //创建一个HttpContext,处理HTTP请求。
  15.     HttpContext context = new HttpContext();
  16.     //用setContextPath把Context映射到(/web)URL上。
  17.     context.setContextPath("/web");
  18.     //setResourceBase方法设置文档目录以提供资源
  19.     context.setResourceBase("C:\\j2sdk1.4.1_05");
  20.     //添加资源处理器到HttpContext,使之能够提供文件系统中的文件
  21.     context.addHandler(new ResourceHandler());
  22.     server.addContext(context);
  23.     //启动服务器
  24.     server.start();
  25.   }
  26. }

Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。

三、使用tomcat embedded



  Tomcat5中的Embeded版本,为大家在应用中集成完整的Web服务提供了尽可能大的空间,不仅使开发者容易获得对标准HTTP的处理,还有SSL的通讯处理,使开发者很容易就可以对原有非Web系统进行扩展以支持瘦客户端应用,通向Web大门的钥匙已经放在这里,剩下的就是看你怎样来发挥了。下面是示例代码:

Java代码  收藏代码
  1. package tomcat;
  2. import java.io.File;
  3. import java.net.InetAddress;
  4. import org.apache.catalina.Context;
  5. import org.apache.catalina.Engine;
  6. import org.apache.catalina.Host;
  7. import org.apache.catalina.connector.Connector;
  8. import org.apache.catalina.startup.Embedded;
  9. public class EmbeddedTomcat {
  10.   public static void main(String args[]) {
  11.    try {
  12.      // Create an embedded server
  13.      Embedded embedded = new Embedded();
  14.      String path = new File(".").getCanonicalPath();
  15.      embedded.setCatalinaHome(path);
  16.      // Create an engine
  17.      Engine engine = embedded.createEngine();
  18.      // Create a default virtual host
  19.      Host host = embedded.createHost("localhost", path + "/webapps");
  20.      engine.addChild(host);
  21.      engine.setDefaultHost(host.getName());
  22.      // Create the ROOT context
  23.      Context rootCxt = embedded.createContext("", path + "/webapps/ROOT");
  24.      rootCxt.setPrivileged(true);
  25.      host.addChild(rootCxt);
  26.      // Install the assembled container hierarchy
  27.      embedded.addEngine(engine);
  28.      // Assemble and install a default HTTP connector
  29.      embedded.addConnector(embedded.createConnector(InetAddress.getByName("127.0.0.1"), 8080false));
  30.      // Start the embedded server
  31.      embedded.start();
  32.    }catch( Exception e ) {
  33.      e.printStackTrace();
  34.   }
  35.   }
  36. }

转自:http://blog.163.com/web_promise/blog/static/1096316552011224101531794/

实现Http Server相关推荐

  1. 【Sql Server】数据库的3大服务

    在数据库SQL SERVER中,处理常用的sql server数据库引擎,还有其他3大服务,分别是集成服务,报表服务,分析服务. 集成服务商可以配置包,这里的包可以理解是数据库引擎里的用户数据库.可以 ...

  2. 【Sql Server】DateBase-自动化

    强大的SQL Server有着神奇的自动化功能,来处理一些人为处理不了的事情! 自动化功能:T-sql语言,系统命令.脚本语言.复制命令.创建角色.索引重建.报表 管理元素:作业.警报.操作员.计划 ...

  3. 【Sql Server】DateBase-触发器

    触发器是数据库中一种特殊的对象,当使用触发器时,一旦执行某个操作,就会触发执行的一段代码! 语法: Create trigger 名 On[table|view] { For after instea ...

  4. 【Sql Server】DateBase-视频总结

    最近看完了数据库视频,内容繁杂,但也不是无迹可寻! 这是第三遍关于数据库的学习了,随着一遍一遍的深入,更加了解了它的全貌,虽然现在对于数据库还不能到达熟练操作的地步,但至少放我手上不在犯怵了. SQL ...

  5. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  6. 分布式TensorFlow集群local server使用详解

    通过local server理解分布式TensorFlow集群的应用与实现. ​​简介 TensorFlow从0.8版本开始,支持分布式集群,并且自带了local server方便测试. Local ...

  7. 合肥工业大学—SQL Server数据库实验十:用户及其权限管理

    用户及其权限管理 1. 创建登录名Mylog及密码 2. 创建用户user2关联登录名 3. 创建角色role1 4. 对用户user2及角色role1授权 5. 验证用户授权 6. 收回用户权限 1 ...

  8. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  9. 用户自定义协议client/server代码示例

    用户自定义协议client/server代码示例 代码参考链接:https://github.com/sogou/workflow message.h message.cc server.cc cli ...

  10. mysql navicat导入bcp_SQL Server中BCP导入导出用法详解

    bcp命令是SQL Server提供的一个快捷的数据导入导出工具.使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据.bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于 ...

最新文章

  1. ubuntu bind9 配置简单记录
  2. 互联网学院大数据开发专业欢迎加入
  3. 机器学习模型解释性工具SHAP
  4. Mac 开发中如何设置 关闭 以及最小化 最大化按钮事件处理
  5. Docker:易于构建,运行,完成!
  6. 如何用各种编程语言杀死一条龙
  7. [原创][Windows] Win7安装visual c++ 2015 redistributable x64失败
  8. [原]逆向iOS SDK -- “添加本地通知”的流程分析
  9. 基于图像的相机定位/SLAM分类
  10. sit是什么环境_DEV SIT UAT PET SIM PRD PROD常见环境英文缩写含义
  11. java 高效列转行,java 列转行
  12. 杨辉三角(C语言简单版)
  13. java多态怎么学_Java学习笔记---多态
  14. 大型电商架构亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构(七)
  15. 原生JS实现躲避粒子小游戏
  16. 操作系统|时间片轮转调度算法(RR)
  17. 我的世界手机版怎么增加服务器,我的世界手机版服务器怎么创建
  18. web实验报告——JSP动态网页编程
  19. 浙江诸暨培训心得总结
  20. 你的孩子,未来20年将面临怎样的阶层分化?

热门文章

  1. 论文笔记-《深度卷积神经网络的发展及其在计算机视觉领域的应用》
  2. 邮件系统extmail搭建手册
  3. 重磅!微信 3.0 客户端支持刷朋友圈了!从此爱上上班还是无心上班?
  4. 【FFmpeg4.1.4 编码】h265编码
  5. python-微信公众个性二维码生成-生成自己名片二维码-链接二维码【超酷】
  6. 基于JSP+Servlet+MySQL的在线问卷调查系统(附论文)
  7. 插件 阴阳师 百鬼夜行
  8. 使用Photoshop分解gif
  9. 利用阿里云邮件推送免费发邮件,每天免费200封,速度快,还高大上
  10. Samba服务------SMB协议