1 package com.icesoft.faces.webapp.http.servlet; 2 3 import org.apache.commons.logging.Log; 4 import org.apache.commons.logging.LogFactory; 5 6 import javax.servlet.http.HttpServletRequest ; 7 import javax.servlet.http.HttpServletResponse ; 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 import java.util.List ; 11 import java.util.regex.Pattern ; 12 13 public class PathDispatcher implements PseudoServlet { 14 15 private static Log log = LogFactory.getLog(PathDispatcher.class); 16 17 private List matchers = new ArrayList (); 18 19 public void service(HttpServletRequest request, HttpServletResponse response) throws Exception { 20 String path = request.getRequestURI(); 21 22 if( log.isDebugEnabled() ){ 23 log.debug( "path: " + path ); 24 } 25 26 Iterator i = matchers.iterator(); 27 boolean matched = false; 28 while (!matched && i.hasNext()) { 29 matched = ((Matcher) i.next()).serviceOnMatch(path, request, response); 30 } 31 32 if (!matched) { 33 response.sendError(404, "Resource at '" + path + "' not found."); 34 } 35 } 36 37 public void dispatchOn(String pathExpression, PseudoServlet toServer) { 38 matchers.add(new Matcher(pathExpression, toServer)); 39 } 40 41 private class Matcher { 42 private Pattern pattern; 43 private PseudoServlet server; 44 45 public Matcher(String expression, PseudoServlet server) { 46 this.pattern = Pattern.compile(expression); 47 this.server = server; 48 } 49 50 boolean serviceOnMatch(String path, HttpServletRequest request, HttpServletResponse response) throws Exception { 51 if (pattern.matcher(path).find()) { 52 server.service(request, response); 53 return true; 54 } else { 55 return false; 56 } 57 } 58 59 void shutdown() { 60 server.shutdown(); 61 } 62 } 63 64 public void shutdown() { 65 Iterator i = matchers.iterator(); 66 while (i.hasNext()) { 67 Matcher matcher = (Matcher) i.next(); 68 matcher.shutdown(); 69 } 70 } 71 } 72 | Popular Tags |