javaSE本身自己就实现了web功能,分别有两种实现一种是HTTP、HTTPS,实现类分别为HttpServer和HttpsServer但是都要自己实现HttpHandler,而且HTTPS的实现要麻烦一些需要创建证书。创建证书的工具java的bin目录下有名字叫keytool创建方法入下:
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.InetAddress;
- import java.net.InetSocketAddress;
- 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 javax.net.ssl.KeyManagerFactory;
- import javax.net.ssl.SSLContext;
-
- import com.sun.net.httpserver.HttpExchange;
- import com.sun.net.httpserver.HttpHandler;
- import com.sun.net.httpserver.HttpServer;
- import com.sun.net.httpserver.HttpsConfigurator;
- import com.sun.net.httpserver.HttpsServer;
-
-
- public class HTTpServer {
- public static void main(String[] args) throws IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, KeyManagementException {
-
- HttpServer http = HttpServer.create(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 8989),0);
- http.createContext("/web", new HTTpServer().new MyHandler());
- http.setExecutor(null);
- http.start();
-
- HttpsServer https = HttpsServer.create(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 8787), 0);
- https.createContext("/web", new HTTpServer().new MyHandler());
- https.setExecutor(null);
- KeyStore ks = KeyStore.getInstance("JKS");
- ks.load(new FileInputStream("F:/serverkeys"), "luoxun".toCharArray());
- KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
- kmf.init(ks, "luoxun".toCharArray());
- SSLContext sslContext = SSLContext.getInstance("SSLv3");
- sslContext.init(kmf.getKeyManagers(), null, null);
- HttpsConfigurator httpsConfigurator = new HttpsConfigurator(sslContext);
- https.setHttpsConfigurator(httpsConfigurator);
- https.start();
- }
- class MyHandler implements HttpHandler{
- public void handle(HttpExchange exchange) throws IOException {
- String protocol = exchange.getProtocol();
- String method = exchange.getRequestMethod();
- String url = exchange.getRequestURI().toString();
- String query = exchange.getRequestURI().getQuery();
-
- InputStream request =exchange.getRequestBody();
- OutputStream response = exchange.getResponseBody();
-
- InetSocketAddress address = exchange.getRemoteAddress();
- String host = address.getHostName();
- String port = String.valueOf(address.getPort());
-
- StringBuilder sb = new StringBuilder();
- sb.append("<meta http-equiv=‘charset‘ content=‘text/html;charset=gb2312‘>");
- sb.append("<p>协议:%s</p>");
- sb.append("<p>提交方式:%s</p>");
- sb.append("<p>URL:%s</p>");
- sb.append("<p>参数列表:%s</p>");
- sb.append("<p>主机名::%s</p>");
- sb.append("<p>端口号:%s</p>");
- String content = String.format(sb.toString(), protocol,method,url,query,host,port);
-
- byte[] contentBin = content.getBytes();
- exchange.sendResponseHeaders(200, contentBin.length);
- response.write(contentBin);
- response.flush();
- response.close();
- }
- }
- }