Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d96a659

Browse files
Update FirstHttpServer.java
1 parent dc9d880 commit d96a659

File tree

1 file changed

+16
-35
lines changed

1 file changed

+16
-35
lines changed

‎SocketClasses/src/HTTP_SingleThreadServer/FirstHttpServer.java

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package HTTP_SingleThreadServer;
2-
/*
3-
Создаем простой, однопоточный HTTP сервер,
4-
который принимает некие запросы и генерирует
5-
некий стандартный ответ.
6-
*/
2+
3+
/* Создаем простой, однопоточный HTTP сервер, который принимает некие запросы и генерирует некий стандартный ответ. */
4+
75
import java.io.DataInputStream;
86
import java.io.DataOutputStream;
97
import java.io.IOException;
@@ -13,16 +11,8 @@
1311
import java.nio.file.Path;
1412

1513
public class FirstHttpServer {
16-
/*
17-
Для создания сервера, нам понадобится порт,
18-
который он будет прослушивать, этот параметр
19-
мы передадим в ServerSocket.
20-
*/
21-
private final int port;
22-
/* Передаем интересующий нас порт через конструктор */
23-
public FirstHttpServer(int port) {
24-
this.port = port;
25-
}
14+
private final int port; // Для создания сервера, нам понадобится порт, который он будет прослушивать, этот параметр мы передадим в ServerSocket
15+
public FirstHttpServer(int port) { this.port = port; } // Передаем интересующий нас порт через конструктор
2616
/* Метод запускающий наш сервер */
2717
public void runServer(){
2818
/*
@@ -34,10 +24,8 @@ public void runServer(){
3424
try {
3525
ServerSocket myFirstServer = new ServerSocket(port);
3626
/*
37-
Метод *.accept() принимает соединение от нашего клиента.
38-
Данный метод блокирующий и будет ожидать запроса извне и
39-
только затем он отпускает поток. Далее мы обрабатываем
40-
полученный запрос, передав в него наш клиентский Socket.
27+
Метод *.accept() принимает соединение от нашего клиента. Данный метод блокирующий и будет ожидать запроса извне и
28+
только затем он отпускает поток. Далее мы обрабатываем полученный запрос, передав в него наш клиентский Socket.
4129
*/
4230
Socket clientSocket = myFirstServer.accept();
4331
processingSocketRequest(clientSocket);
@@ -48,22 +36,16 @@ public void runServer(){
4836
/* Метод обрабатывающий запрос от клиента */
4937
private void processingSocketRequest(Socket clientSocket){
5038
/*
51-
Открываем два потока входящий и исходящий для
52-
получения запросов - request и формирования
53-
ответов - response.
39+
Открываем два потока входящий и исходящий для получения запросов - request и формирования ответов - response.
5440
55-
Естественно в реальности сервер ведет более
56-
сложную работу по обработке запросов и выдаче
57-
соответствующих ответов, в зависимости от
58-
полученного запроса. Но суть не меняется.
41+
Естественно в реальности сервер ведет более сложную работу по обработке запросов и выдаче соответствующих ответов,
42+
в зависимости от полученного запроса. Но суть не меняется.
5943
*/
6044
try(DataInputStream dataInputStream = new DataInputStream(clientSocket.getInputStream());
6145
DataOutputStream dataOutputStream = new DataOutputStream(clientSocket.getOutputStream())) {
62-
/*
63-
1. Получаем запрос и обрабатываем его (handle request).
64-
Выводим на экран запрос от HttpClientTester клиента.
65-
*/
46+
/* 1. Получаем запрос и обрабатываем его (handle request). Выводим на экран запрос от HttpClientTester клиента. */
6647
System.out.println("Request: \n" + new String(dataInputStream.readNBytes(456)));
48+
6749
/*
6850
2. Обрабатываем запрос и формируем ответ (handle response).
6951
Формируем тело ответа, например, передав в него наш html
@@ -72,24 +54,23 @@ private void processingSocketRequest(Socket clientSocket){
7254
Это будет тело - body нашего ответа.
7355
*/
7456
byte[] responseBody = Files.readAllBytes(Path.of("resources","htmlExample.html"));
57+
7558
/* Формируем header-ы ответа */
7659
byte[] responseHeaders = """
7760
HTTP/1.1 200 OK
7861
content-type: text/html
7962
content-length: %s
8063
""".formatted(responseBody.length).getBytes();
64+
8165
/* Сервер отправляет ответ клиенту */
8266
dataOutputStream.write(responseHeaders);
8367
dataOutputStream.write(System.lineSeparator().getBytes());
8468
dataOutputStream.write(responseBody);
8569

8670
} catch (IOException ioException){
8771
/*
88-
В данном случае мы не пробрасываем исключения выше, а
89-
обрабатываем полученные ошибки, чтобы сервер не
90-
остановился. Например, мы логгируем ошибки, а сервер
91-
продолжает обрабатывать другие запросы, от других
92-
клиентов.
72+
В данном случае мы не пробрасываем исключения выше, а обрабатываем полученные ошибки, чтобы сервер не остановился.
73+
Например, мы логгируем ошибки, а сервер продолжает обрабатывать другие запросы, от других клиентов.
9374
*/
9475
ioException.printStackTrace();
9576
} finally {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /