Java 如何实现一个http服务器

网友投稿 413 2022-11-12


Java 如何实现一个http服务器

在java中可以使用HttpServer类来实现Http服务器,该类位于com.sun.net包下(rt.jar)。实现代码如下:

主程序类

package bg.httpserver;

import com.sun.net.httpserver.HttpServer;

import java.io.IOException;

import java.net.InetSocketAddress;

import java.util.concurrent.Executors;

public class HttpServerStarter {

public static void main(String[] args) throws IOException {

//创建一个HttpServer实例,并绑定到指定的IP地址和端口号

HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 0);

//创建一个HttpContext,将路径为/myserver请求映射到MyHttpHandler处理器

httpServer.createContext("/myserver", new MyHttpHandler());

//设置服务器的线程池对象

httpServer.setExecutor(Executors.newFixedThreadPool(10));

//启动服务器

httpServer.start();

}

}

HttpServer:HttpServer主要是通过带参的create方法来创建,第一个参数InetSocketAddress表示绑定的ip地址和端口号。第二个参数为int类型,表示允许排队的最大TCP连接数,如果该值小于或等于零,则使用系统默认值。

createContext:可以调用多次,表示将指定的url路径绑定到指定的HttpHandler处理器对象上,服务器接收到的所有路径请求都将通过调用给定的处理程序对象来处理。

setExecutor:设置服务器的线程池对象,不设置或者设为null则表示使用start方法创建的线程。

HttpHandler实现

package bg.httpserver;

import com.sun.net.httpserver.Headers;

import com.sun.net.httpserver.HttpExchange;

imporhttp://t com.sun.net.httpserver.HttpHandler;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.util.List;

import java.util.Map;

import java.util.stream.Collectors;

/**

* 处理/myserver路径请求的处理器类

*/

public class MyHttpHandler implements HttpHandler {

@Override

public void handle(HttpExchange httpExchange) {

try {

StringBuilder responseText = new StringBuilder();

responseText.append("请求方法:").append(httpExchange.getRequestMethod()).append("
");

responseText.append("请求参数:").append(getRequestParam(httpExchange)).append("
");

responseText.append("请求头:
").append(getRequestHeader(httpExchange));

handleResponse(httpExchange, responseText.toString());

} catch (Exception ex) {

ex.printStackTrace();

}

}

/**

KALhsNG * 获取请求头

* @param httpExchange

* @return

*/

private String getRequestHeader(HttpExchange httpExchange) {

Headers headers = httpExchange.getRequestHeaders();

return headers.entrySet().stream()

.map((Map.Entry> entry) -> entry.getKey() + ":" + entry.getValue().toString())

.collect(Collectors.joining("
"));

}

/**

* 获取请求参数

* @param httpExchange

* @return

* @throws Exception

*/

private String getRequestParam(HttpExchange httpExchange) throws Exception {

String paramStr = "";

if (httpExchange.getRequestMethod().equals("GET")) {

//GET请求读queryString

paramStr = httpExchange.getRequestURI().getQuery();

} else {

//非GET请求读请求体

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpExchange.getRequestBody(), "utf-8"));

StringBuilder requestBodyContent = new StringBuilder();

String line = null;

while ((line = bufferedReader.readLine()) != null) {

requestBodyContent.append(line);

}

paramStr = requestBodyContent.toString();

}

return paramStr;

}

/**

* 处理响应

* @param httpExchange

* @param responsetext

* @throws Exception

*/

private void handleResponse(HttpExchange httpExchange, String responsetext) throws Exception {

//生成html

StringBuilder responseContent = new StringBuilder();

responseContent.append("")

.append("

.append(responsetext)

.append("")

.append("");

String responseContentStr = responseContent.toString();

byte[] responseContentByte = responseContentStr.getBytes("utf-8");

//设置响应头,必须在sendResponseHeaders方法之前设置!

httpExchange.getResponseHeaders().add("Content-Type:", "text/html;charset=utf-8");

//设置响应码和响应体长度,必须在getResponseBody方法之前调用!

httpExchange.sendResponseHeaders(200, responseContentByte.length);

OutputStream out = httpExchange.getResponseBody();

out.write(responseContentByte);

out.flush();

out.close();

}

}

运行HttpServerStarter,在浏览器中访问如下:

以上就是Java 如何实现一个http服务器的详细内容,更多关于Java 实现http服务器的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务之间接口调用(微服务之间接口调用方式)
下一篇:Spring定时服务QuartZ原理及代码案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~