public class Multiplexer implements Responder {
private Responder def;
- private Collection<Sub> subs = new LinkedList<Sub>();
+ private Collection<Matcher> matchers = new LinkedList<Matcher>();
- private static interface Sub {
- boolean match(Request req);
+ public static interface Matcher {
+ public boolean match(Request req);
}
public Multiplexer(Responder def) {
}
public Multiplexer() {
- this(new SimpleWriter("html") {
- public void respond(Request req, java.io.PrintWriter out) {
- req.status(404);
- out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">");
- out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-US\">");
- out.println("<head><title>Resource not found</title></head>");
- out.println("<body>");
- out.println("<h1>Resource not found</h1>");
- out.println("The resource you requested could not be found on this server.");
- out.println("</body>");
- out.println("</html>");
+ this(new Responder() {
+ public void respond(Request req) {
+ throw(Restarts.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);
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 + "/"));
});
}
+ 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);