/
Liptoo
/
PersonService
Обзор
Документация
Войти
/
Liptoo
/
PersonService
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/Class.java
102 строки
6 KB
Liptoo
add sout hi
09 сен 2025, 01:33
09 сен 2025, 01:33
6225683
Код
Авторство
О чём код?
import Person.Person; import Person.PersonService; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.List; public class Class { public static void main(String[] args) throws Exception { ServerSocket socket = new ServerSocket(8080); System.out.println("hi"); System.out.println("Сервер запущен."); while (true){ Socket clientSocket; try{ clientSocket = socket.accept(); // Ждем подключение клиента ,дождаться прихода клиентского соединения с помощью метода accept(): BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); String requestLine = in.readLine(); // Этот метод вызывает операцию чтения одной строки текста из указанного входного потока if(requestLine != null && !requestLine.isEmpty()) { handleRequest(out, requestLine); } // Обрабатываем запрос clientSocket.close(); } catch (Exception e){ e.printStackTrace(); } } } private static void handleRequest(PrintWriter out, String requestLine) { // Разбираем строку запроса String[] parts = requestLine.split("\\s+"); // Метод split() разделяет строку на фрагменты по указанному регулярному выражению. В данном случае используется регулярное выражение "\\s+", означающее один или более последовательных пробелов (\s соответствует любому пробельному символу, знак плюса означает повторение одного или более раз) String method = parts[0]; // Извлекает первый элемент массива parts и присваивает его переменной method типа String. String path = parts[1]; // Присваивает второй элемент массива parts переменной path типа String. if ("GET".equals(method)) { // условие часто используют в серверах приложений или веб-сервисах для анализа HTTP-запросов. Например, если сервер получил запрос, и его метод указан как GET, он выполняет определённые действия (возвращает страницу, отправляет данные и т.д.). respondToGet(out, path); // Если это GET-запрос, отправляем ответ } else { sendErrorResponse(out, 405, "Method Not Allowed"); // Иначе возвращаем ошибку } } private static void respondToPost(PrintWriter out, String path) { // Простейшая обработка GET-запросов switch(path) { // Оператор switch в Java используется для выбора между несколькими вариантами выполнения программы в зависимости от значения выражения case "/": sendOkResponse(out, "123"); break; default: sendNotFoundResponse(out); break; } } private static void respondToGet(PrintWriter out, String path) { // Простейшая обработка GET-запросов PersonService personService = new PersonService(); switch(path) { // Оператор switch в Java используется для выбора между несколькими вариантами выполнения программы в зависимости от значения выражения case "/getAllPerson": List<Person> persons = personService.getAllPersons(); sendOkResponse(out, persons); break; case "/getPersonByName": Person person = personService.getPersonByName("Mike"); sendOkResponse(out, person); break; case "/getAllDepartsments": case "/getDepartsmentsByName": default: sendNotFoundResponse(out); break; } } private static void sendOkResponse(PrintWriter out, Object content) { out.println("HTTP/1.1 200 OK"); out.println("Content-Type: application/json; charset=UTF-8"); //out.println("Content-Length: " + content.length()); out.println(); // Пустая строка отделяет заголовки от тела ответа out.println(content); } private static void sendNotFoundResponse(PrintWriter out) { out.println("HTTP/1.1 404 Not Found"); out.println("Content-Type: text/plain; charset=UTF-8"); out.println(); // Пустая строка разделяет заголовки и тело ответа out.println("Страница не найдена."); } private static void sendErrorResponse(PrintWriter out, int code, String message) { out.println("HTTP/1.1 " + code + " " + message); out.println("Content-Type: text/plain; charset=UTF-8"); out.println(); // Пустая строка разделяет заголовки и тело ответа out.println(message); } }