Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.sun.net.httpserver.HttpExchange;
- import com.sun.net.httpserver.HttpHandler;
- import com.sun.net.httpserver.HttpServer;
- import com.sun.net.httpserver.Headers;
- import java.io.*;
- import java.net.InetSocketAddress;
- import java.nio.charset.Charset;
- import java.nio.charset.StandardCharsets;
- import java.util.ArrayList;
- import java.util.List;
- class PostsHandler implements HttpHandler {
- private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
- @Override
- public void handle(HttpExchange exchange) throws IOException {
- // получите информацию об эндпоинте, к которому был запрос
- Endpoint endpoint = getEndpoint(exchange.getRequestURI().getPath(), exchange.getRequestMethod());
- switch (endpoint) {
- case GET_POSTS: {
- writeResponse(exchange, "Получен запрос на получение постов", 200);
- break;
- }
- case GET_COMMENTS: {
- writeResponse(exchange, "Получен запрос на получение комментариев", 200);
- break;
- }
- case POST_COMMENT: {
- writeResponse(exchange, "Получен запрос на добавление комментария", 200);
- break;
- }
- case UNKNOWN:
- writeResponse(exchange, "", 200);
- break;
- default:
- writeResponse(exchange, "Такого эндпоинта не существует", 404);
- }
- }
- private Endpoint getEndpoint(String requestPath, String requestMethod) {
- // реализуйте этот метод, проанализировав путь и метод запроса
- // ...
- ArrayList<String> parsedReqPath = new ArrayList<>(List.of(requestPath.split("/")));
- parsedReqPath.remove(0);
- if (requestMethod.equals("GET")
- && parsedReqPath.size() == 1
- && parsedReqPath.get(0).equals("posts")){
- return Endpoint.GET_POSTS;
- } else if (requestMethod.equals("GET")
- && parsedReqPath.size() == 3
- && parsedReqPath.get(0).equals("posts")
- && parsedReqPath.get(2).equals("comments")){
- return Endpoint.GET_COMMENTS;
- } else if (requestMethod.equals("POST")
- && parsedReqPath.size() == 3
- && parsedReqPath.get(0).equals("posts")
- && parsedReqPath.get(2).equals("comments")){
- return Endpoint.POST_COMMENT;
- } else
- return Endpoint.UNKNOWN;
- }
- private void writeResponse(HttpExchange exchange, String responseString, int responseCode) throws IOException {
- /*
- Реализуйте отправку ответа, который содержит responseString в качестве тела ответа
- и responseCode в качестве кода ответа.
- Учтите, что если responseString — пустая строка, то её не нужно передавать в ответе.
- В этом случае ответ отправляется без тела.
- */
- // ...
- Headers responseHeaders = exchange.getResponseHeaders();
- responseHeaders.set("Content-Type", "text/plain; charset=" + DEFAULT_CHARSET);
- if (responseString.isEmpty()){
- exchange.sendResponseHeaders(responseCode, 0);
- } else {
- try(OutputStream os = exchange.getResponseBody()){
- exchange.sendResponseHeaders(responseCode, responseString.length());
- os.write(responseString.getBytes());
- }
- }
- }
- enum Endpoint {GET_POSTS, GET_COMMENTS, POST_COMMENT, UNKNOWN}
- }
- public class Practicum {
- private static final int PORT = 8080;
- public static void main(String[] args) throws IOException {
- // добавьте код для конфигурирования и запуска сервера
- // ...
- HttpServer httpServer = HttpServer.create(new InetSocketAddress(PORT), 0);
- httpServer.createContext("/posts", new PostsHandler());
- httpServer.start();
- System.out.println("HTTP-сервер запущен на " + PORT + " порту!");
- // завершаем работу сервера для корректной работы тренажёра
- httpServer.stop(1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement