From c21adf1c57496d003aabb8bedc4b1239d3be106e Mon Sep 17 00:00:00 2001
From: ulrich
Date: Fri, 26 Mar 2021 16:31:34 +0000
Subject: [PATCH] String-Konstanten erstellt
---
src/de/uhilger/minsrv/handler/FileHandler.java | 78 +++++++++++++++++++++++---------------
1 files changed, 47 insertions(+), 31 deletions(-)
diff --git a/src/de/uhilger/minsrv/handler/FileHandler.java b/src/de/uhilger/minsrv/handler/FileHandler.java
index 129cd57..d566db4 100644
--- a/src/de/uhilger/minsrv/handler/FileHandler.java
+++ b/src/de/uhilger/minsrv/handler/FileHandler.java
@@ -37,12 +37,11 @@
/**
* Die Klasse FileHandler dient zur Auslieferung von Dateiinhalten über
* HTTP.
- *
- * Für das Streaming über HTTP wird die
- * Auslieferung von Teilinhalten mit dem Accept-Ranges-Header angeboten und
- * via Range-Header unterstützt.
+ *
+ * Für das Streaming über HTTP wird die Auslieferung von Teilinhalten
+ * mit dem Accept-Ranges-Header angeboten und via Range-Header unterstützt.
* (vgl. https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests)
- *
+ *
* @author Ulrich Hilger
* @version 0.1, 25. März 2021
*/
@@ -52,16 +51,28 @@
private static final Logger logger = Logger.getLogger(FileHandler.class.getName());
/* Header Namen */
- final static String RANGE_HEADER = "Range";
- final static String CONTENT_RANGE_HEADER = "Content-Range";
- final static String ACCEPT_RANGES_HEADER = "Accept-Ranges";
- final static String LAST_MODIFIED_DATE_HEADER = "Last-Modified";
- final static String CONTENT_TYPE = "Content-Type";
+ public static final String RANGE_HEADER = "Range";
+ public static final String CONTENT_RANGE_HEADER = "Content-Range";
+ public static final String ACCEPT_RANGES_HEADER = "Accept-Ranges";
+ public static final String LAST_MODIFIED_DATE_HEADER = "Last-Modified";
+ public static final String CONTENT_TYPE = "Content-Type";
/* Status Codes */
public static final int SC_OK = 200;
public static final int SC_PARTIAL_CONTENT = 206;
public static final int SC_NOT_FOUND = 404;
+
+ /* String Konstanten */
+ public static final String STR_BYTES = "bytes";
+ public static final String STR_BLANK = " ";
+ public static final String STR_DASH = "-";
+ public static final String STR_COMMA = ",";
+ public static final String STR_SLASH = "/";
+ public static final String STR_DOT = ".";
+ public static final String STR_NOT_FOUND = " not found.";
+ public static final String LM_PATTERN = "EEE, dd MMM yyyy HH:mm:ss zzz";
+ public static final String RANGE_PATTERN = "[^\\d-,]";
+ public static final String WELCOME_FILE = "index.html";
/* Ablageort fuer Webinhalte */
private final String basePath;
@@ -91,15 +102,15 @@
String uriPath = e.getRequestURI().getPath();
logger.info(uriPath);
String fName = uriPath.substring(ctxPath.length());
- if (fName.startsWith(".")) {
+ if (fName.startsWith(STR_DOT)) {
sendNotFound(e, fName);
} else {
Headers headers = e.getRequestHeaders();
if (headers.containsKey(RANGE_HEADER)) {
serveFileParts(e, new File(basePath, fName));
} else {
- if (fName.endsWith("/")) {
- fName += "index.html";
+ if (fName.endsWith(STR_SLASH)) {
+ fName += WELCOME_FILE;
}
serveFile(e, new File(basePath, fName));
}
@@ -173,14 +184,7 @@
Range range = i.next();
start = range.getStart();
end = range.getEnd();
- StringBuilder sb = new StringBuilder();
- sb.append("bytes ");
- sb.append(range.getStart());
- sb.append("-");
- sb.append(range.getEnd());
- sb.append("/");
- sb.append(file.length());
- resHeaders.add(CONTENT_RANGE_HEADER, sb.toString());
+ resHeaders.add(CONTENT_RANGE_HEADER, contentRangeHdr(range, file));
responseLength += (end - start);
}
e.sendResponseHeaders(SC_PARTIAL_CONTENT, responseLength);
@@ -201,14 +205,26 @@
sendNotFound(e, file.getName());
}
}
-
+
+ private String contentRangeHdr(Range range, File file) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(STR_BYTES);
+ sb.append(STR_BLANK);
+ sb.append(range.getStart());
+ sb.append(STR_DASH);
+ sb.append(range.getEnd());
+ sb.append(STR_SLASH);
+ sb.append(file.length());
+ return sb.toString();
+ }
+
private void setCommonHeaders(Headers resHeaders, File file) throws IOException {
- resHeaders.add(ACCEPT_RANGES_HEADER, "bytes");
+ resHeaders.add(ACCEPT_RANGES_HEADER, STR_BYTES);
String mimeType = Files.probeContentType(file.toPath());
- if(mimeType != null) {
+ if (mimeType != null) {
resHeaders.add(CONTENT_TYPE, mimeType);
}
- SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
+ SimpleDateFormat sdf = new SimpleDateFormat(LM_PATTERN);
Date date = new Date(file.lastModified());
resHeaders.add(LAST_MODIFIED_DATE_HEADER, sdf.format(date));
}
@@ -228,7 +244,7 @@
private RangeGroup parseRanges(HttpExchange e, File file) {
RangeGroup ranges = new RangeGroup();
String rangeHeader = e.getRequestHeaders().get(RANGE_HEADER).toString();
-
+
/*
Inhalt des Range-Headers von nicht benoetigten Angaben befreien
@@ -241,7 +257,7 @@
Der regulaere Ausdruck "[^\\d-,]" bezeichnet alle Zeichen, die keine
Ziffern 0-9, Bindestrich oder Komma sind.
*/
- rangeHeader = rangeHeader.replaceAll("[^\\d-,]", "");
+ rangeHeader = rangeHeader.replaceAll(RANGE_PATTERN, "");
/*
Die Ranges ermitteln.
@@ -261,10 +277,10 @@
values.length > 1 und values[0].length < 1: Fall 1 ist gegeben
ansonsten: Fall 2 ist gegeben
*/
- String[] rangeArray = rangeHeader.split(",");
+ String[] rangeArray = rangeHeader.split(STR_COMMA);
for (String rangeStr : rangeArray) {
Range range = new Range();
- String[] values = rangeStr.split("-");
+ String[] values = rangeStr.split(STR_DASH);
if (values.length < 2) {
// Fall 3
range.setStart(Long.parseLong(values[0]));
@@ -287,7 +303,7 @@
/**
* Eine nicht gefunden Antwort senden
- *
+ *
* @param e das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum
* Anfertigen und Senden der Antwort
* @param fname Name der Datei, die nicht gefunden wurde
@@ -295,7 +311,7 @@
*/
public void sendNotFound(HttpExchange e, String fname) throws IOException {
OutputStream os = e.getResponseBody();
- String response = fname + " not found.";
+ String response = fname + STR_NOT_FOUND;
byte[] bytes = response.getBytes(StandardCharsets.UTF_8);
e.sendResponseHeaders(SC_NOT_FOUND, bytes.length);
os.write(bytes);
--
Gitblit v1.9.3