Skip to content

Commit 8bcddaa

Browse files
committed
Added string path and query to request, moved post-response methods to request
1 parent 7807aee commit 8bcddaa

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

src/main/java/dev/latvian/apps/tinyserver/HTTPServer.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public HTTPServer(Supplier<REQ> requestFactory) {
5252
this.requestFactory = requestFactory;
5353
this.handlers = new EnumMap<>(HTTPMethod.class);
5454
this.rootHandlers = new EnumMap<>(HTTPMethod.class);
55+
this.serverName = "dev.latvian.apps:tiny-java-server";
5556
}
5657

5758
public void setServerName(String name) {
@@ -298,7 +299,7 @@ private void handleClient(Socket socket) {
298299
var handler = rootHandlers.get(method);
299300

300301
if (handler != null) {
301-
req.init(this, new String[0], CompiledPath.EMPTY, headers, query, in);
302+
req.init(this, "", new String[0], CompiledPath.EMPTY, headers, queryString, query, in);
302303
builder = createBuilder(req, handler.handler());
303304
}
304305
} else {
@@ -320,14 +321,14 @@ private void handleClient(Socket socket) {
320321
var h = hl.staticHandlers().get(path);
321322

322323
if (h != null) {
323-
req.init(this, pathParts, h.path(), headers, query, in);
324+
req.init(this, path, pathParts, h.path(), headers, queryString, query, in);
324325
builder = createBuilder(req, h.handler());
325326
} else {
326327
for (var dynamicHandler : hl.dynamicHandlers()) {
327328
var matches = dynamicHandler.path().matches(pathParts);
328329

329330
if (matches != null) {
330-
req.init(this, matches, dynamicHandler.path(), headers, query, in);
331+
req.init(this, path, matches, dynamicHandler.path(), headers, queryString, query, in);
331332
builder = createBuilder(req, dynamicHandler.handler());
332333
break;
333334
}
@@ -392,16 +393,15 @@ public HTTPResponseBuilder createBuilder(REQ req, @Nullable HTTPHandler<REQ> han
392393

393394
if (handler != null) {
394395
try {
395-
builder.setResponse(handler.handle(req));
396+
var response = handler.handle(req);
397+
builder.setResponse(response);
398+
req.afterResponse(builder, response);
396399
} catch (Exception ex) {
397400
builder.setStatus(HTTPStatus.INTERNAL_ERROR);
398-
handlePayloadError(builder, ex);
401+
req.handlePayloadError(builder, ex);
399402
}
400403
}
401404

402405
return builder;
403406
}
404-
405-
public void handlePayloadError(HTTPResponseBuilder payload, Exception error) {
406-
}
407407
}

src/main/java/dev/latvian/apps/tinyserver/ServerRegistry.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ default void delete(String path, HTTPHandler<REQ> handler) {
4747
http(HTTPMethod.DELETE, path, handler);
4848
}
4949

50+
default void redirect(String path, String redirect) {
51+
var res = HTTPResponse.redirect(redirect);
52+
get(path, req -> res);
53+
}
54+
5055
<WSS extends WSSession<REQ>> WSHandler<REQ, WSS> ws(String path, WSSessionFactory<REQ, WSS> factory);
5156

5257
default <WSS extends WSSession<REQ>> WSHandler<REQ, WSS> ws(String path) {

src/main/java/dev/latvian/apps/tinyserver/http/HTTPRequest.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import dev.latvian.apps.tinyserver.CompiledPath;
44
import dev.latvian.apps.tinyserver.HTTPServer;
55
import dev.latvian.apps.tinyserver.error.InvalidPathException;
6+
import dev.latvian.apps.tinyserver.http.response.HTTPResponse;
7+
import dev.latvian.apps.tinyserver.http.response.HTTPResponseBuilder;
68

79
import java.io.IOException;
810
import java.io.InputStream;
@@ -14,29 +16,33 @@
1416

1517
public class HTTPRequest {
1618
private HTTPServer<?> server;
17-
private String[] path = new String[0];
19+
private String path = "";
20+
private String[] pathParts = new String[0];
1821
private Map<String, String> variables = Map.of();
22+
private String queryString = "";
1923
private Map<String, String> query = Map.of();
2024
private List<Header> headers = List.of();
2125
private InputStream bodyStream = null;
2226

23-
public void init(HTTPServer<?> server, String[] path, CompiledPath compiledPath, List<Header> headers, Map<String, String> query, InputStream bodyStream) {
27+
public void init(HTTPServer<?> server, String path, String[] pathParts, CompiledPath compiledPath, List<Header> headers, String queryString, Map<String, String> query, InputStream bodyStream) {
2428
this.server = server;
2529
this.path = path;
30+
this.pathParts = pathParts;
2631

2732
if (compiledPath.variables() > 0) {
2833
this.variables = new HashMap<>(compiledPath.variables());
2934

3035
for (var i = 0; i < compiledPath.parts().length; i++) {
3136
var part = compiledPath.parts()[i];
3237

33-
if (part.variable() && i < path.length) {
34-
variables.put(part.name(), path[i]);
38+
if (part.variable() && i < pathParts.length) {
39+
variables.put(part.name(), pathParts[i]);
3540
}
3641
}
3742
}
3843

3944
this.headers = headers;
45+
this.queryString = queryString;
4046
this.query = query;
4147
this.bodyStream = bodyStream;
4248
}
@@ -59,6 +65,10 @@ public String variable(String name) {
5965
return s;
6066
}
6167

68+
public String queryString() {
69+
return queryString;
70+
}
71+
6272
public Map<String, String> query() {
6373
return query;
6474
}
@@ -77,10 +87,18 @@ public String header(String name) {
7787
return "";
7888
}
7989

80-
public String[] path() {
90+
public String path() {
8191
return path;
8292
}
8393

94+
public String fullPath() {
95+
return path + (queryString.isEmpty() ? "" : "?" + queryString);
96+
}
97+
98+
public String[] pathParts() {
99+
return pathParts;
100+
}
101+
84102
public InputStream bodyStream() {
85103
if (bodyStream == null) {
86104
return InputStream.nullInputStream();
@@ -103,4 +121,10 @@ public byte[] bodyBytes() throws IOException {
103121
public String body() throws IOException {
104122
return new String(bodyBytes(), StandardCharsets.UTF_8);
105123
}
124+
125+
public void handlePayloadError(HTTPResponseBuilder payload, Exception error) {
126+
}
127+
128+
public void afterResponse(HTTPResponseBuilder payload, HTTPResponse response) {
129+
}
106130
}

0 commit comments

Comments
 (0)