一个可以work的Http Server示例

如下示例是一个抄袭过来的Http Server示例,mark一下以便查找


import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.StringTokenizer;


public class HttpServer {
    private static final int HTTP_PORT = 8080;


    public ServerSocket getServer() throws Exception 
    {
        return new ServerSocket(HTTP_PORT);
    }


    public void run() 
    {
        ServerSocket listen;


        try 
        {
            listen = getServer();


            while(true) 
            {
                Socket client = listen.accept();
                ProcessConnection cc = new ProcessConnection(client);
            }


        } 
        catch(Exception e) 
        {
            System.out.println("Exception: " + e.getMessage());
        }
    }


    public static void main(String argv[]) throws Exception 
    {
        HttpServer httpserver = new HttpServer();
        httpserver.run();
    }


}
 


class ProcessConnection extends Thread 
{
    Socket client;
    BufferedReader is;
    DataOutputStream os;


    public ProcessConnection(Socket s) 
    {
        client = s;


        try 
        {
            is = new BufferedReader(new InputStreamReader(client.getInputStream()));
            os = new DataOutputStream(client.getOutputStream());
        } catch (IOException e) {
            System.out.println("Exception: "+e.getMessage());
        }


        this.start();
    } 


    public void run() 
    {
        try 
        {
            String request = is.readLine();
            System.out.println( "Request: "+request );


            StringTokenizer st = new StringTokenizer( request );
            if ( (st.countTokens() >= 2) && st.nextToken().equals("GET") ) 
            {
                if ((request = st.nextToken()).startsWith("/"))
                    request = request.substring( 1 );


                if (request.equals(""))
                request = request + "index.html";


                File f = new File(request);
                shipDocument(os, f);
            } 
            else 
            {
                os.writeBytes( "400 Bad Request" );
            }


            client.close();
        } 
        catch (Exception e) 
        {
            System.out.println("Exception: " + e.getMessage());
        }
    }


    public static void shipDocument(DataOutputStream out, File f) throws Exception 
    {
        try 
        {
            DataInputStream in = new DataInputStream(new FileInputStream(f));
            int len = (int) f.length();
            byte[] buf = new byte[len];


            in.readFully(buf);
            in.close();


            out.writeBytes("HTTP/1.0 200 OK\r\n");
            out.writeBytes("Content-Length: " + f.length() +"\r\n");
            out.writeBytes("Content-Type: text/html\r\n\r\n");
            out.write(buf);
            out.flush();
        } 
        catch (Exception e) 
        {
            out.writeBytes("<html><head><title>error</title></head><body>\r\n\r\n");
            out.writeBytes("HTTP/1.0 400 " + e.getMessage() + "\r\n");
            out.writeBytes("Content-Type: text/html\r\n\r\n");
            out.writeBytes("</body></html>");
            out.flush();
        } 
        finally 
        {
            out.close();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值