package org.jgrasstools.geopaparazzi.simpleserver;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.jasper.servlet.JspServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
public abstract class EmbeddedJspServer {
private static final Logger LOG = Logger.getLogger(EmbeddedJspServer.class.getName());
protected Server _server;
protected WebAppContext webapp;
public EmbeddedJspServer( Integer port, String webappFolder ) {
if (port == null) {
port = 8080;
}
_server = new Server(port);
try {
ServletHandler servletHandler = new ServletHandler();
_server.setHandler(servletHandler);
configureServletHandler(servletHandler);
// add jsp servlet mappings
String[] jspExtensions = {"*.jsp", "*.jspf", "*.jspx", "*.xsp", "*.JSP", "*.JSPF", "*.JSPX", "*.XSP"};
Class<JspServlet> jspServletClass = org.apache.jasper.servlet.JspServlet.class;
for( String jspExt : jspExtensions ) {
ServletHolder servletHolder = servletHandler.addServletWithMapping(jspServletClass, jspExt);
servletHolder.setInitParameter("logVerbosityLevel", "INFO");
servletHolder.setInitParameter("fork", "false");
servletHolder.setInitParameter("keepgenerated", "true");
// servletHolder.setInitParameter("keepgenerated", "true");
// <load-on-startup>0</load-on-startup>
}
if (webappFolder != null) {
webapp = getWebAppContext(_server, webappFolder);
configureWebAppContext(webapp);
_server.setHandler(webapp);
}
} catch (Exception e) {
e.printStackTrace();
LOG.log(Level.ALL, "Error", e);
}
}
/**
* Configure the webapp context after the basic jsp configurations have been done.
*
* <p>Note that setContextPath has been set to "/" by default.</p>
*
* @param webapp the webapp context.
*/
protected abstract void configureWebAppContext( WebAppContext webapp );
/**
* Configure the servletHandler if necessary.
*
* @param servletHandler the handler to configure.
*/
protected abstract void configureServletHandler( ServletHandler servletHandler );
/**
* Run code before server start.
*/
protected abstract void doPreStart();
public void start() throws Exception {
doPreStart();
_server.start();
_server.dumpStdErr();
// _server.join();
}
public void stop() throws Exception {
_server.stop();
}
private WebAppContext getWebAppContext( Server server, String webFolder ) {
// 2. Creating the WebAppContext for the created content
WebAppContext ctx = new WebAppContext();
ctx.setResourceBase(webFolder);
ctx.setContextPath("/");
// 3. Including the JSTL jars for the webapp.
ctx.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$");
// 4. Enabling the Annotation based configuration
org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList
.setServerDefault(server);
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
"org.eclipse.jetty.annotations.AnnotationConfiguration");
return ctx;
}
public static void main( String[] args ) throws Exception {
org.eclipse.jetty.util.log.Log.setLog(new DisabledLogging());
String webFolder = "/home/hydrologis/development/jgrasstools-git/server/src/main/webapp";
EmbeddedJspServer jspServer = new EmbeddedJspServer(null, webFolder){
@Override
protected void configureWebAppContext( WebAppContext webapp ) {
}
@Override
protected void configureServletHandler( ServletHandler servletHandler ) {
}
@Override
protected void doPreStart() {
}
};
jspServer.start();
}
}