diff --git a/src/fr/devinsy/kiss4web/KissDispatcher.java b/src/fr/devinsy/kiss4web/KissDispatcher.java index 7cf0f38..d43adc0 100755 --- a/src/fr/devinsy/kiss4web/KissDispatcher.java +++ b/src/fr/devinsy/kiss4web/KissDispatcher.java @@ -31,14 +31,16 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import fr.devinsy.kiss4web.catchers.BlankCatcher; -import fr.devinsy.kiss4web.catchers.FolderCatcher; -import fr.devinsy.kiss4web.catchers.LongURLCatcher; -import fr.devinsy.kiss4web.catchers.RootCatcher; -import fr.devinsy.kiss4web.catchers.ShortURLCatcher; -import fr.devinsy.kiss4web.catchers.WebContentCatcher; -import fr.devinsy.kiss4web.catchers.WebInfCatcher; -import fr.devinsy.kiss4web.catchers.XHTMLCatcher; +import fr.devinsy.kiss4web.hooks.BlankHook; +import fr.devinsy.kiss4web.hooks.FolderHook; +import fr.devinsy.kiss4web.hooks.Hook; +import fr.devinsy.kiss4web.hooks.HookRegister; +import fr.devinsy.kiss4web.hooks.LongURLHook; +import fr.devinsy.kiss4web.hooks.RootHook; +import fr.devinsy.kiss4web.hooks.ShortURLHook; +import fr.devinsy.kiss4web.hooks.WebContentHook; +import fr.devinsy.kiss4web.hooks.WebInfHook; +import fr.devinsy.kiss4web.hooks.XHTMLHook; /** * @@ -52,14 +54,14 @@ public class KissDispatcher extends HttpServlet private static Logger logger = LoggerFactory.getLogger(KissDispatcher.class); public static final int DEFAULT_CACHE_AGE = 2 * 60 * 60; - private String webclassesRootPackage; + private KissClassCache cache; /** * */ public KissDispatcher() { - this.webclassesRootPackage = null; + this.cache = new KissClassCache(); } /** @@ -75,7 +77,7 @@ public class KissDispatcher extends HttpServlet * * */ - public void dispatch(final HttpServletRequest request, final HttpServletResponse response, final String webClassesRootPath) throws IOException, ServletException + public void dispatch(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { long startTime = new Date().getTime(); @@ -141,43 +143,30 @@ public class KissDispatcher extends HttpServlet */ // String urlPath = request.getPathInfo(); - if (BlankCatcher.matches(request)) + HookRegister hookRegister = KissDispatcherFactory.instance().catchers(); + if (hookRegister.hooks().isEmpty()) { - BlankCatcher.doCatch(response); + hookRegister.register(new BlankHook()); + hookRegister.register(new RootHook()); + hookRegister.register(new LongURLHook()); + hookRegister.register(new FolderHook()); + hookRegister.register(new ShortURLHook()); + hookRegister.register(new XHTMLHook()); + hookRegister.register(new WebContentHook()); + hookRegister.register(new WebInfHook()); } - else if (RootCatcher.matches(request)) - { - RootCatcher.doCatch(this.getServletConfig(), request, response, webClassesRootPath); - } - else if (LongURLCatcher.matches(request)) - { - LongURLCatcher.doCatch(this.getServletConfig(), request, response, webClassesRootPath); - } - else if (FolderCatcher.matches(request)) - { - FolderCatcher.doCatch(this.getServletConfig(), request, response, webClassesRootPath); - } - else if (ShortURLCatcher.matches(request)) - { - ShortURLCatcher.doCatch(this.getServletConfig(), request, response, webClassesRootPath); - } - else if (XHTMLCatcher.matches(request)) - { - XHTMLCatcher.doCatch(this.getServletConfig(), request, response, webClassesRootPath); - } - else if (WebContentCatcher.matches(this.getServletContext(), request)) - { - WebContentCatcher.doCatch(this.getServletContext(), request, response); - } - else if (WebInfCatcher.matches(this.getServletContext(), request, webClassesRootPath)) - { - WebInfCatcher.doCatch(this.getServletContext(), request, response, webClassesRootPath); - } - else + + // Search a matching catcher. + Hook hook = hookRegister.getMatching(this.getServletContext(), request); + if (hook == null) { logger.info("Request not satisfied [" + request.getPathInfo() + "]"); response.sendError(HttpServletResponse.SC_NOT_FOUND); } + else + { + hook.process(this.getServletConfig(), this.getServletContext(), request, response); + } // long endTime = new Date().getTime(); @@ -185,12 +174,12 @@ public class KissDispatcher extends HttpServlet } /** - * - */ + * + */ @Override public void doDelete(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - dispatch(request, response, this.webclassesRootPackage); + dispatch(request, response); } /** @@ -199,7 +188,7 @@ public class KissDispatcher extends HttpServlet @Override public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - dispatch(request, response, this.webclassesRootPackage); + dispatch(request, response); } /** @@ -208,7 +197,7 @@ public class KissDispatcher extends HttpServlet @Override public void doPost(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - dispatch(request, response, this.webclassesRootPackage); + dispatch(request, response); } /** @@ -217,12 +206,12 @@ public class KissDispatcher extends HttpServlet @Override public void doPut(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - dispatch(request, response, this.webclassesRootPackage); + dispatch(request, response); } /** - * - */ + * + */ @Override public void init() throws ServletException { @@ -253,6 +242,13 @@ public class KissDispatcher extends HttpServlet try { System.out.println("Log configuration defined (" + logFilePathname + "), will use it."); + + if (!logFilePathname.startsWith("/")) + { + logFilePathname = getServletContext().getRealPath("/") + logFilePathname; + System.out.println("Log configuration redefined (" + logFilePathname + "), will use it."); + } + org.apache.log4j.PropertyConfigurator.configure(getServletContext().getRealPath("/") + logFilePathname); } catch (Exception exception) @@ -264,9 +260,5 @@ public class KissDispatcher extends HttpServlet logger = LoggerFactory.getLogger(this.getClass()); logger.info("Log initialization done."); } - - // - this.webclassesRootPackage = getInitParameter("webClassesRootPackage"); - logger.info("webClassesRootPackage loaded=[{}]", this.webclassesRootPackage); } }