Skip to content

Commit d8acb47

Browse files
committed
added -H parameter for headers.
1 parent db455d8 commit d8acb47

File tree

2 files changed

+41
-14
lines changed

2 files changed

+41
-14
lines changed

src/main/java/org/wiztools/anyurlhttpserver/AnyUrlHttpServerMain.java

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import java.io.File;
44
import java.io.PrintStream;
5+
import java.util.List;
56
import joptsimple.OptionParser;
67
import joptsimple.OptionSet;
78
import org.eclipse.jetty.server.Server;
89
import org.eclipse.jetty.servlet.ServletContextHandler;
910
import org.eclipse.jetty.servlet.ServletHolder;
11+
import org.wiztools.commons.MultiValueMap;
12+
import org.wiztools.commons.MultiValueMapArrayList;
13+
import org.wiztools.commons.MultiValueMapLinkedHashSet;
1014

1115
/**
1216
*
@@ -20,10 +24,12 @@ private static void printHelp(PrintStream out) {
2024
out.println("\t-f\t: File to serve. When not given, prints <p>Hello World!</p>");
2125
out.println("\t-c\t: Response Content-Type. Default is text/html.");
2226
out.println("\t-r\t: Response character encoding. Default is utf-8.");
27+
out.println("\t-H\t: Header in the format: `header:value'.");
28+
out.println("\t-h\t: Print this help.");
2329
}
2430

2531
public static void main(String[] args) throws Exception {
26-
OptionParser parser = new OptionParser("p:f:c:r:h");
32+
OptionParser parser = new OptionParser("p:f:c:r:H:h");
2733
OptionSet options = parser.parse(args);
2834
if(options.has("h")) {
2935
printHelp(System.out);
@@ -47,29 +53,35 @@ public static void main(String[] args) throws Exception {
4753
System.exit(1);
4854
}
4955

50-
final File file;
56+
AnyUrlServlet servlet = new AnyUrlServlet();
57+
5158
if(options.has("f")) {
5259
String fileStr = options.valueOf("f").toString();
53-
file = new File(fileStr);
54-
}
55-
else {
56-
file = null;
60+
servlet.setFile(new File(fileStr));
5761
}
5862

59-
String contentType = null;
6063
if(options.has("c")) {
61-
contentType = options.valueOf("c").toString();
64+
servlet.setContentType(options.valueOf("c").toString());
6265
}
6366

64-
String charset = null;
6567
if(options.has("r")) {
66-
charset = options.valueOf("r").toString();
68+
servlet.setCharset(options.valueOf("r").toString());
6769
}
6870

69-
AnyUrlServlet servlet = new AnyUrlServlet();
70-
servlet.setFile(file);
71-
servlet.setContentType(contentType);
72-
servlet.setCharset(charset);
71+
if(options.has("H")) {
72+
MultiValueMap headers = new MultiValueMapLinkedHashSet();
73+
for(Object t: options.valuesOf("H")) {
74+
final String headerLine = t.toString().trim();
75+
final int sepIdx = headerLine.indexOf(':');
76+
if((sepIdx > 0) && (sepIdx < headerLine.length())) {
77+
final String header = headerLine.substring(0, sepIdx);
78+
final String value = headerLine.substring(sepIdx + 1, headerLine.length());
79+
System.out.printf("\nHeader: Value => %s:%s\n", header, value);
80+
headers.put(header, value);
81+
}
82+
}
83+
servlet.setHeaders(headers);
84+
}
7385

7486
Server server = new Server(port);
7587
server.setStopAtShutdown(true);

src/main/java/org/wiztools/anyurlhttpserver/AnyUrlServlet.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import javax.servlet.http.HttpServletRequest;
1111
import javax.servlet.http.HttpServletResponse;
1212
import org.wiztools.commons.Charsets;
13+
import org.wiztools.commons.MultiValueMap;
1314
import org.wiztools.commons.StreamUtil;
1415

1516
/**
@@ -20,6 +21,7 @@ public class AnyUrlServlet extends HttpServlet {
2021
private String contentType = "text/html";
2122
private String charset = "utf-8";
2223
private File file;
24+
private MultiValueMap<String, String> headers;
2325

2426
public void setContentType(String contentType) {
2527
this.contentType = contentType;
@@ -32,6 +34,10 @@ public void setCharset(String charset) {
3234
public void setFile(File file) {
3335
this.file = file;
3436
}
37+
38+
public void setHeaders(MultiValueMap headers) {
39+
this.headers = headers;
40+
}
3541

3642
@Override
3743
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
@@ -57,6 +63,15 @@ protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws
5763
private void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
5864
resp.setContentType(contentType);
5965
resp.setCharacterEncoding(charset);
66+
67+
if(headers != null) {
68+
for(String key: headers.keySet()) {
69+
for(String value: headers.get(key)) {
70+
resp.addHeader(key, value);
71+
}
72+
}
73+
}
74+
6075
try(OutputStream os = resp.getOutputStream();) {
6176
if(file != null && file.exists() && file.canRead()) {
6277
try(InputStream is = new FileInputStream(file)) {

0 commit comments

Comments
 (0)