关闭

java HttpServer构建http服务器

253人阅读 评论(0) 收藏 举报
分类:
介绍摘自网络:

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

 

   我想开发一个j2se的小程序,它能接受网页传来的参数,并对传来参数做些处理。我希望这个小程序即可能接受网页传过来的参数,也能接受OutputStream流传来参数,JDK6新特性能够实现。

一、提供http服务的类

Java代码  收藏代码
  1. package com.tdt.server.httpserver;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStream;  
  8. import java.net.InetSocketAddress;  
  9.   
  10. import com.sun.net.httpserver.HttpExchange;  
  11. import com.sun.net.httpserver.HttpHandler;  
  12. import com.sun.net.httpserver.HttpServer;  
  13. import com.sun.net.httpserver.spi.HttpServerProvider;  
  14.   
  15. /** 
  16.  * @project SimpleHttpServer 
  17.  * @author sunnylocus 
  18.  * @vresion 1.0 2009-9-2 
  19.  * @description  自定义的http服务器 
  20.  */  
  21. public class MyHttpServer {  
  22.     //启动服务,监听来自客户端的请求  
  23.     public static void httpserverService() throws IOException {  
  24.         HttpServerProvider provider = HttpServerProvider.provider();  
  25.         HttpServer httpserver =provider.createHttpServer(new InetSocketAddress(6666), 100);//监听端口6666,能同时接 受100个请求  
  26.         httpserver.createContext("/myApp"new MyHttpHandler());   
  27.         httpserver.setExecutor(null);  
  28.         httpserver.start();  
  29.         System.out.println("server started");  
  30.     }  
  31.     //Http请求处理类  
  32.     static class MyHttpHandler implements HttpHandler {  
  33.         public void handle(HttpExchange httpExchange) throws IOException {  
  34.             String responseMsg = "ok";   //响应信息  
  35.             InputStream in = httpExchange.getRequestBody(); //获得输入流  
  36.             BufferedReader reader = new BufferedReader(new InputStreamReader(in));  
  37.             String temp = null;  
  38.             while((temp = reader.readLine()) != null) {  
  39.                 System.out.println("client request:"+temp);  
  40.             }  
  41.             httpExchange.sendResponseHeaders(200, responseMsg.length()); //设置响应头属性及响应信息的长度  
  42.             OutputStream out = httpExchange.getResponseBody();  //获得输出流  
  43.             out.write(responseMsg.getBytes());  
  44.             out.flush();  
  45.             httpExchange.close();                                 
  46.               
  47.         }  
  48.     }  
  49.     public static void main(String[] args) throws IOException {  
  50.         httpserverService();  
  51.     }  
  52. }  

 

二、测试类

Java代码  收藏代码
  1. package com.tdt.server.test;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStream;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.URL;  
  10. import java.util.concurrent.ExecutorService;  
  11. import java.util.concurrent.Executors;  
  12.   
  13. /** 
  14.  * @project SimpleHttpServer 
  15.  * @author sunnylocus 
  16.  * @vresion 1.0 2009-9-2 
  17.  * @description 测试类   
  18.  */  
  19. public class Test {  
  20.     public static void main(String[] args) {  
  21.         ExecutorService exec = Executors.newCachedThreadPool();  
  22.         // 测试并发对MyHttpServer的影响  
  23.         for (int i = 0; i < 20; i++) {  
  24.             Runnable run = new Runnable() {  
  25.                 public void run() {  
  26.                     try {  
  27.                         startWork();  
  28.                     } catch (IOException e) {  
  29.                         e.printStackTrace();  
  30.                     }  
  31.                 }  
  32.             };  
  33.             exec.execute(run);  
  34.         }  
  35.         exec.shutdown();// 关闭线程池  
  36.     }  
  37.   
  38.     public static void startWork() throws IOException {  
  39.         URL url = new URL("http://127.0.0.1:6666/myApp");  
  40.         HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
  41.         urlConn.setDoOutput(true);  
  42.         urlConn.setDoInput(true);  
  43.         urlConn.setRequestMethod("POST");  
  44.         // 测试内容包  
  45.         String teststr = "this is a test message";  
  46.         OutputStream out = urlConn.getOutputStream();  
  47.         out.write(teststr.getBytes());  
  48.         out.flush();  
  49.         while (urlConn.getContentLength() != -1) {  
  50.             if (urlConn.getResponseCode() == 200) {  
  51.                 InputStream in = urlConn.getInputStream();  
  52.                 BufferedReader reader = new BufferedReader(new InputStreamReader(in));  
  53.                 String temp = "";  
  54.                 while ((temp = reader.readLine()) != null) {  
  55.                     System.err.println("server response:" + temp);// 打印收到的信息  
  56.                 }  
  57.                 reader.close();  
  58.                 in.close();  
  59.                 urlConn.disconnect();  
  60.             }  
  61.         }  
  62.     }  
  63. }  

 

注意:经过我测试发现httpExchange.sendResponseHeaders(200, responseMsg.length())有bug,如果responseMsg里面包含中文的话,客户端不会收到任何信息,因为一个汉字用二个字节表示。

应修改为:

httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, responseMsg.getBytes().length);

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

java httpServer端接受post请求数据并使用3DES+base64加密解密demo希望能够对您有帮助

技术真实难者不会,会者不难。希望这篇文章对大家有帮助
  • Juny965174016
  • Juny965174016
  • 2016-06-22 20:06
  • 1691

jdk自带轻量级http server例子

JDK6 提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现,程序员必须自己实现HttpHandler接口,Htt...
  • earbao
  • earbao
  • 2014-11-17 16:08
  • 5652

构建高性能的 HTTP 服务器 (一)--初涉Java HTTP 服务器

简介:   Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们...
  • qq282133
  • qq282133
  • 2013-06-26 23:33
  • 1361

java 手动写http静态网页服务器

本文仅仅是实现一个功能非常有限的http服务器。我仅仅实现了请求一个html和请求一个jpg图片。方式只支持GET。不支持http选项。错误代码仅仅会返回200 400 404.支持xml对服务器的配置。本博客内容仅仅完全处于自身娱乐,高手可直接略过。 实现思想 1用java的sax解析...
  • qq_27245709
  • qq_27245709
  • 2016-06-30 10:02
  • 776

用JAVA实现一个简单地Http服务器

SimpleHttpServer.java import java.io.FileInputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import j...
  • qqMCY
  • qqMCY
  • 2014-02-03 19:01
  • 2230

HttpServer的简单实现_Java

最近项目开发中需要向第三方服务发送Http请求并接收返回消息,本来考虑使用SoapUI工具来模拟,但由于交互的复杂性(服务端每次返回的数据不一样,且服务端需要在响应请求后的一段时间后要主动请求客户端提供的接口,请求内容与上一次响应有相)无法使用SoapUI来实现(我也不是非常会用,可能SoapUI可...
  • qq354960984
  • qq354960984
  • 2016-12-07 09:10
  • 106

一个简单的Httpserver以及获取post提交的参数

以下代码是我从网上找来的,但是一直获取不到post提交的参数,最后经过我的修改,终于可以得到post提交的数据。因为本人在网上找了很久都没有找到相关的资料,特意发出来希望能帮到大家,有什么不足的地方还请大神们指正,小弟不胜感激。 Httpserver代码 1 public ...
  • u014425096
  • u014425096
  • 2017-05-26 15:04
  • 235

移动端搭建Http Server(五)—— 实现URL路由模块

在前面几篇文章中已经实现了移动端Server的关键前两步:监听远程连接和解析HTTP Headers中的数据,本文将要设计一下路由规则1.URL路由规则简单来讲就是客户端请求一个URL,服务器分发给哪个服务来处理移动端Server要实现两个功能: 让其他设备打开APP中内置好的页面 接收其他设备传输...
  • jianiuqi
  • jianiuqi
  • 2016-11-27 16:11
  • 812

使用Java socket简单模拟HTTP服务器

使用Java socket模拟HTTP服务器
  • hohoo1990
  • hohoo1990
  • 2016-02-19 15:18
  • 1915

一个简易的java http服务器

TTP是个大协议,完整功能的HTTP服务器必须响应资源请求,将URL转换为本地系统的资源名。响应各种形式的HTTP请求(GET、POST等)。处理不存在的文件请求,返回各种形式的状态码,解析MIME类型等。但许多特定功能的HTTP服务器并不需要所有这些功能。例如,很多网站只是想显示“建设中“的消息。...
  • WALLEZhe
  • WALLEZhe
  • 2017-03-16 16:32
  • 843
    个人资料
    • 访问:328848次
    • 积分:4790
    • 等级:
    • 排名:第7029名
    • 原创:26篇
    • 转载:819篇
    • 译文:0篇
    • 评论:13条
    最新评论