基于阻塞式IO建立的Http Server
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocketFactory;
import org.apache.http.HttpConnectionFactory;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpServerConnection;
import org.apache.http.HttpStatus;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.DefaultBHttpServerConnection;
import org.apache.http.impl.DefaultBHttpServerConnectionFactory;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpProcessorBuilder;
import org.apache.http.protocol.HttpRequestHandler;
import org.apache.http.protocol.HttpService;
import org.apache.http.protocol.ResponseConnControl;
import org.apache.http.protocol.ResponseContent;
import org.apache.http.protocol.ResponseDate;
import org.apache.http.protocol.ResponseServer;
import org.apache.http.protocol.UriHttpRequestHandlerMapper;
public class Main {
static final int port = 8080;
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread() {//注册钩子监听
public void run() {
System.out.println("nothing is should be saved before jvm shutdown");
}
});
try {
new Main().start( port);
} catch (Exception e) {
System.exit(1);
}
}
void start(int port) throws IOException{
HttpProcessorBuilder builder = HttpProcessorBuilder.create();
builder.add(new ResponseDate());
builder.add(new ResponseServer());
builder.add(new ResponseContent());
builder.add(new ResponseConnControl());
HttpProcessor httpPro = builder.build();
UriHttpRequestHandlerMapper reqistry = new UriHttpRequestHandlerMapper();
reqistry.register("*", new BussinessHandlder());//注册业务处理类
HttpService service = new HttpService(httpPro, reqistry);
SSLServerSocketFactory factory = null;
if (port == 8443) {// 处理SSL连接
try {
ClassLoader cl = Main.class.getClassLoader();
URL url = cl.getResource("my.keystore");
if (url == null) {
throw new FileNotFoundException("keystore not found !");
}
KeyStore keystore = KeyStore.getInstance("jks");
keystore.load(url.openStream(), "secret".toCharArray());
KeyManagerFactory kmfactory = KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmfactory.init(keystore, "secret".toCharArray());
KeyManager[] keymanagers = kmfactory.getKeyManagers();
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(keymanagers, null, null);
factory = sslcontext.getServerSocketFactory();
} catch (UnrecoverableKeyException | KeyManagementException
| KeyStoreException | NoSuchAlgorithmException
| CertificateException | IOException e) {
factory = null;