diff --git a/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java b/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java index e7ebdc40d..f8ba1e3cf 100644 --- a/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java +++ b/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java @@ -24,10 +24,10 @@ */ public abstract class AbstractWebServer implements WebServer { - protected PippoFilter pippoFilter; + private PippoFilter pippoFilter; protected String pippoFilterPath; - protected PippoSettings pippoSettings; + private Application application; private T settings; protected List> listeners; @@ -49,13 +49,26 @@ public T getSettings() { @Override public PippoFilter getPippoFilter() { + if (pippoFilter == null) { + setPippoFilter(createPippoFilter()); + } + return pippoFilter; } + /** + * Set the {@link PippoFilter} instance. + * This method call {@link PippoFilter#setApplication(Application)} to end. + * + * @param pippoFilter + * @return + */ @Override public WebServer setPippoFilter(PippoFilter pippoFilter) { this.pippoFilter = pippoFilter; + pippoFilter.setApplication(application); + return this; } @@ -74,8 +87,8 @@ public WebServer setPippoFilterPath(String pippoFilterPath) { } @Override - public WebServer init(PippoSettings pippoSettings) { - this.pippoSettings = pippoSettings; + public WebServer init(Application application) { + this.application = application; return this; } @@ -87,4 +100,26 @@ public WebServer addListener(Class listener) { return this; } + public Application getApplication() { + return application; + } + + /** + * Override this method if you want to customize the {@link PippoFilter}. + *

+ *

+     * protected PippoFilter createPippoFilter() {
+     *     PippoFilter pippoFilter = super.createPippoFilter();
+     *     pippoFilter.setIgnorePaths(Collections.singleton("/favicon.ico"));
+     *
+     *     return pippoFilter;
+     * }
+     * 
+ * + * @return + */ + protected PippoFilter createPippoFilter() { + return new PippoFilter(); + } + } diff --git a/pippo-core/src/main/java/ro/pippo/core/Pippo.java b/pippo-core/src/main/java/ro/pippo/core/Pippo.java index 774cb2d80..ee5428563 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Pippo.java +++ b/pippo-core/src/main/java/ro/pippo/core/Pippo.java @@ -17,11 +17,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ro.pippo.core.reload.ReloadClassLoader; +import ro.pippo.core.reload.ReloadWatcher; import ro.pippo.core.route.ResourceRouting; import ro.pippo.core.route.Route; import ro.pippo.core.route.RouteGroup; -import ro.pippo.core.reload.ReloadWatcher; -import ro.pippo.core.reload.ReloadClassLoader; import ro.pippo.core.util.ServiceLocator; import java.io.IOException; @@ -130,11 +130,7 @@ public WebServer getServer() { */ public Pippo setServer(WebServer server) { this.server = server; - - Application application = getApplication(); - PippoFilter pippoFilter = createPippoFilter(application); - PippoSettings pippoSettings = application.getPippoSettings(); - this.server.setPippoFilter(pippoFilter).init(pippoSettings); + this.server.init(getApplication()); return this; } @@ -151,7 +147,7 @@ public void start(int port) { public void start() { if (running) { - log.warn("Server is already started "); + log.warn("Server is already started"); return; } @@ -211,28 +207,6 @@ public static Pippo send(final String text) { return pippo; } - /** - * Override this method if you want to customize the PippoFilter. - *

- *

-     * protected PippoFilter createPippoFilter(Application application) {
-     *     PippoFilter pippoFilter = super.createPippoFilter(application);
-     *     pippoFilter.setIgnorePaths(Collections.singleton("/favicon.ico"));
-     *
-     *     return pippoFilter;
-     * }
-     * 
- * - * @param application - * @return - */ - protected PippoFilter createPippoFilter(Application application) { - PippoFilter pippoFilter = new PippoFilter(); - pippoFilter.setApplication(application); - - return pippoFilter; - } - protected void startReloadWatcher() { if (reloadWatcher == null) { reloadWatcher = createReloadWatcher(); @@ -271,14 +245,7 @@ public void onEvent(ReloadWatcher.Event event, Path dir, Path path) { } private void addShutdownHook() { - Runtime.getRuntime().addShutdownHook(new Thread() { - - @Override - public void run() { - Pippo.this.stop(); - } - - }); + Runtime.getRuntime().addShutdownHook(new Thread(Pippo.this::stop)); } private Application createApplication() { diff --git a/pippo-core/src/main/java/ro/pippo/core/WebServer.java b/pippo-core/src/main/java/ro/pippo/core/WebServer.java index 456de5a6a..0e6a0c6a6 100644 --- a/pippo-core/src/main/java/ro/pippo/core/WebServer.java +++ b/pippo-core/src/main/java/ro/pippo/core/WebServer.java @@ -88,7 +88,7 @@ public interface WebServer { */ WebServer setPippoFilterPath(String pippoFilterPath); - WebServer init(PippoSettings pippoSettings); + WebServer init(Application application); void start(); diff --git a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java index e519b75a4..9a352a0f6 100644 --- a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java +++ b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java @@ -91,7 +91,7 @@ public void stop() { @Override protected JettySettings createDefaultSettings() { - return new JettySettings(pippoSettings); + return new JettySettings(getApplication().getPippoSettings()); } protected void internalStart() { @@ -166,7 +166,7 @@ protected ServletContextHandler createPippoHandler() { handler.setContextPath(getSettings().getContextPath()); // inject application as context attribute - handler.setAttribute(PIPPO_APPLICATION, pippoFilter.getApplication()); + handler.setAttribute(PIPPO_APPLICATION, getApplication()); // add pippo filter addPippoFilter(handler); @@ -187,7 +187,7 @@ protected ServletContextHandler createPippoHandler() { } private MultipartConfigElement createMultipartConfigElement() { - Application application = pippoFilter.getApplication(); + Application application = getApplication(); String location = application.getUploadLocation(); long maxFileSize = application.getMaximumUploadSize(); @@ -201,7 +201,7 @@ private void addPippoFilter(ServletContextHandler handler) { EnumSet dispatches = EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR); - FilterHolder pippoFilterHolder = new FilterHolder(pippoFilter); + FilterHolder pippoFilterHolder = new FilterHolder(getPippoFilter()); handler.addFilter(pippoFilterHolder, pippoFilterPath, dispatches); log.debug("Using pippo filter for path '{}'", pippoFilterPath); } diff --git a/pippo-server-parent/pippo-tjws/src/main/java/ro/pippo/tjws/TjwsServer.java b/pippo-server-parent/pippo-tjws/src/main/java/ro/pippo/tjws/TjwsServer.java index 22eed000c..b8c137d0b 100644 --- a/pippo-server-parent/pippo-tjws/src/main/java/ro/pippo/tjws/TjwsServer.java +++ b/pippo-server-parent/pippo-tjws/src/main/java/ro/pippo/tjws/TjwsServer.java @@ -116,7 +116,7 @@ public WebServer addListener(Class l @Override protected WebServerSettings createDefaultSettings() { - return new WebServerSettings(pippoSettings); + return new WebServerSettings(getApplication().getPippoSettings()); } } diff --git a/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java b/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java index d4348be85..2c843d8f2 100644 --- a/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java +++ b/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java @@ -24,8 +24,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ro.pippo.core.AbstractWebServer; -import ro.pippo.core.Application; -import ro.pippo.core.PippoFilter; import ro.pippo.core.PippoRuntimeException; import ro.pippo.core.PippoServlet; import ro.pippo.core.PippoServletContextListener; @@ -45,7 +43,6 @@ public class TomcatServer extends AbstractWebServer { private static final Logger log = LoggerFactory.getLogger(TomcatServer.class); - private Application application; private Tomcat tomcat; private final ExecutorService executor = Executors.newSingleThreadExecutor(); @@ -73,18 +70,9 @@ public void stop() { } } - @Override - public WebServer setPippoFilter(PippoFilter pippoFilter) { - super.setPippoFilter(pippoFilter); - - application = pippoFilter.getApplication(); - - return this; - } - @Override protected TomcatSettings createDefaultSettings() { - return new TomcatSettings(pippoSettings); + return new TomcatSettings(getApplication().getPippoSettings()); } protected void internalStart() { @@ -105,7 +93,7 @@ protected void internalStart() { Context context = tomcat.addContext(getSettings().getContextPath(), docBase.getAbsolutePath()); context.setAllowCasualMultipartParsing(true); PippoServlet pippoServlet = new PippoServlet(); - pippoServlet.setApplication(application); + pippoServlet.setApplication(getApplication()); Wrapper wrapper = context.createWrapper(); String name = "pippoServlet"; @@ -117,7 +105,7 @@ protected void internalStart() { context.addServletMapping(pippoFilterPath, name); // inject application as context attribute - context.getServletContext().setAttribute(PIPPO_APPLICATION, application); + context.getServletContext().setAttribute(PIPPO_APPLICATION, getApplication()); // add initializers context.addApplicationListener(PippoServletContextListener.class.getName()); diff --git a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java index c22a79226..7682ccffb 100644 --- a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java +++ b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java @@ -105,7 +105,7 @@ public void stop() { @Override protected UndertowSettings createDefaultSettings() { - return new UndertowSettings(pippoSettings); + return new UndertowSettings(getApplication().getPippoSettings()); } protected Undertow createServer(HttpHandler contextHandler) { @@ -171,7 +171,7 @@ protected DeploymentManager createPippoDeploymentManager() throws ServletExcepti info.setIgnoreFlush(true); // inject application as context attribute - info.addServletContextAttribute(PIPPO_APPLICATION, pippoFilter.getApplication()); + info.addServletContextAttribute(PIPPO_APPLICATION, getApplication()); // add pippo filter addPippoFilter(info); @@ -196,7 +196,7 @@ protected DeploymentManager createPippoDeploymentManager() throws ServletExcepti } private MultipartConfigElement createMultipartConfigElement() { - Application application = pippoFilter.getApplication(); + Application application = getApplication(); String location = application.getUploadLocation(); long maxFileSize = application.getMaximumUploadSize(); @@ -208,7 +208,7 @@ private void addPippoFilter(DeploymentInfo info) { pippoFilterPath = "/*"; // default value } - info.addFilter(new FilterInfo("PippoFilter", PippoFilter.class, new ImmediateInstanceFactory<>(pippoFilter))); + info.addFilter(new FilterInfo("PippoFilter", PippoFilter.class, new ImmediateInstanceFactory<>(getPippoFilter()))); info.addFilterUrlMapping("PippoFilter", pippoFilterPath, DispatcherType.REQUEST); log.debug("Using pippo filter for path '{}'", pippoFilterPath); }