From 7f59abdaba3f73bd3c668aab2e910b4cabae5061 Mon Sep 17 00:00:00 2001 From: NF-coder Date: Mon, 15 Sep 2025 22:42:23 +0300 Subject: [PATCH 1/5] java-fcgi: added statuscodes support + small structure improovements --- server/.idea/misc.xml | 9 ++++- server/Dockerfile | 4 +- server/src/main/java/org/web1/Main.java | 17 ++++++--- .../org/web1/netUtils/ResponseFactory.java | 15 -------- .../mappers}/JsonBuilder.java | 2 +- .../mappers}/QueryStringToHashmap.java | 2 +- .../web1/utils/responce/ResponseFactory.java | 37 +++++++++++++++++++ .../web1/utils/responce/ResponseStatus.java | 6 +++ .../org/web1/{ => utils}/timer/Timer.java | 2 +- 9 files changed, 67 insertions(+), 27 deletions(-) delete mode 100644 server/src/main/java/org/web1/netUtils/ResponseFactory.java rename server/src/main/java/org/web1/{netUtils => utils/mappers}/JsonBuilder.java (94%) rename server/src/main/java/org/web1/{netUtils => utils/mappers}/QueryStringToHashmap.java (95%) create mode 100644 server/src/main/java/org/web1/utils/responce/ResponseFactory.java create mode 100644 server/src/main/java/org/web1/utils/responce/ResponseStatus.java rename server/src/main/java/org/web1/{ => utils}/timer/Timer.java (87%) diff --git a/server/.idea/misc.xml b/server/.idea/misc.xml index b2eea27..6111a9a 100644 --- a/server/.idea/misc.xml +++ b/server/.idea/misc.xml @@ -1,7 +1,14 @@ - + + + + \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile index 3cf7d07..d70066b 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:17-jdk-slim AS build +FROM eclipse-temurin:17-jdk-alpine AS build # copy maven confis COPY pom.xml mvnw ./ @@ -14,7 +14,7 @@ RUN ./mvnw dependency:resolve COPY src src RUN ./mvnw clean package -FROM openjdk:17-jdk-slim +FROM eclipse-temurin:17-jre-alpine WORKDIR server COPY --from=build target/*.jar server-1.0.jar ENTRYPOINT ["java", "-DFCGI_PORT=55555", "-jar", "server-1.0.jar"] \ No newline at end of file diff --git a/server/src/main/java/org/web1/Main.java b/server/src/main/java/org/web1/Main.java index 077ec75..4da9285 100644 --- a/server/src/main/java/org/web1/Main.java +++ b/server/src/main/java/org/web1/Main.java @@ -1,6 +1,7 @@ package org.web1; import com.fastcgi.*; + import java.util.HashMap; import java.util.function.Function; @@ -9,10 +10,11 @@ import org.web1.DTOs.RequestDTO; import org.web1.checkers.Checker; import org.web1.checkers.CheckerFunction; -import org.web1.netUtils.JsonBuilder; -import org.web1.netUtils.QueryStringToHashmap; -import org.web1.netUtils.ResponseFactory; -import org.web1.timer.Timer; +import org.web1.utils.mappers.JsonBuilder; +import org.web1.utils.mappers.QueryStringToHashmap; +import org.web1.utils.responce.ResponseFactory; +import org.web1.utils.responce.ResponseStatus; +import org.web1.utils.timer.Timer; public class Main { private static final Function> parseQuery = new QueryStringToHashmap(); @@ -46,13 +48,16 @@ public static void main(String[] args) { String result = ResponseFactory.create( new JsonBuilder() .add("result", checkResult) - .add("elapsedTimeNs", timer.stop()) + .add("elapsedTimeNs", timer.stop()), + ResponseStatus.OK ); System.out.println(result); } catch (ValidationException e) { String result = ResponseFactory.create( - new JsonBuilder().add("error", '"'+e.getMessage()+'"') + new JsonBuilder() + .add("error", '"'+e.getMessage()+'"'), + ResponseStatus.BAD_REQUEST ); System.out.println(result); } diff --git a/server/src/main/java/org/web1/netUtils/ResponseFactory.java b/server/src/main/java/org/web1/netUtils/ResponseFactory.java deleted file mode 100644 index 1b9a7f2..0000000 --- a/server/src/main/java/org/web1/netUtils/ResponseFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.web1.netUtils; - -public class ResponseFactory { - private static final String BASE_RESPONSE = """ - Access-Control-Allow-Origin: * - Connection: keep-alive - Content-Type: application/json - Content-Length: %d - - %s"""; - public static String create(JsonBuilder jsonBuilder) { - String response = jsonBuilder.build(); - return String.format(BASE_RESPONSE, response.length(), response); - } -} diff --git a/server/src/main/java/org/web1/netUtils/JsonBuilder.java b/server/src/main/java/org/web1/utils/mappers/JsonBuilder.java similarity index 94% rename from server/src/main/java/org/web1/netUtils/JsonBuilder.java rename to server/src/main/java/org/web1/utils/mappers/JsonBuilder.java index 809ae58..44c8141 100644 --- a/server/src/main/java/org/web1/netUtils/JsonBuilder.java +++ b/server/src/main/java/org/web1/utils/mappers/JsonBuilder.java @@ -1,4 +1,4 @@ -package org.web1.netUtils; +package org.web1.utils.mappers; import java.util.HashMap; diff --git a/server/src/main/java/org/web1/netUtils/QueryStringToHashmap.java b/server/src/main/java/org/web1/utils/mappers/QueryStringToHashmap.java similarity index 95% rename from server/src/main/java/org/web1/netUtils/QueryStringToHashmap.java rename to server/src/main/java/org/web1/utils/mappers/QueryStringToHashmap.java index 2f775e9..5c03c31 100644 --- a/server/src/main/java/org/web1/netUtils/QueryStringToHashmap.java +++ b/server/src/main/java/org/web1/utils/mappers/QueryStringToHashmap.java @@ -1,4 +1,4 @@ -package org.web1.netUtils; +package org.web1.utils.mappers; import java.util.HashMap; import java.util.function.Function; diff --git a/server/src/main/java/org/web1/utils/responce/ResponseFactory.java b/server/src/main/java/org/web1/utils/responce/ResponseFactory.java new file mode 100644 index 0000000..7d9f873 --- /dev/null +++ b/server/src/main/java/org/web1/utils/responce/ResponseFactory.java @@ -0,0 +1,37 @@ +package org.web1.utils.responce; + +import org.web1.utils.mappers.JsonBuilder; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; + +public class ResponseFactory { + private static final String BASE_RESPONSE = """ + HTTP/2 %s\r + Status: %s\r + Access-Control-Allow-Origin: *\r + Connection: keep-alive\r + Content-Type: application/json; charset=utf-8\r + Content-Length: %d\r + \r + %s"""; + + private static final HashMap responseStatus = new HashMap<>(); + + static { + responseStatus.put(ResponseStatus.BAD_REQUEST, "400"); + responseStatus.put(ResponseStatus.OK, "200"); + } + + public static String create(JsonBuilder jsonBuilder, ResponseStatus status) { + String response = jsonBuilder.build(); + + return String.format( + BASE_RESPONSE, + responseStatus.get(status), + responseStatus.get(status), + response.getBytes(StandardCharsets.UTF_8).length + 1, + response + ); + } +} diff --git a/server/src/main/java/org/web1/utils/responce/ResponseStatus.java b/server/src/main/java/org/web1/utils/responce/ResponseStatus.java new file mode 100644 index 0000000..99752bf --- /dev/null +++ b/server/src/main/java/org/web1/utils/responce/ResponseStatus.java @@ -0,0 +1,6 @@ +package org.web1.utils.responce; + +public enum ResponseStatus { + BAD_REQUEST, + OK +} diff --git a/server/src/main/java/org/web1/timer/Timer.java b/server/src/main/java/org/web1/utils/timer/Timer.java similarity index 87% rename from server/src/main/java/org/web1/timer/Timer.java rename to server/src/main/java/org/web1/utils/timer/Timer.java index 9531368..199e210 100644 --- a/server/src/main/java/org/web1/timer/Timer.java +++ b/server/src/main/java/org/web1/utils/timer/Timer.java @@ -1,4 +1,4 @@ -package org.web1.timer; +package org.web1.utils.timer; public class Timer { long startTime; From 1b1cbaaf5dc9550f1b0e9439d338cc95451db54b Mon Sep 17 00:00:00 2001 From: NF-coder Date: Mon, 15 Sep 2025 22:43:11 +0300 Subject: [PATCH 2/5] static: favicon added --- httpd/static/assets/img/logo.ico | Bin 0 -> 4286 bytes httpd/static/index.html | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 httpd/static/assets/img/logo.ico diff --git a/httpd/static/assets/img/logo.ico b/httpd/static/assets/img/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..acc119e293647673d9378202b1ba18b8bda4527e GIT binary patch literal 4286 zcmd6qOKTKC6h`lmg$q%$h>8eiG`_%%|3J4YE=2tc3PH&tL`2X;H$GOP{sK3~D7y5q zkU?FTfM^y;4EPw(mAVLtijOeu`G&gEG$cJ8YSLCXsqT8*Q&rtlQ)5=)uUa+zx8Y8+ zb!N5`D6+kv@@As0Xd0oz9U$+5eQ*&Tzyy2@Op-r>%WweJg8D2usc-Ohb3FhrU>1@b z=BOWo)36x|jpJ@;PrsFL3^ca}hlJAVHKESFP79Mu!;O8{DN%UqW8avaSIk* z3+mmygX7dH^6>qWnYUu zu5Wk`!6k?tyVZDCaX&24U&F2az18u?ZubuNrxN|2{{#P2iSvJt`*Df>r?{__=)aEp zAn42#``ylq_Z{aESPx?*_+R7P2>K2>Q-c3|aLeBVIxFU_S*-fExOC3*?_cF7Kxczk zj)mgP5R3PAUuNjNFbf z$i3S=X}4c{9l6$F1pYvF4n^-3<34PIf6v^V+5C2BL)+ER2YOc?TmyY?e1I?T73!ehHaFlX zXkTl|o76gzggMQd?fGfeJ!7_}ZnmOk)**(7BdlQZezg#%PE5s?L#~F|U@}xm{sJ&x Bl~Moz literal 0 HcmV?d00001 diff --git a/httpd/static/index.html b/httpd/static/index.html index 96dd94a..b872632 100644 --- a/httpd/static/index.html +++ b/httpd/static/index.html @@ -5,6 +5,7 @@ Web lab1 +