KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > webapp > http > servlet > PathDispatcher


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 JavaDoc;
7 import javax.servlet.http.HttpServletResponse JavaDoc;
8 import java.util.ArrayList JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.List JavaDoc;
11 import java.util.regex.Pattern JavaDoc;
12
13 public class PathDispatcher implements PseudoServlet {
14
15     private static Log log = LogFactory.getLog(PathDispatcher.class);
16
17     private List JavaDoc matchers = new ArrayList JavaDoc();
18
19     public void service(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
20         String JavaDoc path = request.getRequestURI();
21
22         if( log.isDebugEnabled() ){
23             log.debug( "path: " + path );
24         }
25
26         Iterator JavaDoc 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 JavaDoc pathExpression, PseudoServlet toServer) {
38         matchers.add(new Matcher(pathExpression, toServer));
39     }
40
41     private class Matcher {
42         private Pattern JavaDoc pattern;
43         private PseudoServlet server;
44
45         public Matcher(String JavaDoc expression, PseudoServlet server) {
46             this.pattern = Pattern.compile(expression);
47             this.server = server;
48         }
49
50         boolean serviceOnMatch(String JavaDoc path, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
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 JavaDoc i = matchers.iterator();
66         while (i.hasNext()) {
67             Matcher matcher = (Matcher) i.next();
68             matcher.shutdown();
69         }
70     }
71 }
72
Popular Tags