-
Notifications
You must be signed in to change notification settings - Fork 70
/
HostRoutingExample.java
55 lines (50 loc) · 1.77 KB
/
HostRoutingExample.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import io.activej.http.AsyncServlet;
import io.activej.http.HttpHeaders;
import io.activej.http.HttpResponse;
import io.activej.http.RoutingServlet;
import io.activej.inject.annotation.Named;
import io.activej.inject.annotation.Provides;
import io.activej.launchers.http.HttpServerLauncher;
/**
* An example of setting routes based on Host
* <p>
* You may test server behaviour by issuing {@code curl} commands:
* <ul>
* <li>{@code curl -H "Host: test.com" http://localhost:8080}</li>
* <li>{@code curl -H "Host: example.com" http://localhost:8080}</li>
* </ul>
*/
public final class HostRoutingExample extends HttpServerLauncher {
private static final String TEST_HOST = "test.com";
private static final String EXAMPLE_HOST = "example.com";
@Provides
AsyncServlet mainServlet(@Named("Test") AsyncServlet testServlet, @Named("Example") AsyncServlet exampleServlet) {
return RoutingServlet.create()
.map("/*", request -> {
String hostHeader = request.getHeader(HttpHeaders.HOST);
if (hostHeader == null) {
return HttpResponse.ofCode(400).withPlainText("Host header is missing");
}
if (hostHeader.equals(TEST_HOST)) {
return testServlet.serve(request);
}
if (hostHeader.equals(EXAMPLE_HOST)) {
return exampleServlet.serve(request);
}
return HttpResponse.ofCode(400).withPlainText("Unknown host");
});
}
@Provides
@Named("Test")
AsyncServlet testServlet() {
return request -> HttpResponse.ok200().withPlainText("This page is served on test.com\n");
}
@Provides
@Named("Example")
AsyncServlet exampleServlet() {
return request -> HttpResponse.ok200().withPlainText("This page is served on example.com\n");
}
public static void main(String[] args) throws Exception {
new HostRoutingExample().launch(args);
}
}