Advertisement
DenisKokoko

YP

Jun 21st, 2025
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.60 KB | None | 0 0
  1. import com.sun.net.httpserver.HttpExchange;
  2. import com.sun.net.httpserver.HttpHandler;
  3. import com.sun.net.httpserver.HttpServer;
  4. import com.sun.net.httpserver.Headers;
  5.  
  6. import java.io.*;
  7. import java.net.InetSocketAddress;
  8. import java.nio.charset.Charset;
  9. import java.nio.charset.StandardCharsets;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12.  
  13. class PostsHandler implements HttpHandler {
  14.     private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
  15.     @Override
  16.     public void handle(HttpExchange exchange) throws IOException {
  17.  
  18.         // получите информацию об эндпоинте, к которому был запрос
  19.         Endpoint endpoint = getEndpoint(exchange.getRequestURI().getPath(), exchange.getRequestMethod());
  20.  
  21.         switch (endpoint) {
  22.             case GET_POSTS: {
  23.                 writeResponse(exchange, "Получен запрос на получение постов", 200);
  24.                 break;
  25.             }
  26.             case GET_COMMENTS: {
  27.                 writeResponse(exchange, "Получен запрос на получение комментариев", 200);
  28.                 break;
  29.             }
  30.             case POST_COMMENT: {
  31.                 writeResponse(exchange, "Получен запрос на добавление комментария", 200);
  32.                 break;
  33.             }
  34.             case UNKNOWN:
  35.                 writeResponse(exchange, "", 200);
  36.                 break;
  37.             default:
  38.                 writeResponse(exchange, "Такого эндпоинта не существует", 404);
  39.         }
  40.     }
  41.  
  42.     private Endpoint getEndpoint(String requestPath, String requestMethod) {
  43.         // реализуйте этот метод, проанализировав путь и метод запроса
  44.         // ...
  45.         ArrayList<String> parsedReqPath = new ArrayList<>(List.of(requestPath.split("/")));
  46.         parsedReqPath.remove(0);
  47.         if (requestMethod.equals("GET")
  48.                 && parsedReqPath.size() == 1
  49.                 && parsedReqPath.get(0).equals("posts")){
  50.             return Endpoint.GET_POSTS;
  51.         } else if (requestMethod.equals("GET")
  52.                 && parsedReqPath.size() == 3
  53.                 && parsedReqPath.get(0).equals("posts")
  54.                 && parsedReqPath.get(2).equals("comments")){
  55.             return Endpoint.GET_COMMENTS;
  56.         } else if (requestMethod.equals("POST")
  57.                 && parsedReqPath.size() == 3
  58.                 && parsedReqPath.get(0).equals("posts")
  59.                 && parsedReqPath.get(2).equals("comments")){
  60.             return Endpoint.POST_COMMENT;
  61.         } else
  62.             return Endpoint.UNKNOWN;
  63.     }
  64.  
  65.     private void writeResponse(HttpExchange exchange, String responseString, int responseCode) throws IOException {
  66.             /*
  67.              Реализуйте отправку ответа, который содержит responseString в качестве тела ответа
  68.              и responseCode в качестве кода ответа.
  69.              Учтите, что если responseString — пустая строка, то её не нужно передавать в ответе.
  70.              В этом случае ответ отправляется без тела.
  71.              */
  72.         // ...
  73.        
  74.         Headers responseHeaders = exchange.getResponseHeaders();
  75.         responseHeaders.set("Content-Type", "text/plain; charset=" + DEFAULT_CHARSET);
  76.             if (responseString.isEmpty()){
  77.                 exchange.sendResponseHeaders(responseCode, 0);
  78.             } else {
  79.                 try(OutputStream os = exchange.getResponseBody()){
  80.                 exchange.sendResponseHeaders(responseCode, responseString.length());
  81.                 os.write(responseString.getBytes());
  82.                 }
  83.             }
  84.     }
  85.  
  86.     enum Endpoint {GET_POSTS, GET_COMMENTS, POST_COMMENT, UNKNOWN}
  87. }
  88.  
  89. public class Practicum {
  90.     private static final int PORT = 8080;
  91.  
  92.     public static void main(String[] args) throws IOException {
  93.  
  94.         // добавьте код для конфигурирования и запуска сервера
  95.         // ...
  96.         HttpServer httpServer = HttpServer.create(new InetSocketAddress(PORT), 0);
  97.         httpServer.createContext("/posts", new PostsHandler());
  98.         httpServer.start();
  99.         System.out.println("HTTP-сервер запущен на " + PORT + " порту!");
  100.         // завершаем работу сервера для корректной работы тренажёра
  101.         httpServer.stop(1);
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement