Added content-type handling.
This commit is contained in:
parent
b7881aa9de
commit
fbe3d0b78c
@ -1,5 +1,6 @@
|
|||||||
package com.jessebrault.site;
|
package com.jessebrault.site;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.http.HttpHeader;
|
||||||
import org.eclipse.jetty.server.Handler;
|
import org.eclipse.jetty.server.Handler;
|
||||||
import org.eclipse.jetty.server.Request;
|
import org.eclipse.jetty.server.Request;
|
||||||
import org.eclipse.jetty.server.Response;
|
import org.eclipse.jetty.server.Response;
|
||||||
@ -13,13 +14,23 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
public final class JbHandler extends Handler.Abstract {
|
public final class JbHandler extends Handler.Abstract {
|
||||||
|
|
||||||
private static final Pattern extensionPattern = Pattern.compile(".*\\..+$");
|
private static final Pattern hasExtensionPattern = Pattern.compile(".*\\..+$");
|
||||||
|
private static final Pattern getExtensionPattern = Pattern.compile(".*(\\..+)$");
|
||||||
|
|
||||||
private static boolean hasExtension(String path) {
|
private static boolean hasExtension(String path) {
|
||||||
final var m = extensionPattern.matcher(path);
|
final var m = hasExtensionPattern.matcher(path);
|
||||||
return m.matches();
|
return m.matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getExtension(Path resolved) {
|
||||||
|
final var m = getExtensionPattern.matcher(resolved.toString());
|
||||||
|
if (m.matches()) {
|
||||||
|
return m.group(1);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Could not determine extension for: " + resolved);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final Set<Path> bases;
|
private final Set<Path> bases;
|
||||||
|
|
||||||
public JbHandler(Set<Path> bases) {
|
public JbHandler(Set<Path> bases) {
|
||||||
@ -48,6 +59,15 @@ public final class JbHandler extends Handler.Abstract {
|
|||||||
for (final Path base : this.bases) {
|
for (final Path base : this.bases) {
|
||||||
final Path resolved = base.resolve(relative);
|
final Path resolved = base.resolve(relative);
|
||||||
if (Files.exists(resolved)) {
|
if (Files.exists(resolved)) {
|
||||||
|
final var contentType = switch (getExtension(resolved)) {
|
||||||
|
case ".html" -> "text/html";
|
||||||
|
case ".js" -> "text/javascript";
|
||||||
|
case ".css" -> "text/css";
|
||||||
|
case ".png" -> "image/png";
|
||||||
|
case ".ico" -> "image/vnd.microsoft.icon";
|
||||||
|
default -> "text/plain";
|
||||||
|
};
|
||||||
|
response.getHeaders().add(HttpHeader.CONTENT_TYPE, contentType);
|
||||||
try (final var inputStream = Files.newInputStream(resolved)) {
|
try (final var inputStream = Files.newInputStream(resolved)) {
|
||||||
final ByteBuffer byteBuffer = ByteBuffer.wrap(inputStream.readAllBytes());
|
final ByteBuffer byteBuffer = ByteBuffer.wrap(inputStream.readAllBytes());
|
||||||
response.write(true, byteBuffer, callback);
|
response.write(true, byteBuffer, callback);
|
||||||
|
Loading…
Reference in New Issue
Block a user