一个可以work的HttpsServer

从其他地方抄袭过来的,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.security.KeyStore;
import java.util.StringTokenizer;


import javax.net.ServerSocketFactory;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;


public class HttpsServer {
    private static int HTTPS_PORT = 443;
    private static final String keystore = "serverkeystore";
    private static final char keystorepass[] = "keystorepassword".toCharArray();
    private static final char keypassword[] = "keypassword".toCharArray();    


    public ServerSocket getServer() throws Exception {
        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream(keystore), keystorepass);


        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, keypassword);
        SSLContext sslcontext = SSLContext.getInstance("SSLv3");
        sslcontext.init(kmf.getKeyManagers(), null, null);


        ServerSocketFactory ssf = sslcontext.getServerSocketFactory();
        SSLServerSocket serversocket = (SSLServerSocket)ssf.createServerSocket(HTTPS_PORT);


        return serversocket;
    }


    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 
    {
        HttpsServer httpserver = new HttpsServer();
        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();
        }


    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值