前言:
目前朋友们对“http服务器java”大致比较看重,朋友们都需要剖析一些“http服务器java”的相关内容。那么小编也在网络上网罗了一些关于“http服务器java””的相关内容,希望你们能喜欢,大家一起来了解一下吧!您想要实现http服务器但是,您不想冒任何风险编写一个成熟的HTTP服务器吗?开发一个功能齐全的HTTP服务器并不是一项简单的任务。但是Java已经找到了解决这类问题的方法。Java支持内置的HTTP服务器.只需编写100行代码,我们就可以开发出一个相当不错的HTTP服务器,它可以处理HTTPGET和POST请求。我们还可以利用它来处理其他HTTP命令。
HTTPServer类
JavaSDK提供了一个内置的服务器,名为HttpServer。这类属于com.sun.net 包裹。
我们可以像这样实例化服务器:
HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8001), 0);
上面的行创建一个HTTPServer 实例,其端口号为8001。但是,还有一个值为0的参数。此值用于背向测井.
背向测井
当服务器接受客户端请求时,此请求将首先由操作系统排队。稍后,它将被赋予服务器来处理请求。所有这些同时的请求都将由操作系统排队。但是,操作系统将决定这些请求中有多少可以在任何给定的时间点排队。此值表示回发日志记录。在我们的示例中,此值为0,这意味着我们不对任何请求进行排队。
服务器代码
我们将开发以下HTTP服务器代码:
server.createContext("/test", new MyHttpHandler());
2
server.setExecutor(threadPoolExecutor);
3
server.start();
4
logger.info(" Server started on port 8001");
我们创建了一个名为test。这只不过是应用程序的上下文根。第二个参数是一个处理程序实例,它将处理HTTP请求。我们很快就会调查这门课。
我们可以使用线程池执行器,以及这个服务器实例。在我们的例子中,我们用10创建了一个线程池。
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)Executors.newFixedThreadPool(10);
接下来,我们启动服务器:
server.start();
使用三到四行代码,我们创建了一个http服务器使用侦听端口的上下文根!
HTTPHandler类
这是一个接口,它有一个名为handle(..)。让我们看看这个接口的实现。
private class MyHttpHandler implements HttpHandler {
2
@Override
3
public void handle(HttpExchange httpExchange) throws IOException {
4
String requestParamValue=null;
5
if("GET".equals(httpExchange.getRequestMethod())) {
6
requestParamValue = handleGetRequest(httpExchange);
7
}else if("POST".equals(httpExchange)) {
8
requestParamValue = handlePostRequest(httpExchange);
9
}
10
11
handleResponse(httpExchange,requestParamValue);
12
}
13
14
private String handleGetRequest(HttpExchange httpExchange) {
15
return httpExchange.
16
getRequestURI()
17
.toString()
18
.split("\\?")[1]
19
.split("=")[1];
20
}
21
22
private void handleResponse(HttpExchange httpExchange, String requestParamValue) throws IOException {
23
OutputStream outputStream = httpExchange.getResponseBody();
24
StringBuilder htmlBuilder = new StringBuilder();
25
26
htmlBuilder.append("<html>").
27
append("<body>").
28
append("<h1>").
29
append("Hello ")
30
.append(requestParamValue)
31
.append("</h1>")
32
.append("</body>")
33
.append("</html>");
34
35
// encode HTML content
36
String htmlResponse = StringEscapeUtils.escapeHtml4(htmlBuilder.toString());
37
38
// this line is a must
39
httpExchange.sendResponseHeaders(200, htmlResponse.length());
40
41
outputStream.write(htmlResponse.getBytes());
42
outputStream.flush();
43
outputStream.close();
44
}
45
}
这是处理请求并将响应发送回客户端的代码。请求和响应由HttpExchange 班级。
处理GET请求
获取请求由handleGETRequest()方法。此方法依次调用getRequestURI() 方法HttpExchange 类中包含的请求参数值。乌里。这是一个最小的方法,只处理请求中的一个参数。然而,这可以修改以满足不同的要求。
手柄响应
最后,我们将把我们的响应发送回客户端。这是通过handleResponse(..)方法。在此方法中,通过调用getResponseBody()方法HttpExchange 班级。稍后,我们可以将HTML内容写入输出流。
最重要的一点是发送response header 回到客户那里。如果您错过了它,您将得到一个名为ERR_EMPTY_RESPONSE在浏览器里。
标签: #http服务器java