Skip to content

Commit 1654aac

Browse files
committed
get built in mime types
1 parent 13aae48 commit 1654aac

File tree

2 files changed

+17
-23
lines changed

2 files changed

+17
-23
lines changed

avaje-jex/src/main/java/io/avaje/jex/AbstractStaticHandler.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
package io.avaje.jex;
22

3+
import java.net.FileNameMap;
4+
import java.net.URLConnection;
35
import java.util.Map;
6+
import java.util.Objects;
47
import java.util.function.Predicate;
58

69
import com.sun.net.httpserver.HttpExchange;
710

811
import io.avaje.jex.http.BadRequestException;
912
import io.avaje.jex.http.NotFoundException;
1013

11-
abstract sealed class AbstractStaticHandler implements ExchangeHandler permits StaticFileHandler, JrtResourceHandler {
14+
abstract sealed class AbstractStaticHandler implements ExchangeHandler
15+
permits StaticFileHandler, JrtResourceHandler {
16+
1217
protected final Map<String, String> mimeTypes;
1318
protected final String filesystemRoot;
1419
protected final String urlPrefix;
1520
protected final Predicate<Context> skipFilePredicate;
1621
protected final Map<String, String> headers;
22+
private static final FileNameMap mimeMap = URLConnection.getFileNameMap();
1723

1824
protected AbstractStaticHandler(
1925
String urlPrefix,
@@ -50,7 +56,14 @@ protected String getExt(String path) {
5056
}
5157

5258
protected String lookupMime(String path) {
53-
String ext = getExt(path).toLowerCase();
54-
return mimeTypes.getOrDefault(ext, "application/octet-stream");
59+
var lower = path.toLowerCase();
60+
61+
return Objects.requireNonNullElseGet(
62+
mimeMap.getContentTypeFor(path),
63+
() -> {
64+
String ext = getExt(lower);
65+
66+
return mimeTypes.getOrDefault(ext, "application/octet-stream");
67+
});
5568
}
5669
}

avaje-jex/src/main/java/io/avaje/jex/StaticResourceHandlerBuilder.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,12 @@ final class StaticResourceHandlerBuilder implements StaticContentConfig {
2121

2222
static final Predicate<Context> NO_OP_PREDICATE = ctx -> false;
2323
private static final String TEXT_PLAIN = "text/plain";
24-
private static final Map<String, String> MIME_MAP =
25-
Map.ofEntries(
26-
entry("css", "text/css"),
27-
entry("gif", "image/gif"),
28-
entry("html", "text/html"),
29-
entry("js", "application/javascript"),
30-
entry("json", "application/json"),
31-
entry("jpg", "image/jpeg"),
32-
entry("jpeg", "image/jpeg"),
33-
entry("mp4", "video/mp4"),
34-
entry("pdf", "application/pdf"),
35-
entry("png", "image/png"),
36-
entry("svg", "image/svg+xml"),
37-
entry("xlsm", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
38-
entry("xml", "application/xml"),
39-
entry("zip", "application/zip"),
40-
entry("md", TEXT_PLAIN),
41-
entry("txt", TEXT_PLAIN),
42-
entry("php", TEXT_PLAIN));
4324

4425
private String path = "/";
4526
private String root = "/public/";
4627
private String directoryIndex = null;
4728
private StaticResourceLoader resourceLoader = CoreServiceLoader.resourceLoader();
48-
private final Map<String, String> mimeTypes = new HashMap<>(MIME_MAP);
29+
private final Map<String, String> mimeTypes = new HashMap<>();
4930
private final Map<String, String> headers = new HashMap<>();
5031
private Predicate<Context> skipFilePredicate = NO_OP_PREDICATE;
5132
private ResourceLocation location = CLASS_PATH;

0 commit comments

Comments
 (0)