X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Futil%2FMultiplexer.java;h=8e5aec441fb62c6d3de4f2f0544f81f6959217a4;hb=ad522c7697632eea5751fd6adffbaa73ace97407;hp=dabcb3444e03442afc22e80197105473bf89d3e2;hpb=79d2dd644f364a02b3d902c3544dfe275ac6461e;p=jsvc.git diff --git a/src/dolda/jsvc/util/Multiplexer.java b/src/dolda/jsvc/util/Multiplexer.java index dabcb34..8e5aec4 100644 --- a/src/dolda/jsvc/util/Multiplexer.java +++ b/src/dolda/jsvc/util/Multiplexer.java @@ -5,10 +5,10 @@ import java.util.*; public class Multiplexer implements Responder { private Responder def; - private Collection subs = new LinkedList(); + private Collection matchers = new LinkedList(); - private static interface Sub { - boolean match(Request req); + public static interface Matcher { + public boolean match(Request req); } public Multiplexer(Responder def) { @@ -16,24 +16,15 @@ public class Multiplexer implements Responder { } public Multiplexer() { - this(new SimpleWriter("html") { - public void respond(Request req, java.io.PrintWriter out) { - req.status(404); - out.println(""); - out.println(""); - out.println(""); - out.println("Resource not found"); - out.println(""); - out.println("

Resource not found

"); - out.println("The resource you requested could not be found on this server."); - out.println(""); - out.println(""); + this(new Responder() { + public void respond(Request req) { + throw(new StdResponse(404, "Resource not found", "The resource you requested could not be found on this server.")); } }); } public void file(final String path, final Responder responder) { - subs.add(new Sub() { + add(new Matcher() { public boolean match(Request req) { if(req.path().equals(path)) { responder.respond(req); @@ -46,10 +37,10 @@ public class Multiplexer implements Responder { public void dir(String path, final Responder responder) { final String fp = Misc.stripslashes(path, true, true); - subs.add(new Sub() { + add(new Matcher() { public boolean match(Request req) { if(req.path().equals(fp)) { - throw(Restarts.redirect(fp + "/")); + throw(new Redirect(fp + "/")); } else if(req.path().startsWith(fp + "/")) { responder.respond(RequestWrap.chpath(req, req.path().substring(fp.length() + 1))); return(true); @@ -59,9 +50,13 @@ public class Multiplexer implements Responder { }); } + public void add(Matcher m) { + matchers.add(m); + } + public void respond(Request req) { - for(Sub s : subs) { - if(s.match(req)) + for(Matcher m : matchers) { + if(m.match(req)) return; } def.respond(req);