Skip to content

Commit d8082dc

Browse files
committed
initial import
0 parents  commit d8082dc

File tree

5 files changed

+180
-0
lines changed

5 files changed

+180
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
build
2+
.gradle
3+
.nb-gradle

build.gradle

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apply plugin: 'java'
2+
apply plugin: 'application'
3+
4+
sourceCompatibility = '1.8'
5+
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
6+
7+
mainClassName = 'org.wiztools.anyurlhttpserver.AnyUrlHttpServerMain'
8+
9+
repositories {
10+
mavenLocal()
11+
mavenCentral()
12+
}
13+
14+
dependencies {
15+
compile 'org.eclipse.jetty:jetty-servlet:9.+',
16+
'org.wiztools.commons:wiztools-commons-lib:0.4.1',
17+
'net.sf.jopt-simple:jopt-simple:4.+'
18+
19+
testCompile group: 'junit', name: 'junit', version: '4.+'
20+
}
21+
22+
jar {
23+
manifest {
24+
attributes "Main-Class": "$mainClassName"
25+
}
26+
27+
from {
28+
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
29+
}
30+
}

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
rootProject.name = 'anyurlhttpserver'
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.wiztools.anyurlhttpserver;
2+
3+
import java.io.File;
4+
import java.io.PrintStream;
5+
import joptsimple.OptionParser;
6+
import joptsimple.OptionSet;
7+
import org.eclipse.jetty.server.Server;
8+
import org.eclipse.jetty.servlet.ServletContextHandler;
9+
import org.eclipse.jetty.servlet.ServletHolder;
10+
11+
/**
12+
*
13+
* @author subwiz
14+
*/
15+
public class AnyUrlHttpServerMain {
16+
17+
private static void printHelp(PrintStream out) {
18+
out.println("Parameters: ");
19+
out.println("\t-p\t: [Mandatory] port number.");
20+
out.println("\t-f\t: File to serve. When not given, prints <p>Hello World!</p>");
21+
out.println("\t-c\t: Response Content-Type. Default is text/html.");
22+
out.println("\t-r\t: Response character encoding. Default is utf-8.");
23+
}
24+
25+
public static void main(String[] args) throws Exception {
26+
OptionParser parser = new OptionParser("p:f:c:r:h");
27+
OptionSet options = parser.parse(args);
28+
if(options.has("h")) {
29+
printHelp(System.out);
30+
System.exit(0);
31+
}
32+
33+
final int port;
34+
if(options.has("p")) {
35+
String portStr = options.valueOf("p").toString();
36+
try {
37+
port = Integer.parseInt(portStr);
38+
}
39+
catch(NumberFormatException ex) {
40+
throw new IllegalArgumentException(
41+
"Invalid port number: " + portStr, ex);
42+
}
43+
}
44+
else {
45+
port = -1;
46+
System.err.println("Mandatory parameter port not given.");
47+
System.exit(1);
48+
}
49+
50+
final File file;
51+
if(options.has("f")) {
52+
String fileStr = options.valueOf("f").toString();
53+
file = new File(fileStr);
54+
}
55+
else {
56+
file = null;
57+
}
58+
59+
AnyUrlServlet servlet = new AnyUrlServlet();
60+
servlet.setFile(file);
61+
62+
Server server = new Server(port);
63+
server.setStopAtShutdown(true);
64+
65+
// Attach the servlet:
66+
ServletContextHandler ctx = new ServletContextHandler();
67+
ctx.setContextPath("/");
68+
server.setHandler(ctx);
69+
ctx.addServlet(new ServletHolder(servlet), "/*");
70+
71+
server.start();
72+
}
73+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.wiztools.anyurlhttpserver;
2+
3+
import java.io.File;
4+
import java.io.FileInputStream;
5+
import java.io.IOException;
6+
import java.io.InputStream;
7+
import java.io.OutputStream;
8+
import javax.servlet.ServletException;
9+
import javax.servlet.http.HttpServlet;
10+
import javax.servlet.http.HttpServletRequest;
11+
import javax.servlet.http.HttpServletResponse;
12+
import org.wiztools.commons.Charsets;
13+
import org.wiztools.commons.StreamUtil;
14+
15+
/**
16+
*
17+
* @author subwiz
18+
*/
19+
public class AnyUrlServlet extends HttpServlet {
20+
private String contentType = "text/html";
21+
private String charset = "utf-8";
22+
private File file;
23+
24+
public void setContentType(String contentType) {
25+
this.contentType = contentType;
26+
}
27+
28+
public void setCharset(String charset) {
29+
this.charset = charset;
30+
}
31+
32+
public void setFile(File file) {
33+
this.file = file;
34+
}
35+
36+
@Override
37+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
38+
process(req, resp);
39+
}
40+
41+
@Override
42+
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
43+
process(req, resp);
44+
}
45+
46+
@Override
47+
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
48+
process(req, resp);
49+
}
50+
51+
@Override
52+
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
53+
process(req, resp);
54+
}
55+
56+
57+
private void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
58+
resp.setContentType(contentType);
59+
resp.setCharacterEncoding(charset);
60+
try(OutputStream os = resp.getOutputStream();) {
61+
if(file != null && file.exists() && file.canRead()) {
62+
try(InputStream is = new FileInputStream(file)) {
63+
StreamUtil.copy(is, os);
64+
}
65+
}
66+
else {
67+
byte[] out = "<p>Hello World!</p>".getBytes(Charsets.UTF_8);
68+
os.write(out);
69+
}
70+
}
71+
}
72+
73+
}

0 commit comments

Comments
 (0)