java 写的能够响应浏览器请求的 http 服务器

这只是一个小Demo,话几十分钟搞出来的。

不废话先上代码。

首先是服务端的

package com.cnryb;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import org.apache.http.HttpStatus;

import com.sun.net.httpserver.*;

public class HttpSer {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(
                "127.0.0.1", 8765), 0);
        server.createContext("/",new MyResponseHandler());
        server.setExecutor(null); // creates a default executor
        server.start();

    }
    public static class MyResponseHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            //针对请求的处理部分     
            //返回请求响应时,遵循HTTP协议  
            String responseString = "<font color='#ff0000'>Hello! This a HttpServer!</font>"; 
            //设置响应头  
            httpExchange.sendResponseHeaders(HttpStatus.SC_OK, responseString.length());    
            OutputStream os = httpExchange.getResponseBody();    
            os.write(responseString.getBytes());    
            os.close();  
        }
    }

}

容易出现问题的是端口被占用,解决办法

换一个端口,嘿嘿

 

然后是用java访问该服务器的代码

package com.cnryb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

public class HttpC {

    /**
     * @param args
     * @throws IOException
     * @throws IllegalStateException
     */
    public static void main(String[] args) throws IllegalStateException,
            IOException {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httpPost=new HttpPost("http://127.0.0.1:8765");
//        HttpGet httpgets = new HttpGet("http://127.0.0.1:8765");
//        HttpResponse response = httpclient.execute(httpgets);
        HttpResponse response=httpclient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instreams = entity.getContent();
            BufferedReader bf = new BufferedReader(new InputStreamReader(
                    instreams));
            StringBuilder sb=new StringBuilder();
            String line = null;
            while ((line = bf.readLine()) != null) {
                sb.append(line + "\n");
            }
            System.out.println(sb.toString());
//            httpgets.abort();
            httpPost.abort();
        }
    }

}

这个段代码不只是能够访问这一个服务,别的已经存在的服务器也能够范围,像百度神马的,简单来说就是模拟浏览器请求的

写这些东西的时候,唯一让我纠结的就是那些该死的jar包,为了不让亲们纠结,我把我写好的demo也放上来,里面有jar包的

Live Writer竟然不能放附件??等会儿手动上传吧

 

源代码点这里下载

 

posted @ 2013-06-27 09:11  任跃兵  阅读(7245)  评论(0编辑  收藏  举报
总访问量: